建置任務
一個任務就是:一個名字、一段腳本、一個執行的地方,以及什麼時候跑的規則。任務本身不存步驟——步驟是建置開始時才推導出來的,所以改任務永遠不需要搬遷過去的建置紀錄。
清單
可依狀態(啟用中、已暫停)、專案與觸發方式(手動、推送、排程)篩選,也可以用名稱、專案或分支搜尋。每一列顯示上次建置、觸發設定與成功率。
分頁、排序與篩選全部在伺服器端完成,所以不管這台裝了三十個還是三千個任務,清單的大小都一樣——瀏覽器不會被塞一整張表自己慢慢挑。
清單只顯示你的角色看得到的任務。看不到的任務不只是被隱藏:用識別碼直接查會回 404 而不是 403,所以回應不會反過來證實它存在。
從 Jenkins 匯入把 Jenkinsfile 或任務的 config.xml 轉成草稿並在編輯器開啟,過程中不存任何東西——操作流程見從 Jenkins 匯入,哪些轉得過去見對應表。
匯出與匯入用 JSON 在機器之間搬任務與自訂動作。匯入依名稱比對,不是識別碼——不覆寫時同名略過,覆寫時就地更新,識別碼與建置紀錄都保留。
編輯器
編輯器分成四個分頁——基本資料、執行腳本、建置設定、觸發與通知。有欄位要修正的分頁會帶一個紅色 !,所以錯誤發生在你沒看的那個分頁時,還是看得見。
取消與儲存任務在頁面最上方的麵包屑那一列,不在表單底下。現在每一頁的動作鈕都在那裡——新增、重新整理、匯入匯出、儲存設定、還原——不管你在看哪一頁位置都一樣,長表單也不會把儲存推到畫面外。
基本資料
名稱、專案、預設分支、說明與原始碼儲存庫。推送觸發比對的就是這個儲存庫位址,比對前會正規化——[email protected]:x/y.git 和 https://github.com/x/y 視為同一個。
執行腳本
兩種模式,隨時可切:
- 流程模式——用動作組出腳本,儲存時編譯成一段純 shell。
- 腳本模式——直接編輯那段 shell。
流程 → 腳本會保留編譯結果;腳本 → 流程會還原步驟並丟掉腳本模式下的手動修改。如果你已經手工調過腳本,就待在腳本模式。
流程模式是三欄——動作面板、步驟、以及選中步驟的設定。外側兩欄可以收合(收合動作面板、展開步驟設定),流程長的時候把寬度讓出來。
AI 檢查腳本把腳本送給設定好的供應商並回報問題,不會改動腳本。
建置設定
| 欄位 | 說明 |
|---|---|
| 執行器 | local 或已註冊的遠端執行器。指定給離線執行器的工作會留在佇列。 |
| 工作目錄 | 用絕對路徑。若有設定允許的工作目錄,不在其中會直接失敗。 |
| 逾時時間 | 整場建置的預算,不是每步驟。每個步驟拿到的是剩餘時間。 |
| 產出檔案路徑 | 成功後複製出來,上限 200 檔/64 MB。 |
| 建置快取 | 一行一個相對路徑。絕對路徑與 .. 會被忽略。 |
| 矩陣 | {"NODE":["20","22"],"OS":["mac"]} 展開成多筆建置,上限 50 組。 |
| 同一時間只跑一筆建置 | 前一筆還在跑時,下一筆留在佇列等,不會同時開始。就是 Jenkins 的 disableConcurrentBuilds()。 |
建置參數
最多宣告 50 個參數,型別可選文字、多行文字、選單、布林或密碼。手動執行時會先開表單填值;排程與推送用預設值。
腳本以環境變數讀取($RELEASE_TAG)。名稱不可以 WALIS_ 開頭;傳一個任務沒宣告過的名稱會讓觸發失敗,不是默默忽略——參數不能拿來設任意變數。
密碼型別在日誌裡遮蔽,API 也永遠不回傳。其他型別的值在建置上看得到,回頭讀舊建置時正需要這個。
權限
可以看到這個任務的角色預設 viewer;可以執行這個任務的角色預設 operator。這是逐任務設定的,所以部署任務可以只給管理員,其餘清單照樣所有人看得到。
觸發與通知
這三個觸發方式是三選一,不是三個開關——一個任務要嘛手動、要嘛推送、要嘛排程。沒辦法讓同一個任務既在推送時跑、又每晚跑;那就拆成兩個任務,或讓第一個觸發第二個當下游。
選「手動」其實是選不要自動觸發。用手執行永遠都可以:不管選的是哪一個,任務清單上的執行鈕都在。所以選了排程並不會把那顆按鈕拿掉。
建立後先暫停產生一個不會執行也不會被排程觸發的任務,適合腳本還沒寫完的時候。
推送 webhook 的網址在系統設定 → 安全,不在這裡。
下游任務
完成後觸發下游任務最多列 20 個任務名稱,各自指定觸發時機:成功時、失敗時或總是。下游建置會拿到 WALIS_UPSTREAM_JOB、WALIS_UPSTREAM_BUILD 與 WALIS_UPSTREAM_STATUS。
對象以名稱比對,所以匯出到別台仍然對得上。鏈長到十層就停,觸發時用上游任務的執行角色檢查權限——見下游任務。