1. 介绍
Drone by Harness™ 是一个基于 Docker 容器技术的可扩大的继续集成引擎,用于自动化测试、构建、公布。每个构建都在一个长期的 Docker 容器中执行,使开发人员可能齐全管制其构建环境并保障隔离。开发者只需在我的项目中蕴含 .drone.yml 文件,将代码推送到 git 仓库,Drone 就可能自动化的进行编译、测试、公布。能够与 Docker 完满集成。
https://docs.drone.io/
特点
- Drone 引入了 Pipelnes 的概念,管道可帮忙咱们自动化软件交付过程中的步骤,例如启动代码构建,运行自动化测试以及部署到暂存或生产环境。
- 通过将 .drone.yml 文件放在 git 信息库的根目录中来配置管道。yaml 语法旨在易于浏览和表白,以便查看存储库的任何人都能够了解工作流程。
- Drone 通过多个 step 来实现一系列的指令。
为什么抉择 Drone?
- 和 Jenkins 相比,Drone 就轻量的多了,从利用自身的装置部署到流水线的构建都简洁的多。因为是和源码管理系统相集成,所以 Drone 天生就省去了各种账户权限的配置,间接与 gitlab、github、Bitbucket 这样的源码管理系统操作源代码的权限统一
- Drone 与风行的源代码治理提供商无缝集成,反对 github、gitlab、gogs、gitea、gitee、bitbucket server/cloud,这是应用 Drone 的第一印象,能够履行疾速打造 GitOps 场景
- 流水线插件是执行预约义工作的 Docker 容器,通过将它们配置为 Pipeline 中的步骤。插件可用于部署代码、公布工件、发送告诉等。
2. 部署 Gogs- 极易搭建的自助 Git 服务
装置 MySQL
docker run --name gogs-mysql --restart=always -v /opt/mysql/mysqlVolume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.19
创立 Gogs 及 drone 数据库
#mysql -uroot -p123456 -h 127.0.0.1
CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
create database drone;
# Pull image from Docker Hub.
$ docker pull gogs/gogs
# Create local directory for volume.
$ mkdir -p /var/gogs
运行 Gogs
docker run --name=gogs --restart=always --link gogs-mysql:db -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs
账号:admin
明码:123456
关上页面持续配置 Gogs
3. 部署 Drone-Server
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GOGS_SERVER=http://192.168.31.112:10080 \
--env=DRONE_RPC_SECRET=123456 \
--env=DRONE_SERVER_HOST=192.168.31.112 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_LOGS_TRACE=true \
--publish=801:80 \
--publish=4431:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:2.0.2
- DRONE_GOGS_SERVER:这里应用的是 gogs 作为 git 仓储,当然 drone 也反对 github,gitlab 等一些支流的源码治理平台,不同的平台须要设置不同的环境变量
- DRONE_RPC_SECRET:与 agent 之间通信的密钥,肯定要配置
- DRONE_SERVER_HOST:设置 drone server 应用的 host 名称,能够是 ip 地址加端口号
- DRONE_SERVER_PROTO:应用的协定 http/https
- DRONE_USER_CREATE:设置初始的管理员,这个是超级管理员
- DRONE_LOGS_TRACE:启动日志,默认是敞开的
- DRONE_OPEN 开启注册,此配置容许任何人自注册和登录零碎
4. 激活仓库配置 Webhook
- 1 登录 drone 激活仓库
- 2 在仓库创立.drone.yml 文件
- 3 查看仓库的 webhooks 配置是否失常
激活之后,主动就会在 gogs 仓库的 Web 设置中创立钩子
当不存在.drone.yml 文件或者仓库没有在 drone 激活,测试返回的报文可能是 dial tcp 连贯失败。
5. 部署 Drone-Runner
Drone CI 提供了多种 runtime,能够利用 docker 形式运行,也能够通过传统 ssh 形式运行,也能够采纳 k8s 作为 runtime;Drone CI 实现了一个可拓展的 runner 架构,不便实现各种 runner。Drone Runner 是独立的守护程序,用于轮询服务器以执行挂起的 Pipeline。有不同类型的 Runner 针对不同的用例和运行时环境进行了优化。胜利装置 Drone Server 后,必须装置一个或多个运行器。
应用 ssh-runner
用 SSH 协定在动态近程服务器上执行管道命令。管道命令间接在近程服务器上执行,没有隔离,应用默认 shell。出于平安起因,此运行器不适宜不受信赖的工作负荷。
docker run -d \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=192.168.31.112:801 \
-e DRONE_RPC_SECRET=123456 \
-p 4001:3000 \
--restart always \
--name runner-ssh \
drone/drone-runner-ssh
应用 docker runner
针对能够在无状态容器中运行测试和编译代码的我的项目进行了优化; 不太适宜无奈在容器内运行测试或编译代码的我的项目,包含面向 Docker 不反对的操作系统或体系结构(如 macOS)的我的项目。Docker 运行器也不太适宜须要在管道执行之间在主机上存储文件或文件夹的有状态管道
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=192.168.31.112:801 \
-e DRONE_RPC_SECRET=123456 \
-e DRONE_RUNNER_CAPACITY=10 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 4002:3000 \
--restart always \
--name runner-docker \
drone/drone-runner-docker:1
- DRONE_RPC_HOST:下面启动 server 时配置的 host
- DRONE_RPC_SECRET:跟 server 配置的要保持一致
- DRONE_RUNNER_CAPACITY:能够同时执行的工作数
- DRONE_RUNNER_NAME:个别设置为主机名
6. 配置.drone.yml 运行 Pipeline
要应用 Drone 只需在我的项目根创立一个 .drone.yml 文件即可,这个是 Drone 构建脚本的配置文件,它随我的项目一块进行版本治理,开发者不须要额定再去保护一个配置脚本。其实古代 CI 程序都是这么做了, 包含 gitlab-ci, jenkinsfile, tekton 等。
源码地址: https://gitee.com/devops-samp…
7 . Drone 的场景应用
1)启动新 build
反对抉择 git 分支,以及设置启动参数,这个性能在大部分构建平台都有体现
2)同步 -SYNC
点击 SYNC 按钮,就会和代码仓库进行同步,如果有仓库删除或者减少,就会同步进行更新
3)定时触发器 -Cron jobs
简直所有的构建平台都会提供相似的触发器,比方 git web hook, 工夫定时器等
4)加密参数 – Secrets
流水线执行过程中会波及很多和服务交互,所以须要提供各种凭证,比方明码,token 等,所以 Secrets 也是流水线中的一个重要元素。
5)版本部署 / 回滚 -Promote/Rollback
仅仅实现制品的构建是远远不够的,Drone 也思考到了部署和回滚的问题,所以提供了 promote/rollbakc 事件, 针对 某个胜利版本进行部署或者回滚,和条件判断 when 一起应用。
6)步骤间程序依赖 - 有向无环图
Drone 通过 kind:pipeline 对步骤进行组织,反对并行流水线,同时通过 depends_on 对流水线的先后顺序进行限度,如图所示。
7)上下游流水线间调用
参考
- drone pipeline – https://docs.drone.io/pipeline/overview/
- drone 流水线配置 – https://docs.drone.io/pipeline/docker/syntax/
-
drone yaml 元素 – https://docs.drone.io/yaml/docker/
总结
- Drone 与代码治理平台(e.g. gitlab, gogs)是强绑定关系,如果代码治理平台不能拜访,Drone 就无奈登录,这个在 Drone-Server 的启动命令就可以看进去。
- Drone 学习成本低,语法简洁,如果你接触过其余构建平台,特地是云原生的,基于 YAML 进行编排的 CI 引擎,都是相似的。
- Drone 是 GitOps 实际额典型工具,通过和代码仓库进行深度交融,做到了随时提交,随时构建,很多能力都是通过 容器插件 实现,这也是有别于传统构建零碎的重要特点
- 从能力上,Drone 自身就是轻量级的,所以绝对比拟繁多,可能无奈满足简单的业务场景。目前 Drone 曾经被 收买 ,成为harness 平台的重要一部分,在该平台上也能够看到 Drone 的身影。
[
](https://www.prnewswire.com/ne…)
Harness CDaaS 平台为应用程序交付提供了一种更加无缝的办法,该办法能够自动检测 GitHub,Bamboo,Jenkins,Artifactory 或 Nexus 存储库或任何 Git 存储库中的新版本。一旦 DevOps 团队收到警报,他们能够应用图形工具不仅应用 YAML 文件自动化构建管道的过程,还能够利用机器学习算法评估部署的品质,而后在必要时通过从工具拜访数据主动回滚例如 AppDynamics,New Relic,Splunk,Elastic Search 和 Sumologic,并增加了 Habib。