Rails + Drone CI with ssh CD
大家好,我是 Cindy,最近開始在用 Drone CI - 一款用 Go 寫的 CI platform,紀錄一下,我練習用自己的電腦搭配 ngrok 架一個暫時的 CI server,配上 Github 跑測試和部署的實作過程。((因為練習才這樣做唷,正常會架在 GCP 之類的地方,或是可以直接用 cloud drone 不需要自架 server 的方案。))
用 docker + ngrok 在 local 起 drone server
安裝 ngrok
brew install --cask ngrok
註冊 ngrok
依照官網說明連結帳戶
ngrok authtoken xxxxx
將 ngrok run 在 port 80
ngrok http 80
在 github 新增 OAuth Apps
新增一組密碼
openssl rand -hex 16
新增 docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42version: "3.9"
services:
drone-server:
image: drone/drone:2
container_name: drone-server
ports:
- 443:443
- 80:80
volumes:
- /var/lib/drone:/var/lib/drone/
restart: always
environment:
- DRONE_GITHUB_CLIENT_ID=xxx
- DRONE_GITHUB_CLIENT_SECRET=xxx
- DRONE_RPC_SECRET=ooo
- DRONE_SERVER_HOST=xxxxxx.ngrok.io
- DRONE_SERVER_PROTO=https
- DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
- DRONE_DATABASE_DRIVER=sqlite3
- DRONE_DEBUG=true
- DRONE_LOGS_DEBUG=true
- DRONE_LOGS_TRACE=true
drone-runner:
image: drone/drone-runner-docker:1
container_name: drone-runner
ports:
- 3000:3000
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=xxxxxx.ngrok.io
- DRONE_RPC_SECRET=ooo
- DRONE_RUNNER_CAPACITY=2
- DRONE_DEBUG=true
- DRONE_LOGS_DEBUG=true
- DRONE_LOGS_TRACE=true執行
docker-compose up -d
,用docker ps
就可以檢查 docker container 是不是有跑起來囉。註:如果不想將私密資訊直接寫在
docker-compose.yml
,可以寫在 .env 的檔案,設定 docker 的環境變數。輸入 ngrok 的網址確認 server 成功起來可以使用
確認 runner log
docker logs drone-runner
在自架的 drone server 網站選擇要跑 CI 的專案,啟用後這邊會自動在 Github 建立 Webhook,之後如果想改 Webhook 的規則也可以直接在 Github 修改
自動測試
在專案新增 .drone.yml
1 | kind: pipeline |
這樣就可以跑測試囉!
ssh 自動部署
用 ssh 的方式進行部署,設定檔的寫法類似下面這樣:
1 | kind: pipeline |
其他相關參考資料
- Drone CI with GitHub
- DroneCI+Github入坑指北
- Drone
- sidekiq - Running your own Process
- 網站佈署
- Restarting applications
- Passenger 是目前佈署 Ruby on Rails 最好用、設定最簡單的方式,它是一套 Apache 和 Nginx 的擴充模組,可以直接支援 Rails 或任何 Rack 應用程式。
- Git Internals - Git References