在我们成功搭建了Github的镜像仓库之后,终于轮到CICD的正片了,我们的CICD平台选择使用Drone,一个原生支持Docker,拥抱云原生的CICD平台。
Drone支持多种type的工作流管道,除了最常用的K8S和Docker以外,还支持直接在服务器环境运行的Exec类型,在远程服务器执行的SSH类型,除了这些还有AWS、DIGITAL OCEAN等,具体的可以参考Drone的官方文档。
部署
和前文一样,我们仍然使用Docker来进行部署,需要注意的是,Drone的部署分为两个步骤,分别是Drone和DroneRunner,他们的区别如下:
- Drone:本体的Drone实际上是一个web管理页面,提供了可视化的功能,以及发布cicd任务、接收webhook的通知等,可以理解为DroneCI的指挥中心。
- Runner:真正负责干脏活的家伙,接收从Drone收到的任务,并且根据每个步骤来完成任务。
获取Gitea的ClientID和Secret
进入Gitea,进入设置页面,点击应用选项卡,创建一个Client信息:

名称随便填,然后重定向URI需要填写【https://www.xxx.com/login】,此处http或https还有域名或ip:port根据你待会要给drone配置的host一致,这里是为了让gitea给drone提供身份认证,uri就是gitea通过验证后回调drone的地址,比如我这里填的就是https://drone.hafuhafu.cn/login,填写完成点击提交,可以获得一个clientID和clientSecret,保存好以备用。
部署Drone
使用Docker安装Drone实际上没什么好说的,给出命令:
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GITEA_SERVER=http://192.168.200.164:3000/ \
--env=DRONE_GITEA_CLIENT_ID=4a402047-72e1-479e-858d-5e312aeeda76 \
--env=DRONE_GITEA_CLIENT_SECRET=kOpysAgd2VKElC3friLrObtv7TjmisJRfYFNoXch6BuU \
--env=DRONE_SERVER_HOST=192.168.200.164:3080 \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_TLS_AUTOCERT=false \
--env=DRONE_LOGS_DEBUG=true \
--env=DRONE_RPC_SECRET=4f3b7f51e3dd678c08cf2d0675c66760 \
--env=DRONE_USER_CREATE=username:StoneShiLei,admin:true \
--env TZ="Asia/Shanghai" \
--publish=3080:80 --publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone
- DRONE_GITEA_SERVER:gitea的地址
- DRONE_GITEA_CLIENT_ID:前文的clientID
- DRONE_GITEA_CLIENT_SECRET:前文的clientSecret
- DRONE_SERVER_HOST: drone的host地址
- DRONE_RPC_SECRET:和runner通讯使用的密钥
- USER_CREATE:创建一个admin用户,注意username替换为你gitea的用户名
注意此处涉及到仓库名称的地方可以替换为其他仓库,具体请参照官方文档,部署完成后,现在可以打开host地址端口号3080进行访问:

点击continue按钮,会跳转到你的Gitea进行认证,完成后再填写一些基础信息就可以完成登陆:

该页面会显示你gitea的仓库列表,接下来我们该部署runner了。
部署Runner
仍然是给出docker命令:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=192.168.200.164:3080 \
-e DRONE_RPC_SECRET=4f3b7f51e3dd678c08cf2d0675c66760 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-e TZ="Asia/Shanghai" \
-p 3090:3000 \
--restart always \
--name runner \
drone/drone-runner-docker
- DRONE_RPC_HOST:drone的host地址,和前文保持一致
- DRONE_RPC_SECRET:和drone进行通讯的密钥,和前文保持一致
注意端口号挂载为host的3090端口,因为3000端口已经给gitea使用了。
都部署完成后,docker ps查看下容器是否都跑起来了,没有问题的话我们接下来在下一篇文章中开始研讨如何使用drone进行CI时对其进行验证。