搭建Drone CI / CD 持续集成系统
本文将介绍如何使用 docker 和 drone1.0 搭建自己的 cicd 系统。
网上的教程几乎都是基于0.8版本的,网上1.0的能用的几乎没有,官方1.0前还有中文文档,1.0之后目前仅有英文,且较为简略。1.0和之前版本差异较大,无论是配置项,配置文件结构又或者是部署方式,而在实际搭建过程中,遇到不少坑,故记录通过 docker 搭建 drone 1.0 的过程。
简介
drone 是什么?drone 是一个CI/CD的软件,类似 jenkins ,同类软件除了比较知名的 jenkins 外,还有TeamCity、Travis CI、AppVeyor、Azure Pipelines 等等。drone 官网。
drone pipeline cicd 使用例子
drone 还有一些插件
为什么不用 jenkins
- 节省更多服务器资源,占用内存、CPU 远比jenkins少。
- 界面、清晰、好看,比 jenkins 的古老 UI 更具科技感。
- 入门简单,可以快速入门CICD。
- 原生支持容器环境,docker、k8s…,当然 jenkins 也可以通过插件支持。
- 启动相当迅速。
- drone 提供的能力完全足够使用,主要用的功能也有相应的插件支持,虽然比 jenkins 少,但已经够用。
界面预览
通过 Docker 安装 drone-server
DRONE 和 drone-runner 通信的密钥保持一致即可
使用 github 仓库
docker run \
--volume=/opt/bin/drone/data:/data \
--env=DRONE_GITHUB_CLIENT_ID={在github复制} \
--env=DRONE_GITHUB_CLIENT_SECRET={在github复制} \
--env=DRONE_RPC_SECRET={DRONE 和 drone-runner 通信的密钥} \
--env=DRONE_SERVER_HOST={一般填写本机的 ip:port } \
--env=DRONE_USER_CREATE=username:admin,admin:true \
--env=DRONE_TLS_AUTOCERT=true \
--env=DRONE_SERVER_PROTO=http \
--publish=9090:80 \
--publish=9443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1
使用 Gogs 仓库
gogs 是类似 gitlab 的代码管理平台,支持搭建私服,和 gitlab 类似,但 gitlab 私服搭建用了不到4G内存,gogs实测只需要26M 如何使用搭建 gogs Git 私服
docker run \
--volume=/opt/bin/drone/data:/data \
--env=DRONE_GIT_ALWAYS_AUTH={当 git clone 需要认证时设置成true,否则false} \
--env=DRONE_GIT_USERNAME={GIT 用户名} \
--env=DRONE_GIT_PASSWORD={GIT 密码} \
--env=DRONE_GOGS=true \
--env=DRONE_GOGS_SKIP_VERIFY=false \
--env=DRONE_GOGS_SERVER=http://{Gogs服务的域名 或 ip:port} \
--env=DRONE_PROVIDER=gogs \
--env=DRONE_RPC_SECRET={DRONE 和 drone-runner 通信的密钥} \
-env=DRONE_USER_CREATE=username:gogs,admin:true \
--env=DRONE_SERVER_PROTO=http \
--publish=9090:80 \
--publish=9443:443 \
--restart=always \
--detach=true \
--name=drone \
-h drone \
drone/drone:1
通过 Docker 安装 drone-runner
在 drone 1.0 之前的版本还较 drone-agent,因此看到 drone-agent 的教程一般是比较旧的了,1.0 后改为了 drone-runner。
执行命令
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST={DRONE-server 的地址,如 192.168.1.1:9090} \
-e DRONE_RPC_SECRET={DRONE 和 drone-runner 通信的密钥} \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 3000:3000 \
--restart always \
--name drone-runner \
--link=drone:drone \
drone/drone-runner-docker:1
查看容器状态
查看所有容器状态
docker ps -a
查看运行日志
docker log drone
打开浏览器,访问配置的 ip:port 即可