21.3 Drone
基於 Docker 的 CI/CD 工具 Drone,所有編譯、測試的流程都在容器中進行。
開發者只需在專案中包含 .drone.yml 檔案,將程式碼推送到 git 倉庫,Drone 就能夠自動化地進行編譯、測試、發布。
本小節以 GitHub + Drone 來示範 Drone 的工作流程。
當然在實際開發過程中,你的程式碼也許不在 GitHub 託管,那麼你可以嘗試使用 Gogs + Drone 來進行 CI/CD。
安全提示:Docker runner 如果掛載宿主機
/var/run/docker.sock,流水線就具備近似宿主機 root 的控制能力。下面設定只適合可信程式碼、單租戶、本地示範環境;生產環境應使用隔離的臨時 runner/虛擬機、Kubernetes runner、rootless 方案或更嚴格的許可權邊界,併為不同專案隔離金鑰。
21.3.1 關聯專案
在 GitHub 新建一個名為 drone-demo 的倉庫。
開啟我們已經部署好的 Drone 網站或者 Drone Cloud,
使用 GitHub 賬號登入,在介面中關聯剛剛新建的 drone-demo 倉庫。
21.3.2 編寫專案原始碼
初始化一個 git 倉庫:
mkdir drone-demo
cd drone-demo
git init
git remote add origin git@github.com:username/drone-demo.git
這裡以一個簡單的 Go 程式為例,該程式輸出 Hello World!
編寫 app.go 檔案:
package main
import "fmt"
func main() {
fmt.Printf("Hello World!\n")
}
編寫 .drone.yml 檔案:
kind: pipeline
type: docker
name: build
steps:
- name: build
image: golang:alpine
pull: if-not-exists
environment:
KEY: VALUE
commands:
- echo $KEY
- pwd
- ls
- CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
- ./app
trigger:
branch:
- master
現在目錄結構如下:
.
├── .drone.yml
└── app.go
21.3.3 推送專案原始碼到 GitHub
git add .
git commit -m "test drone ci"
git push origin master
21.3.4 檢視專案建立過程及結果
開啟我們部署好的 Drone 網站或者 Drone Cloud,即可看到建立結果。

當然我們也可以把建立結果上傳到 GitHub、Docker Registry、 雲服務商提供的物件儲存,或者生產環境中。