流水线工具调研
-
Drone CI
-
Jenkins
-
Travis CI
-
Circle CI
Drone
官网:https://www.drone.io/
这里以 Github + docker 为例
1. 准备工作
在 Github 创建一个OAuth应用程序: Settings - OAuth Apps - New OAuth App,Homepage URL 和 Authorization callback URL 填你自己的 Drone 服务器的地址,这是一个 Webhook,当代码提交等事件触发时就会向该服务器发送事先定义好的请求。前者为服务器主页,后者为认证的地址,若第一次访问主页则会跳转到认证的URL。
创建一个共享密钥,以验证 runner 与中央 Drone 服务器之间的通信。按照官网的示例使用 openssl 生成共享密钥:
openssl rand -hex 16
2. 下载
下载 drone 的 docker 镜像
# 中央服务,调度任务
docker pull drone/drone:1
# Runner,每条流水线由一个执行机执行
docker pull drone/drone-runner-docker:1
3. 配置
drone 的服务使用环境变量来配置
DRONE_GITHUB_CLIENT_ID=3e0c94638b876903d131
DRONE_GITHUB_CLIENT_SECRET=e70a6a4be8a10decdeef8959c1d9e4f04a0a55e3
DRONE_RPC_SECRET=abd2ea5baed1800ee8ac64003956ed77
DRONE_SERVER_HOST=117.78.10.6:80
DRONE_SERVER_PROTO=http
4. 运行
需要注意端口 80 不能修改,但可以映射为其他端口
Server
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITHUB_CLIENT_ID=3e0c94638b876903d131 \
--env=DRONE_GITHUB_CLIENT_SECRET=7a12782c15451036727ed0922e9fe6c6737af02d \
--env=DRONE_RPC_SECRET=210ce548dd2a84193706fc618e94d944 \
--env=DRONE_SERVER_HOST=118.195.157.53:80 \
--env=DRONE_SERVER_PROTO=http \
--publish=9000:80 \
--publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:2
Runner
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=117.78.10.6:9000 \
-e DRONE_RPC_SECRET=210ce548dd2a84193706fc618e94d944 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 9001:3000 \
--restart always \
--name runner \
drone/drone-runner-docker:1
Drone原理
运行流程
- webhook 触发 drone server
- 找到 repo下的 .drone.yml ,将定义的流水线解析成 docker steps,调用docker 服务,获取镜像,启动容器,执行命令,将 log 展示在 web ui 上
问题
流水线经常报错:HTTP/2 stream 1 was not closed cleanly before end of the underlying stream
TravisCI
TravisCI官方网站,用Github账号登入