Byte Ebi's Logo

Byte Ebi 🍤

每天一小口,蝦米變鯨魚

[用 Drone 建立自動部署] 02 部署觸發條件(pipeline)設定

透過 Drone 建立自動部署流程,部署觸發條件(pipeline)設定

Ray

使用 Drone 建立自己的自動部署服務
Drone 是一套以 Golang 開發的一套 CI/CD 系統工具
本篇進行複數觸發條件設定,在不同觸發條件下觸發不同的部署步驟設定

複數觸發條件(Multiple Conditions)

有時候專案中在特定分支要做不同的事件,這時候可以參考以下設定

.drone.yml

---
################################################
#             dev 每次推到分支就更新              #
################################################
kind: pipeline
type: docker
name: backend_dev

steps:
  - name: submodules update
    image: alpine/git
    commands:
      - 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

  - name: composer install
    image: composer:1.10.19
    commands:
      - composer install --ignore-platform-reqs

trigger:
  branch:
    - dev
  event:
    - push

---
################################################
#             stage 根據排程設定執行              #
################################################
kind: pipeline
type: docker
name: backend_stage

steps:
  - name: submodules update
    image: alpine/git
    commands:
      - 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

  - name: composer install
    image: composer:1.10.19
    commands:
      - composer install --ignore-platform-reqs

trigger:
  event:
    - cron
  cron:
    - every2hour

---
################################################
#        production 使用 git tag 發動部署        #
################################################
kind: pipeline
type: docker
name: backend_production

steps:
  - name: submodules update
    image: alpine/git
    commands:
      - date
      - echo DRONE_REPO = ${DRONE_REPO}
      - echo DRONE_TAG = ${DRONE_TAG}
      - echo DRONE_COMMIT = ${DRONE_COMMIT}
      - echo DRONE_BUILD_NUMBER = ${DRONE_BUILD_NUMBER}
      - git submodule update --init --recursive

  - name: composer install
    image: composer:1.10.19
    commands:
      - composer install --no-dev --ignore-platform-reqs

trigger:
  event:
    - tag

如果 push dev 分支,則只會執行 dev_check_infodev_run_update 兩個動作
相對的 push testing 分支的行為則會等到指定排程 every2hour 被觸發才會執行
如此就可以針對不同環境可能會偵測不同分支來做不同的操作,比較常見是啟動時的指令是否加上開啟除錯模式
若是不同環境是部署在不同伺服器上,或是不同環境的部署流程不同的話是十分方便的

每個 pipeline 都是獨立的,根據 trigger 的設定在不同條件下被觸發而執行不同步驟
如果推送程式到 dev 分支,則只會觸發 backend_dev 這個 pipeline 以及內部的步驟 或是在版本控制中下 tag,當 webhook 監聽到新的 tag 被推送,則會觸發 backend_production
也可以建立 cronjob 來進行排程定時執行
例如 backend_stage 所設定的 testing 就是監聽名為 every2hour 的排程
這部分之後會再獨立介紹相關的設定和使用方法

更多的設定條件可以參考官方文件:Pipelines Conditions
了解更多關於 Pipeline:Pipelines Overview

最新文章

Category

Tag