Trigger (觸發器) 是 Pipeline/Release Pipeline 重要的功能,使用得宜的話,使用者可以專於自己本身的工作,而不需要持續檢視與手動執行 Pipeline 執行狀況,有效提升 IT 人員生產力。下面幾個案例提供參考
上述情境只是基本的運用,但也並非大量設定 Trigger 就是好事,即使你有大量的 Agent (代理程式),Azure DevOps Parallel Job 是需要費用的。或許有的人會說這筆費用對於多數企業是可以接受的,但其主要精神是拆分成部分工作並在離峰時間執行是重要的,這個時候成本是一回事,主要是執行效率。
依據過去顧問經驗,許多大型組織忽視拆分成部分工作並在離峰時間執行工作,且不願意投入資源做這件事情 - 日益龐大的 Pipeline 會造成很多問題
在這篇文章我們主要討論 Continuous Integration Trigger 與 Scheduled Trigger,主要原因在於這兩個觸發功能有些細節設定可以有效提升生產力,其餘 Trigger 就簡易說明,讀者大概知道是什麼就好。Build Pipeline Trigger 可以分成下列幾種類型:
如果你要停止 Trigger,可以參考下列設定
trigger: none
Continuous Integration Trigger 可以透過 Branch、Batch changes 與 Path filters 設定,避免因使用者大量推送變更至儲存庫時觸發 Pipeline,導致有限資源被耗盡造成 CI 排隊等待,進而影響其他重要工作。在有限的資源下,通常會建議設定主要分支與指令路徑,在資源充裕或此 CI 流程執行快速的情況下,才不反對包含全部分支。下面為設定範例。
trigger:
branches:
include:
- main
- releases/*
paths:
include:
- docs
Batch (批次) 設定在團隊成員經常上傳變更也相當有效,當 Pipeline 正在執行時,Azure DevOp 會等到執行完成,然後啟動另一個執行,並執行尚未建置的所有變更,而不會一次小變更就執行一個 Pipeline,是非常推薦使用的功能。 下面為設定範例。
trigger:
batch: true
branches:
include:
- main
若你在 CI Pipeline 流程中有進行部署行為,建議不要啟動此設定
排程觸發器讓 Pipeline 有更多應用,除了前言所提到的可以在離峰時間執行複雜且冗長 CI 流程,更可以透過此功能做自動化工作,如:定期清理伺服器資訊、定期備份或同步資料 - 這讓 Pipeline 能做的不止是 CI 相關工作。其設定說明如下:
schedules:
- cron: string # cron 格式 (UTC 時間! 非常重要)
displayName: string # 顯示名稱
branches:
include: [ string ] # 包含哪個分支
exclude: [ string ] # 不包含哪個分支
always: boolean # 若設定為 false,則程式碼有變更才執行;若為 true,則無視程式碼是否有變更
batch: boolean # 若前一個排程 Pipeline 正在執行,是否要執行新的 Pipeline
always 設定相當重要,也是被問過最多問題的設定 (為什麼我的 Scheduled Trigger 沒有執行?)
其設定範例如下:
schedules:
- cron: '0 0 * * *'
displayName: Daily midnight build
branches:
include:
- main
另一種設定方式是透過 UI 介面,這也是需多使用者最容易混淆的地方,容易弄錯的地方包含
實際上是有 UI 設定,其功能在編輯 YAML 畫面,點選右上角 ... 按鈕,選擇 Trigger。但要注意,UI 設定優先權高於在 YAML 內設定,一旦設定 UI Trigger, YAML 內的排程設定即無效。
在這篇文章只簡單說明 Relese Pipeline Trigger 類型,就不多做描述與說明如何設定。主要原因就目前個人經驗,仍無法提供最佳實踐,也請讀者見諒。其類型可以分成下列幾種:
Release Pipeline Trigger 也與 Build Pipeline Trigger 不同,是透過使用者介面進行設定。使用者可以在...