搭建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 即可