[用 Drone 建立自動部署] 04 drone runner 介紹
透過 Drone 建立自動部署流程,drone runner 介紹
我們在 [用 Drone 建立自動部署] 01 基本服務建置及串接 GitHub
文章中有 docker-compose.yml
的範例
在範例中建立了兩個 docker runner,分別是 drone_runner_docker
和 drone-runner-ssh
而在 [用 Drone 建立自動部署] 02 部署觸發條件(pipeline)設定
中使用到的其實只有 docker runner
這篇文章來分別介紹兩個 runner,以及官方網站上提到的其他 runner
所有的 runner 可以在官方網站的 runner overview
頁面找到
預設的 runner 是 docker runner
在文章編輯的時候有的 runner 列表
ssh runner
範例:
kind: pipeline
type: ssh
name: default
server:
host:
from_secret: GCP_IP_HOST
user:
from_secret: TESTING_USER
ssh_key:
from_secret: TESTING_PRIVATE_SSH_KEY
steps:
- name: greeting
commands:
- echo hello world
- whoami
- pwd
- echo DRONE_REPO = ${DRONE_REPO}
- echo DRONE_BRANCH = ${DRONE_BRANCH}
解說
當 type 使用 ssh 的時候,就是使用 ssh runner 執行
在 server
區塊中指定了 ssh 所需要的參數,包含遠端的 host ip 位置以及登入的使用者名稱
from_secret: SSH_KEY
代表從 Drone 服務後台設定的 Secrets
取用特定 index 的值
如果有需要使用 ssh 登入主機操作,則這邊要填入主機的 id_rsa
並且也要建立權限為 600
的 authorized_keys
檔案在用來登入的使用者目錄下 .ssh 中
檔案內容則是 id_rsa.pub 的內容,如此 drone 的 ssh runner 才能正確的使用指定使用者的 ssh key 登入遠端主機
這樣做的好處是敏感資料不用讓所有專案的部署者知道,只要知道使用的 secrets index 叫什麼就好
未來若是有修改,也只需要在 Drone 後台操作,不需要每個專案修改檔案
當然也可以使用 password 而不是 ssh 登入遠端主機,更多設定可以在 官方文件 裡面查看
docker runner
會使用指定的 image 去建立容器,並且用容器執行指定的行爲
是預設的 runner,也是建議初學者使用的 runner
若是你的多個 pipeline 會需要繼承對主機檔案進行操作的行為則不適合
因為 Docker pipelines 是執行在 Docker 容器中,和實體主機是隔絕的,並不會直接影響主機上的檔案
範例
kind: pipeline
type: docker
name: backend_dev
steps:
- name: submodules update
image: alpine/git
commands:
- whoami
- pwd
- date
- echo DRONE_REPO = ${DRONE_REPO}
- echo DRONE_BRANCH = ${DRONE_BRANCH}
- echo DRONE_COMMIT = ${DRONE_COMMIT}
- echo DRONE_BUILD_NUMBER = ${DRONE_BUILD_NUMBER}
- git submodule update --init --recursive
trigger:
branch:
- dev
event:
- push
其他 runner
Exec Runner
使用時機
不適合跑在容器內的專案,例如:MacOS 的專案
不該使用的時機
由於 Exec runner 沒有和主機隔離,所有操作都是直接在服務建構的主機上操作
如果專案和 Drone 服務沒有在同一台主機上,或是有人在專案內的 .drone.yml
加入危險的指令
那會釀成悲劇,所以一般來說預設都使用 Docker runner
並且 Exec runner 是 Beta 版本,並不建議使用在正式環境中
範例
可以看到底下範例,pipeline 被觸發時會直接在主機上下指令!
---
kind: pipeline
type: exec
name: default
steps:
- name: backend
commands:
- go build
- go test
- name: frontend
commands:
- npm install
- npm test
以上就是常用的 Drone Runner 介紹,建議都是使用 Docker runner
因為大部分所需要的操作都有現成的 Docker image 了
沒有特別必要的話就別使用另外兩個 runner 直接對主機檔案系統操作,或是直接在主機下指令
而 Kubernetes 我還沒有用過,所以並沒有介紹到 Kubernetes runner
未來若有機會再補充