Drone 是我今年主推的 CI/CD 自架服務,詳細可以參考這篇文章,目前在公司內部團隊使用了一年以上,服務相當穩定。Drone 本身可以透過 docker-compose 方式快速在機器上架設完成,但是由於 Kubernetes 的盛行,大家也希望能透過 Kubernetes 來安裝 Drone 服務。本篇會教大家如何在 AWS 上透過 Kubernetes 安裝完成。Drone 預設使用 SQLite 當作資料庫,檔案會直接存放在 /var/lib/drone
路徑底下,但是容器內不支援寫入,所以必須要要額外掛上空間讓 Drone 可以寫入資料。此篇會以 GitHub 認證 + SQLite 來教學。
事前準備
- 在 AWS 上面 建立 kubernets
- 在 AWS 上面建立 EBS 空間存放 SQLite
- 申請 GitHub OAut
在安裝 Drone 之前,有三件事情務必先完成,第一是要先有 K8S 環境,本篇不會教大家如何架設出 K8S 環境。但是你可以透過官方提供的方式來測試:
- 使用 Minikube (快速在本機端架設出 K8S Cluster)
- Katacoda
- Play with Kubernetes (單次免費四小時)
第二,你需要先在 AWS 上面建立一個 1G 的 EBS 空間,空間大小由你決定,你可以透過 AWS CLI 或直接到 AWS Console 頁面建立,底下是建立 EBS 的指令
注意 availability-zone
區域要跟 K8S 同樣,大小先設定 1G。完成後會看到底下訊息:
之後會用到 VolumeId
。假如沒有做此步驟,您會發現 Drone 伺服器是無法啟動成功。最後是請到 GitHub 帳號內建立一個全新 OAuth App,並取得 CLient
跟 Secret
代碼。
安裝 Drone
所有的 Yaml 檔案都可以直接在 appleoy/drone-on-kubernetes,找到。首先打開 drone-server-deployment.yaml
,找到 volumeID
取代成上述建立好的結果。
再來設定 server 跟 agent 溝通用的 Secret,打開 drone-secret.yaml
透過 base64 指令換掉上面的代碼。假設密碼設定 drone-test-secret
,請執行底下指令
在 GitHub 上面建立新的 Application,並且拿到 Client ID 跟 Secret Key,修改 drone-configmap.yaml
檔案
接著陸續執行底下指令,新增 Drone NameSpace 並且將 server 及 agent 服務啟動
完成後,k8s 會自動建立 ELB,透過 kubectl 可以看到 ELB 名稱
|
|
執行後看到底下結果:
拿到 ELB 網域後,可以直接更新 GitHub 的 application 資料
最後打開瀏覽器,填入上述的網址,會發現直接轉到 GitHub OAuth 認證,點選確認後,Drone 會開始讀取您的個人資料,這樣就代表成功了。
懶人包安裝
上述步驟是不是有點複雜,要執行的 kubectl 指令非常多,所以我提供了另一種安裝方式,就是透過 [install-drone.sh],執行這 Shell Script 檔案前,你必須先做兩件事情。1. 申請 EBS 空間,完成後請修改 drone-server-deployment.yaml
內的 volumeID
。2. 申請 GitHub OAuth Application,完成後請修改 drone-configmap.yaml
內的 GitHub 設定。最後執行底下指令
|
|
擴展 agent 服務
假設一個 agent 已經不符合團隊需求,在 k8s 內只要一個指令就可以自動水平擴展 agent:
其中 replicas
可以改成你要的數字。
如何清除 Drone 服務
我們已經將 Drone 資料庫備份在 EBS,所以隨時都可以移除 Drone 服務,透過簡單的指令就可以清除掉 Drone 所有容器,只要下清除 Namespace 即可
|
|
歡迎追蹤 drone-on-kubernetes
後記
這算是我的第一篇 Kubernetes 心得文,就先拿 Drone 服務來測試看看。Drone 作者也很用心寫了一個接口讓 K8S 可以監控 agent 容器,假如您不是使用 SQLite 而是用 MySQL 資料庫,就需要修改 YAML 設定檔。對於本篇文章有不懂的地方,歡迎大家留言。我也錄製了 15 分鐘影片放在 Udemy Drone 課程,課程特價 1600 元。優惠代碼: KUBERNETES
See also
- 開源專案 Drone CI/CD 平台真的免費嗎?
- Go 1.15 新增 Module cache 環境變數
- Docker 推出官方 GitHub Actions 套件
- 用五分鐘安裝好 Drone 搭配 GitHub 自動化環境
- 用 Drone 部署靜態檔案到 GitHub Pages
- Drone CI/CD 支援 Auto cancellation 機制
- Ansible 設定 Google Container Registry 搭配 Drone 自動上傳
- 用 Drone 自動化上傳 Docker Image 到 GitHub Docker Registry
- 用 10 分鐘安裝好 Drone 搭配 GitLab
- [Drone] 將單一 Job 分配到多台機器,降低部署執行時間