現在有不少的軟體會有一個特殊的版本叫Nightly,從字面上的意思就可以得知是指每個晚上發行的版本,而這個每晚發佈一個版本基本上都是靠Pipeline在晚上的時候執行build的動作,完成之後將該版發佈出來,是一個比alpha、beta這些迭代更快速的版本,如果要達成這樣的排程設計,在Azure DevOps Pipeline上要怎麼做呢?
在Azure DevOps要設定排程執行Pipeline其實有兩種方式,一種是Yaml內透過文字設定的方式,要透過cron語法來進行設定,可以參考官網的說明頁面。另一種是透過UI的介面進行設定,在官網說明頁面上稱為「傳統(classic)」的設定方式。
這邊我們不透過Yaml的方式來做設定,使用比較簡單的UI進行操作。(註:UI定義的排程優先於Yaml排程)
首先,來到Edit Pipeline來到輯編畫面之後,同樣右上角的地方將隱藏的功能選單叫出來,然後按下Triggers進入設定的畫面(沒錯,不是Settings,我覺得Triggers更適合叫Settings,因為Triggers裡面的設定比Settings裡面可以設定的項目更多):
接著會進入到Triggers的設定畫面,在左畫面的Scheduled右邊有個「+ Add」可以增加Schedule排程的設定,會在Scheduled下面多一列設定,而設定的內容則是顯示在右畫面:
從上圖右畫面可以看到設定方式非常簡單,只需要勾選星期幾要觸發,並且設定觸發的時間。如果勾選下面的Only schedule builds if the source or pipeline has changed,系統可以避免在Repo內容或Pipeline設定沒有變動的時候觸發,可以節省資源。
如果需要設定多個不同的觸發條件,例如:星期一到五的工作日是早上6點排程建置,六、日兩天則是凌晨1點進行Build的動作,甚至是不同時區的時間設定觸發,只需要在左畫面再度按下「+ Add」新增規則即可:
至於右畫面時間設定的下方Branch filters設定則是對應上方的Only schedule builds if the source or pipeline has changed勾選設定使用,讓Schedule判斷所選的分支內容是否有異動,並不影響Yaml內的Source存取(兩者無直接關係)。
從Pipeline的Runs清單中則是可以看出來不同Run是由排程觸發、CI觸發還是人為手動觸發執行:
像我們公司就有Pipeline是設定中午休息時間執行一次,凌晨執行一次,分別對應當天上午的Commit與下班後到隔天上班前的Commit建置結果。