Drone 指南
# 前言
注:本文博主最终配置出现问题,且目前未解决,读者请跳过本文章,或是查看博主的 Jenkins 配置
用惯了重量级的 Jenkins、Travis、CircleCI 这样的持续集成和持续交付工具或平台,也许尝试下更加轻量级的 Drone 也是个不错的选择
Drone 是轻量级自动持续集成和持续交付平台,并可以结合私有代码仓库自动编译、构建服务,几行脚本即可实现自动化部署,相比于重量级的 Jenkins 等工具,非常适合个人或是小型团队自动化持续集成和持续交付
官方首页:Drone CI – Automate Software Testing and Delivery (opens new window)
# 配置
官方文档:Drone CI / CD | Drone (opens new window)
本文将会使用 GitHub 来作为代码托管平台部署我们的前端项目,当然您可以选择 Gitee、Gitea、Bitbucket 等代码托管平台,可以自行在上面的官方文档中寻找相应指南
# GitHub OAuth 应用配置
创建 GitHub OAuth 应用程序。使用者密钥和使用者机密用于授权访问 GitHub 资源。
注意:授权回调 URL 必须与以下格式和路径匹配,并且必须使用确切的服务器方案和主机。
首先进入 GitHub 开发者设置,点此[链接](Developer applications (github.com) (opens new window))进入,然后创建 OAuth App,需要填写的两个 URL 格式如下
Homepage URL:http://your_ip
Authorization callback URL:http://your_ip/login
注:协议也可以为 https
然后需要记录创建的 Client ID 和 Client secrets
# openssl 共享密钥配置
创建共享密钥以验证运行器与中央无人机服务器之间的通信。可以使用 openssl 生成共享密钥
openssl rand -hex 16
得到如下值
0a59cc0e9caf22b09d80be68e45ff20e
# Drone / Drone-Runner 安装
首先我们要知道 Drone 是需要创建两个容器的,其中一个容器为 drone/drone
,提供视图界面,另外一个 drone/drone-runner-docker
,是执行任务的 runner 端
# Drone
# 运行容器
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_USER_CREATE=username:ReturnTmp,admin:true \
--env=DRONE_GITHUB_CLIENT_ID=1818a1291d68babd42b3 \
--env=DRONE_GITHUB_CLIENT_SECRET=2f93a8a304838827e1bec70d9c8b8eeb5dde64fa \
--env=DRONE_RPC_SECRET=0a59cc0e9caf22b09d80be68e45ff20e \
--env=DRONE_SERVER_HOST=103.151.217.151 \
--env=DRONE_SERVER_PROTO=http \
--publish=8010:80 \
--publish=8011:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:2
2
3
4
5
6
7
8
9
10
11
12
13
14
# 参数解释
DRONE_USER_CREATE
是管理员用户名,username
后面跟Github的用户名,如果没有设置就无法对仓库进行高级设置(必须配置);
DRONE_GITHUB_CLIENT_ID
是创建 OAuth Application 后的 ClientId;
DRONE_GITHUB_CLIENT_SECRET
是创建 OAuth Application 后的 ClientSecret;
DRONE_SERVER_HOST
需要与创建 OAuth Application 时的 Authorization callback URL 的域名相同(无/login
path);
DRONE_SERVER_PROTO
需要与创建 OAuth Application 时的 Authorization callback URL 的proto相同;
DRONE_RPC_SECRET
将在后面配置 Drone-Runner 时使用,作为 Drone 与 Drone-Runner 通信的“凭证”,就是上面openssl rand -hex 16
生成的值
--publish
设置Docker的端口映射规则
注:说起来很羞愧,我上面的 GitHub 用户名一开始写错了,少了个字母,导致后面 GitHub 一直登陆不上,大家不要像我一样粗心
# Drone-Runner
# 运行容器
docker run --detach \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_PROTO=http \
--env=DRONE_RPC_HOST=103.151.217.151 \
--env=DRONE_RPC_SECRET=0a59cc0e9caf22b09d80be68e45ff20e \
--env=DRONE_RUNNER_CAPACITY=2 \
--env=DRONE_RUNNER_NAME=drone-runner \
--publish=3000:3000 \
--restart=always \
--name=runner \
--link drone:drone \
drone/drone-runner-docker:1
2
3
4
5
6
7
8
9
10
11
12
# 参数解释
需要注意DRONE_RPC_SECRET
需要与运行 Drone 时的配置保持一致;此外还要注意这里的DRONE_RPC_PROTO
, DRONE_RPC_HOST
以及--link
,由于我们这里的 Drone 与 Drone-Runner 在同一台主机上运行,需要它们之间可以相互通信,因此采用了--link
选项,使得 Runner 的DRONE_RPC_HOST
能够访问到 Drone;
最后我们使用 docker logs runner
查看日志,出现 successfully pinged the remote server
即为成功
# Nginx 配置
# /etc/nginx/nginx.conf
server {
listen 80;
server_name 103.151.217.151;
location / {
proxy_pass http://localhost:8010;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
# 登录
访问后台地址:http://your_ip:8010
我们进入后台之后会看到你的所有 GitHub 项目,然后点击进入需要管理的项目,然后激活即可
然后就是需要对激活仓库进行如下配置,最后所有配置完毕后 Drone 会自动为我们添加 webhook
记录,不需要手动添加,非常方便
# 参考文章
Drone - 从零开始的 CI 生活 | 某莔 (fix.moe) (opens new window)
Drone CI For Github —— 打造自己的CI/CD工作流(一) | 开发者工具论坛 (learnku.com) (opens new window)