一隻箱子裡的貓,看著電腦螢幕

Schrödinger's Programmer

奔跑吧工程師,趁年輕跑得越遠越好

[用 Drone 建立自動部署] 04 drone runner 介紹

透過 Drone 建立自動部署流程,drone runner 介紹

Ray

ngrok start screenshot

我們在 [用 Drone 建立自動部署] 01 基本服務建置及串接 GitHub 文章中有 docker-compose.yml 的範例
在範例中建立了兩個 docker runner,分別是 drone_runner_dockerdrone-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
並且也要建立權限為 600authorized_keys 檔案在用來登入的使用者目錄下 .ssh 中
檔案內容則是 id_rsa.pub 的內容,如此 drone 的 ssh runner 才能正確的使用指定使用者的 ssh key 登入遠端主機

這樣做的好處是敏感資料不用讓所有專案的部署者知道,只要知道使用的 secrets index 叫什麼就好
未來若是有修改,也只需要在 Drone 後台操作,不需要每個專案修改檔案

Secrets 官方說明

當然也可以使用 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
未來若有機會再補充

最新文章

Category

Tag