CI/CD Server Note 05
Drone協助開發團隊更快速地將程式碼部署到生產環境中,同時確保程式碼的品質和穩定性。

Install Drone - CI/CD Tools
Drone是一個以GO語言開發的開源CI/CD平台,它可以協助開發團隊在程式碼變更時自動進行測試、建置和部署,這種自動化流程有助於提高團隊的效率,確保程式碼的品質,並快速將變更推送到生產環境中。
Drone可以透過配置簡單的YAML設定檔來定義 CI/CD 流程,該設定檔可以指定哪些測試需要運行、何時進行建置、以及何時將應用程式部署到伺服器上,Drone 也支援多種版本控制系統,如GitHub、Gitea和GitLab等等。
建置與安裝Drone
要使用Drone來建置CI/CD的流程需要先建立版本控制系統,根據Drone的文檔網站可以看到所支援的版本控制系統,在先前的文章介紹了如何安裝Gitea,安裝好了Gitea之後需要在Gitea的設定授權OAuth2才可以開始安裝Drone。
在Gitea > 設定 > 應用程式 > 新增OAuth2應用程式寫入需要的資訊,其中下面那項URL根據你之後要建立的Drone網址填入即可,若還不清楚後續再做更改也可以:

建立應用程式後要記錄客戶端ID和客戶端密鑰,在後續安裝Drone的時候會用到,密鑰在按下儲存按鈕後會被隱藏,若後面忘記的話也沒關係,按下重新產生密鑰就可以:

後續因為要建置drone-runner,需要透過OpenSSL生成一組密鑰。透過下面指令在linux產生一組長度為128 個位元組(16 個字元)隨機(rand子指令)的十六進制字串,加上"-hex"選項,表示要輸出十六進制形式的隨機數:
openssl rand -hex 16
接下來就只剩下建立Drone Server和Drone Runner的Docker,將前面所記錄的客戶端ID、客戶端密鑰和透過OpenSSL產生的隨機數填入下面的docker-compose.yml上,用docker-compose建立:
version: "3"
services:
drone-server:
image: drone/drone:latest
container_name: drone-server
ports:
- "5080:80"
volumes:
- ./drone:/data
- /var/run/docker.sock:/var/run/docker.sock
restart: always
environment:
- DRONE_GITEA_SERVER=your.gitea.website
- DRONE_GITEA_CLIENT_SECRET=客戶端密鑰
- DRONE_GITEA_CLIENT_ID=客戶端ID
- DRONE_GIT_ALWAYS_AUTH=true
- DRONE_SERVER_HOST=your.drone.website
- DRONE_SERVER_PROTO=http
- DRONE_RPC_SECRET=透過OpenSSL產生的隨機數
- DRONE_AGENTS_ENABLED=true
# 先自行建立admin
- DRONE_USER_CREATE=username:your_user_name,admin:true
- DRONE_UI_USERNAME=root
- DRONE_UI_PASSWORD=root
drone-agent:
image: drone/drone-runner-docker:latest
container_name: drone-runner
ports:
- "30001:3000"
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=your.drone.website
- DRONE_RPC_SECRET=透過OpenSSL產生的隨機數
- DRONE_RUNNER_CAPACITY=10
- DRONE_RUNNER_NAME=agent-01
使用Drone - 入門
建好後Server跟Runner後開啟一個專案,編輯.drone.yml
輸入以下程式碼,送出commit後push到Gitea:
kind: pipeline
type: docker
name: hello_world
steps:
- name: hello_world
image: ubuntu:20.04
commands:
- echo hello drone
進入Drone Server的網址,點選CONTINUE:

接下來會需要填入你的基本訊息:

授權Drone可以存取你的帳戶:

處理完後就可以看到Drone的管理頁面,在首頁會顯示可以存取到的所有專案,如果沒有顯示可以點擊SYNC到Drone,這個時候Drone還不會開始工作,需要啟用要使用Drone的專案:

進入剛剛建立的專案後,點選畫面中央的+ACTIVATE REPOSITORY 就可以為這個專案啟用、建立CI的流程:

啟用後Settings的頁面會長這樣,後續如果需要做一些調整或是添加一些參數可以在這個頁面中調整:

點選Builds可以看到剛剛push上去的commit已經通過測試了:

點進這次的紀錄之後,就可以看到關於這次 Build 的詳細過程:

在Gitea上可以在Commit Message後面看到一個✅,代表通過了你寫的測試:

結論
總結來說,Drone是一個用於自動化持續整合和持續交付流程的工具,它可以協助開發團隊更快速地將程式碼部署到生產環境中,同時確保程式碼的品質和穩定性。