動作參考
動作是純資料:參數宣告加上一段 shell 樣板。執行路徑上沒有任何東西認識動作——流程在你儲存任務時就編譯成一段純腳本,這也是遠端執行器完全不需要知道動作存在的原因。
內建動作共 33 個,分成九類。
通用
| 動作 | 識別字 | 作用 |
|---|---|---|
| 執行命令 | shell.run | 在工作目錄執行一段 shell,最常用的萬用動作。 |
| 輸出訊息 | shell.echo | 把一段文字寫進建置日誌,方便標記進度。 |
| 等待 | shell.sleep | 暫停指定秒數,常用在等待服務啟動。 |
| 設定環境變數 | shell.env | 往 $WALIS_ENV_FILE 追加,為後續步驟設定變數。 |
| 設定輸出 | shell.outputs | 把 name=value 寫成這一步的輸出,後面的步驟用 ${{ steps.識別字.名稱 }} 引用。 |
| 切換目錄 | shell.cd | 切換目錄,後續步驟都會在這裡執行。 |
檔案
| 動作 | 識別字 | 作用 |
|---|---|---|
| 建立目錄 | file.mkdir | 已存在時不會失敗。 |
| 複製檔案 | file.copy | 檔案或目錄皆可。 |
| 移動檔案 | file.move | 移動或改名。 |
| 刪除檔案 | file.remove | 路徑不存在時不會失敗。 |
| 壓縮成 zip | file.zip | 把目錄或檔案壓成 zip。 |
Git
| 動作 | 識別字 | 作用 |
|---|---|---|
| Git Clone | git.clone | 可指定分支與深度。 |
| Git Checkout | git.checkout | 切換到指定分支或提交。 |
| Git Pull | git.pull | 拉取最新的提交。 |
Node
| 動作 | 識別字 | 作用 |
|---|---|---|
| 安裝相依套件 | node.install | 依 lock 檔安裝。 |
| 執行 npm script | node.script | 執行 package.json 裡的 script。 |
| 執行 npx 指令 | node.npx | 用 npx 執行套件提供的指令。 |
.NET
| 動作 | 識別字 | 作用 |
|---|---|---|
| dotnet restore | dotnet.restore | 還原 NuGet 相依套件。 |
| dotnet build | dotnet.build | 建置專案或方案。 |
| dotnet test | dotnet.test | 執行測試專案。 |
| dotnet publish | dotnet.publish | 產生發行輸出。 |
容器
| 動作 | 識別字 | 作用 |
|---|---|---|
| Docker Build | docker.build | 建置映像檔。 |
| Docker Push | docker.push | 推送映像檔到 registry。 |
| Docker Compose | docker.compose | 以 compose 啟動或更新服務。 |
| 在容器中執行 | container.run | 把工作目錄掛進指定映像,在裡面跑一段腳本——等同 Jenkins 的 agent { docker }。 |
部署
| 動作 | 識別字 | 作用 |
|---|---|---|
| SSH 遠端執行 | deploy.ssh | 透過 SSH 在遠端主機執行命令,常用於重啟服務或跑部署腳本。 |
| rsync 同步 | deploy.rsync | 把目錄同步到遠端主機。 |
| scp 上傳 | deploy.scp | 把檔案複製到遠端主機。 |
| HTTP 請求 | deploy.http | 呼叫一個端點,例如觸發部署或送出通知。 |
資料
| 動作 | ID | 做什麼 |
|---|---|---|
| HTTP 請求 | http.request | 用 curl 送請求,把回應碼與內容當成這一步的輸出(status、body)。4xx/5xx 不會讓這一步失敗——那要交給執行條件判斷。 |
| 取出 JSON 欄位 | data.json-get | 從一段 JSON(通常是前一步 http.request 的 body)取出欄位,輸出成 value。路徑用點分隔、陣列用數字。執行器要有 python3 或 node。 |
這兩個動作有宣告輸出,所以會出現在插入前面步驟的輸出選單裡。搭配執行條件,流程就能「呼叫 API、取欄位、依結果分支」。
檢查
| 動作 | 識別字 | 作用 |
|---|---|---|
| 檢查檔案存在 | check.file | 檔案不存在時讓建置失敗。 |
| 檢查指令可用 | check.command | 指令不在 PATH 上時讓建置失敗。 |
每個步驟的設定
流程中的每個步驟都帶這些設定,與它用哪個動作無關:
- 啟用這個步驟——關掉就略過,不會讓建置失敗。
- 失敗時繼續往下執行——越過非零結束碼繼續。
- 依賴步驟——哪幾步跑完才輪到這一步。什麼都不依賴的步驟會一起開始,見流程是一張圖。
- 識別字——一個流程內唯一的短名字,後面的步驟才引用得到這一步的輸出。
- 執行條件(運算式)——執行時拿前面步驟的輸出求值。不成立是略過,不是失敗。
- 執行條件——「前面都成功才執行」(預設)、「總是執行」或「只在前面失敗時執行」。 這就是 Jenkins 的
post { always / failure }:出事之後收尾或通知的步驟照樣會跑, 一般步驟則標記為Skipped。建置結果仍算失敗。 - 重試次數——第一次之外再試 0 到 10 次。每次都是全新的 shell,前幾次的輸出留在上面。 重試不會延長任務逾時。
腳本模式沒有這些開關:一段編譯好的腳本沒有地方放它們。
自訂動作
自訂動作跟內建動作結構相同,以 JSON 存在資料庫。你宣告參數、寫一段 shell 樣板;樣板語法記在專案的 Docs/actions.md。自訂動作會跟著匯出與匯入一起走。
如果你要的是行為而不是樣板——邏輯、分支、呼叫 API——那應該寫外掛。
動作套件
管理動作視窗有一個動作套件區塊與重新載入按鈕。套件是放在儲存庫裡的共用動作定義——公開的那份是 walisayu/walis-actions——以檔案的形式拉進來,不是安裝一段程式碼。它們仍然只是參數宣告加 shell 樣板,所以跟任何動作一樣:用之前你讀得到它會跑什麼。