撰文動機
在安裝完 Docker 還有 Nginx之後,想說是時候該來學 CI/CD 了🤔,雖然我想當的是後端工程師,但畢竟沒人來幫我做 CI/CD,又不想每次部屬程式都要自己手動,就來自己學學怎麼架 CI/CD服務吧 !
本文參考 Drone CI 官網教學,至於為什麼用 Drone CI 嘛,我喜歡 Golang 是一個原因,再來就是我真的看不懂Jenkins(;´д`)ゞ
安裝步驟
這次的安裝步驟為 :
- 設定 GitHub (也可以用其他的版控服務)
- 準備 Drone CI 需要的資訊 (Client ID, Client Secret 等…)
- 建立 Drone CI Server Container 和 Drone CI Runner Container
設定 GitHub
Drone CI 的流程是在使用者 Push 到 repository 時,告訴 Drone Server 幫我們進行各個已經設定好的任務,所以理所當然的安裝教學也是從設定版控服務的部分開始。
- 先點右上自己的頭像,再點 setting 到設定頁面
- 在左側欄下方點 Develop settings
3. 點左側欄的 OAuth Apps
4. 點畫面中間的 Register a new application 綠色按鈕
5. 按照下圖把 Application name 改成 Drone 或其他好記的名字方便管理
Homepage URL 改成你打算要給用 Drone CI 的網址
Authorization callback URL 改成 Drone CI 的網址加 /login
按下 Register application 的綠色按鈕
這時再回到 Developer settings / OAuth Apps 的地方就可以看到剛剛註冊的資訊了,這樣 Drone 在我們 Push 的時候就能收到通知,跑 CI/CD 的流程了
準備 Drone CI 需要的資訊
總共會需要用到五個變數,用來建立 Drone CI Server 的 Container
DRONE_GITHUB_CLIENT_ID : 剛剛建立的 OAuth app 的 Client ID
DRONE_GITHUB_CLIENT_SECRET : 剛剛建立的 OAuth app 的 Client Secret
DRONE_SERVER_HOST : 預計給 Drone CI 使用的 Domain name 或 IP Address
DRONE_SERVER_PROTO : 伺服器通訊協議,看伺服器有沒有使用 http 或 https,輸入相對應的值(http or https)。
DRONE_RPC_SECRET : Drone Server 和 Runner 之間用來驗證的共享密碼
DRONE_GITHUB_CLIENT_ID :
- 到 Settings / Developer Settings / OAuth Apps (如下圖) 找到剛剛建立給 Drone 使用的 OAuth App
2. 找到 Client ID 的地方,把 Client ID 複製起來。
DRONE_GITHUB_CLIENT_SECRET:
跟 Client ID 在同一個頁面,拉到下方就可以產生一個新的 Client Secret
- 點 Generate a new client secret 的按鈕
- 把新產生出來的 Client Secret 複製並保存起來。
DRONE_SERVER_HOST :
DRONE_SERVER_HOST 就是剛剛註冊時輸入的 Homepage URL ,如果忘記了可以拉到下面在 Homepage URL 的欄位找到。
DRONE_RPC_SECRET :
這個和前三個不一樣,要自己產生一個密鑰用來給 Server 和 Runner 之間驗證用,輸入指令之後把產生出來的密鑰複製起來。
!! 在 Windows 環境下無法使用這個指令
$ openssl rand -hex 16
3ef16ea733dab3ea41c1ad3a786094ff
建立 Drone CI Server Container
官方使用的 Docker run 的指令來建立 container,但這邊我要改用 Docker Compose 的方式來建立,在管理以及使用上都可以保持簡潔且方便管理。
- 建立docker-compose.yml檔
用雙尖括號包起來的都請以自己的環境變數替代
version: "3.8"
services:
drone-server:
container_name: drone-server
image: drone/drone
restart: always
volumes:
- <YOUR-PATH-TO-STORE-DRONE-DATA>:/data
environment:
DRONE_GITHUB_CLIENT_ID: <YOUR_GITHUB_CLIENT_ID>
DRONE_GITHUB_CLIENT_SECRET: <YOUR_DRONE_GITHUB_CLIENT_SECRET>
DRONE_RPC_SECRET: <YOUR_DRONE_RPC_SECRET>
DRONE_SERVER_HOST: <YOUR-DOMAIN-NAME>
DRONE_SERVER_PROTO: https
# use port 4000 and 4001 mapping http(80) and https(443) port ports:
- 4000:80
- 4001:443drone-agent:
image: drone/drone-runner-docker
container_name: drone-runner
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
DRONE_RPC_HOST: <YOUR_GITHUB_CLIENT_ID>
DRONE_RPC_SECRET: <YOUR_DRONE_GITHUB_CLIENT_SECRET>
DRONE_RPC_PROTO: https
DRONE_RUNNER_CAPACITY: 2
ports:
- 3000:3000
2.建立 Container 並確認是否建立成功
在docker-compose.yml在的資料夾輸入下方指令建立 drone server 和docker runner 的 container。
docker-compose up
建立完成後,用下方指令確認是否有安裝成功,出現和圖片一樣的訊息就代表安裝成功了。
(如果幫 runner 設定的別名不同,記得換一下 container 的名字)
docker logs docker-runner
3.最後確認是否成功架設服務
在瀏覽器輸入當初設定的網址 or IP,出現這樣的畫面就是架設成功了!
第一次登入會需要連上 Github 或是其他版控服務,連接完之後就可以開始使用 Drone CI 了~
結語
從教學過程可以感覺得出來,架設 Drone CI 的服務其實不難,但接下來建立測試部屬的流程會不會很難呢..🤔
就等下一篇的基本流程教學吧 ! 😃