使用工具 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: once
和run: when_changed
。先前嘗試暫時移除這些陳述式導致問題,因為這些任務被並行執行多次。 task -h
-
在單執行緒模式下啟動,這可能有助於分析問題,因為輸出不會混合。使用此選項來深入了解 task。可以與任務名稱組合使用。
在其首頁上找到有關此工具的更多資訊,其中包含其手冊:https://taskfile.dev/
分析失敗的 task 執行
若要分析失敗的執行,請依照下列步驟進行
-
透過查看最後一行來識別失敗的任務
-
向上捲動以找到該任務的最後一個已執行命令和該命令的輸出。
範例輸出在 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