Drone 基本原理和流程(一)

CI/CD对开发团队的重要性

  • 软件开发是是一个复杂的工业化流程,编码只是其中的一部分,CI/CD 使得开发流程更加标准化、专业化、自动化和更加稳定,可以在开发过程中提早发现问题,从而提高开发效率,节省大量时间,一个好的CI/CD流程可以大大提高了软件的价值。CI/CD尤其对追求持续快速响应变化,持续迭代的敏捷开发中流程尤为重要。

CI/CD的技术选型

  • 技术选型对于一个产品一个团队来说至关重要。对于敏捷团队的技术选型,往往不需要大而全的方案,更看重轻量高效,易于快速掌握,Drone刚好满足以上要求,轻量级易于掌握,又能满足各种需求。Drone原生于docker技术的,充分利用了docker的优势(如环境隔离、标准化镜像),轻量高效,非常适合docker技术栈(docker docker-compose swarm k8s),当然也可以用于传统的scp ssh拷贝源代码的方式。
  • 如果你本身是一个开发人员,没有太多CI/CD工具经验,想快速构建一个CI/CD流程,那么Drone就是你不二的选择。如果你之前用过Travis CI,对docker技术有一定的了解,那么就能飞快入门。

Drone优势

流程定义简单

配置即为代码,用配置的方式简单明了定义流程,告别复杂的shell脚本。

  1. Drone采用主流的基于pipline的方式进行流程定义,易于理解
  2. Drone主要采用yaml作为流程描述方式(语言),简单明了易于阅读。对于复杂的配置可以采用另一种类似json的jsonent 配置方式来定义,好处是可以定义方法函数,易于复用。

部署简单

  • Drone 部署简单,可以采用Docker部署的方式,只需要将官网提供的docker启动命令改几个参数,直接运行就启动起来了,整个配置过程只需要几分钟。

支持多环境

  • 支持多硬件环境

Drone适合在各种平台运行,如Linux x64、ARM、ARM64 Windows x64。同时 Drone 文件很小,对系统要求特别低,可以选择一个很便宜树莓派机子当服务器,甚至可以拿一台小米6来作为Drone服务器。

  • 支持多种源代码管理系统

Drone支持各种多种主流的git源代码管理系统如 Github, Bitbucket, GitLab GitTea, Drone对各种源代码管理系统实现基本是一致的, 所以可以很容易的在各种源代码管理系统之间无痛迁移。

  • 支持各种编程语言编程环境

Drone可以用于任何编程语言、任何数据,任何服务,只要能在docker里跑的程序都能用Drone。

扩展性好

  • Drone有大量的插件,虽然没法和 jienkens比但是绝对能满足你各种需求,最厉害的是他自定义插件非常容易,你可以快速构建自己的插件,一个插件实际就是一个docker镜像,并且构建插件并不依赖于开发语言,甚至可以用简单的shell脚本。

提供隔离的运行环境:

这个实际上是利用了docker的特性,在pipline的每一步都是运行在docker中的独立应用,给你完全的控制,不用考虑各种依赖。

支持分布式扩展:

  • 可以在多台机子中部署Drone-agent,实现一个Drone群集,实行Drone的横向扩展,可以实现多build 多stage的并发执行。Drone同时和k8s实现了深入定制化集成,采用k8s的方式部署,利用k8s的特性实现弹性分布式扩展。

易于调试

  • 可以实时的以ssh进入container进行调试
  • 可以用Drone exec方法在本地调试,解析执行Drone.yaml
  • 可以直接加断点在本地debug(后续文章将介绍如何本地debug)。

方便灵活的build流程定义(并发、顺序、依赖)

  • Drone可以通过配置 multiple pipeline 和 depends_on来定义各个step stage的依赖关系,执行先后顺序,是否同时并发执行。

Drone 敏捷开发 DevOps

  • 敏捷开发打破了需求分析、测试、开发运维之间的一些孤岛。敏捷开发使得团队中各种角色的融合,开发承担测试的工作,运维的工作,设计工作。

  • 关于什么是DevOps,有各种的理解,有各种的文章,本人的理解就是,开发过程和运维过程紧密结合,开发更深入的参与运维过程,dev和Ops两者角色的融合,两者更好的合作。

  • CI/CD就是从技术层面、工具层面来实现了敏捷开发的理念,实现开发、测试、运维紧密结合。

Drone作为新一代的CI/CD,从工具角度更好的实现了DevOps得理念,从设计和实现上,就原生的支持这种思想。

  1. Drone上手容易,可以使即使没有CI/CD运维经验的开发人员快速上手,开发人员就可以快速融入运维过程。
  2. Drone原生于docker实际执行步骤都是在容器中执行,在Drone流程定义中由开发人员执行镜像制作、定义容器执行相关命令,实际是开发人员实现了基础运行环境的构建(如数据库依赖,缓存依赖,代码依赖),开发人员想对运维人员更了解软件系统,对各种依赖关系更加了解,这项工作由开发人员做,减少了和运维人员的沟通成本,减少了出错的可能性。
  3. 运维人员作为技术专家角色对开发人员进行运维技术指导,解决擅长的运维配置问题。
  4. 相对传统的完全由运维人员构建CI/CD,运维人员就不需要了解软件的各种运行细节,不停的和开发人员各种沟通了,从何提高了工作效率,减少不必要的依赖,开发和运维各自专注于自己擅长的领域,两者就能更好的合作更好的融合。

安装

Drone 是采用webhook的触发方式来执行的,实际就是scm注册Drone的webhook api,然后当scm事件发生(用户commit 并push)调用Drone web hook方法 触发整个流程,Drone必须能被源代码管理系统发现,Drone服务能被源代码管理系访问到,所以如果用github Drone 服务必须是公网可以访问,如果用gitlab gittea要在同一个内网, 推荐搭建内网的gitlab 或者 gittea方便本地调试。

https://docs.Drone.io/installation 官方安装文档

再提供一个 采用非80端口(800端口)的例子,在gitlab中配置的地址也记得写端口(http://xxxxxxxx:8080/login)

docker run \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --volume=/var/lib/Drone:/data \
  --env=Drone_GIT_ALWAYS_AUTH=false \
  --env=Drone_GITLAB_SERVER=https://xxxx.com \
  --env=Drone_GITLAB_CLIENT_ID=df59396ko0992e545e7c3100f854c20bb3e629b6883a95095c27bebd4549f9a2c0 \
  --env=Drone_GITLAB_CLIENT_SECRET=e85747;kiuhc341868285f7fd1f138d585c841d9db93b6e9616r650601bc6l;kb98bd \
  --env=Drone_RUNNER_CAPACITY=2 \
  --env=Drone_SERVER_HOST=docker_scm-01w.dev.activenetwork.com:8000\
  --env=Drone_SERVER_PROTO=http \
  --env=Drone_TLS_AUTOCERT=false \
  --env=Drone_USER_CREATE=username:mwan5,admin:true\
  --publish=8000:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=Drone10 \
  Drone/Drone:1
  
采用golang源代码,编译代码的安装方式。

go install github.com/Drone/Drone/cmd/Drone-server
go install github.com/Drone/Drone/cmd/Drone-agent
或者手动将编译好的Drone二进制文件 拷贝到的bin目录下
运行 cmd
/bin/Drone-server

Cron job

Drone 内置了cron job功能,可以实现定时任务的执行,在特定时间跑build。

提供加密管理服务

Drone提供了完善的密码管理服务,方便账户密码秘钥进行管理,可以调用第三方的秘钥管理服务。

pipeline 简单例子
kind: pipeline
name: linux-arm

platform:
  os: linux
  arch: arm

steps:
- name: test
  image: golang:1.11
  commands:
  - go test -v ./...
  volumes:
  - name: 
    path: /go
- name: build
  image: golang:1.11
  commands:
  - "go build -ldflags \"-extldflags \\\\\"-static\\\\\"\" -o release/linux/arm/Drone-server github.com/Drone/Drone/cmd/Drone-server"
  volumes:
  - name: 
    path: /go
  when:
    event:
    - push
    - tag
- name: publish_server
  image: plugins/docker
  settings:
    auto_tag: true
    auto_tag_suffix: linux-arm
    dockerfile: docker/Dockerfile.server.linux.arm
    password:
      from_secret: docker_password
    repo: drone/drone
    username:
      from_secret: docker_username
  when:
    event:
    - push
    - tag
volumes:
- name: 
  temp: {}

测试-> 打包 -> 制作镜像并发布到镜像仓库
最后一步可以用scp ssh方式release代码 或者Drone Helm plugin插件直接发布到k8s上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,738评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,377评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,774评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,032评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,015评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,239评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,724评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,374评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,410评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,457评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,132评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,733评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,804评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,022评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,515评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,116评论 2 341

推荐阅读更多精彩内容

  • 将使用 docker + docker compose + drone + git 实现项目自动部署 使用dock...
    StephenXP阅读 1,708评论 0 1
  • <<互联网敏捷DevOps和自动化之5.持续集成>>持续集成的价值是什么?对于开发和测试人员又意味着什么呢?1.1...
    燕京博士阅读 2,770评论 0 5
  • Sarah女仆戏•骰输 戴着粘有深灰色猫耳朵的头饰硌得耳后生疼,不适应微皱眉头任由酒红色长发蜿蜒垂落至腰间。殷红抹...
    不要鸳鸯阅读 765评论 0 2
  • 漏写了两天的简书,实在是没话可写。今天想想,没话可写也得凑些话出来,不可以再纵容自己这样的借口,也怕懒惰成习惯就难...
    liuliu67阅读 367评论 1 0
  • 日头儿到墙了 孩儿想娘了 该想的 都想了 天 就慢慢黑了 日头儿到墙了 该想的 都想了 孩儿想娘了 天 就慢慢黑了
    勒尤阅读 159评论 0 0