使用工具 task 的自動化

關於 Kubernetes 部署的佈建和配置相關自動化的幾個細節。

為什麼選擇這個自動化工具

為了使此 Kubernetes 佈建正常運作,有幾個相依性需要以正確的順序建構和執行。為了簡化升級和開發期間的快速迭代,所有步驟和相依性都已使用 task 編寫腳本。將此工具視為 make 的現代版本,它允許簡單的輸入檔案檢查總和和並行執行任務。

task 工具如何運作

所有任務都描述在 Taskfile.yaml 檔案中。如果任務中的其中一個命令失敗,則整個任務都會失敗。如果有並行執行的任務,並且其中一個任務失敗,task 會終止其他並行執行的任務。

對於特定環境的設定,請新增一個 .env 檔案,其中包含您環境所需的內容。

現在執行一些 task 命令

以下清單顯示一些命令列範例

task

執行 default 任務,該任務會使用最新的變更更新 minikube 安裝。在每次對檔案進行本機變更後,或從上游提取變更後執行。

task -f

執行 default 任務,但即使沒有來源檔案變更,也會執行所有任務。在重新建立 minikube 後執行。

task <taskname>

Taskfile.yaml 執行特定任務。大多數任務都設定為僅在修改時執行,因此 task 可能會回覆 task: Task "<taskname>" is up to date。若要強制執行任務,請新增 -f 旗標。這會執行任務及其相依性。

task <var>=<value>

使用特定值設定變數,然後執行任務。例如,使用它在一次性執行中設定儲存類型:task KC_DATABASE=postgres

task --dry

顯示將會執行的任務。執行它以查看 task 在下次執行時會執行哪些命令。可以與任務名稱和 -f 旗標組合使用。

task <taskname> -- <cli_args>

透過傳遞任務檔案所需的命令列引數,從 Taskfile.yaml 執行特定任務。這允許使用者重複使用其 shell 指令碼或其他程式,而無需在特定任務中重新實作它們。

此類任務的一個範例是找出資料集提供者的最後一個完成的作業,

task dataset-import -- -a status-completed
task -C 1

在單執行緒模式下啟動,這可能有助於分析問題,因為輸出不會混合。使用此選項來偵錯任務描述。可以與任務名稱組合使用。

似乎有一個可能導致死鎖的開放錯誤,請參閱 go-task/task#715

在修復此問題之前,只要使用參數 -C 1 執行,請註解任務檔案中的所有 run: oncerun: when_changed。先前嘗試暫時移除這些陳述式導致問題,因為這些任務被並行執行多次。

task -h

在單執行緒模式下啟動,這可能有助於分析問題,因為輸出不會混合。使用此選項來深入了解 task。可以與任務名稱組合使用。

在其首頁上找到有關此工具的更多資訊,其中包含其手冊:https://taskfile.dev/

分析失敗的 task 執行

若要分析失敗的執行,請依照下列步驟進行

  1. 透過查看最後一行來識別失敗的任務

  2. 向上捲動以找到該任務的最後一個已執行命令和該命令的輸出。

範例輸出在 keycloak 任務中執行 kubectl 命令時失敗

task: [keycloak] kubectl create namespace keycloak || true
[keycloak] The connection to the server localhost:8080 was refused - did you specify the right host or port?
task: [keycloak] kubectl -n keycloak apply ...
[keycloak] The connection to the server localhost:8080 was refused - did you specify the right host or port?
[tlsdisableagent] [INFO] Scanning for projects...
[tlsdisableagent] [INFO]
[tlsdisableagent] [INFO] ------------...
...
task: Failed to run task "keycloak": exit status 1