[用 Drone 建立自動部署] 02 部署觸發條件(pipeline)設定
透過 Drone 建立自動部署流程,部署觸發條件(pipeline)設定
使用 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_info
和 dev_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