ツール task を使用した自動化
Kubernetes デプロイメントのプロビジョニングと構成に関連する自動化に関する詳細。
なぜ この 自動化ツールなのか
この Kubernetes プロビジョニングが適切に機能するためには、正しい順序で構築および実行する必要があるいくつかの依存関係があります。アップグレードと開発中の迅速なイテレーションを簡素化するために、すべてのステップと依存関係は task を使用してスクリプト化されています。このツールは、入力ファイルの簡単なチェックサムとタスクの並列実行を可能にする make の現代版と考えてください。
task ツールはどのように機能するのか
すべてのタスクは Taskfile.yaml
ファイルに記述されています。タスク内のコマンドのいずれかが失敗した場合、タスク全体が失敗します。並列タスクが実行されていて、そのうちの 1 つが失敗した場合、task は並列実行中の他のタスクを強制終了します。
環境固有の設定については、環境に必要な内容を含む .env
ファイルを追加してください。
task コマンドの実行例
次のリストは、いくつかのコマンドラインの例を示しています。
task
-
最新の変更で minikube インストールを更新する
default
タスクを実行します。ファイルへのローカル変更後、またはアップストリームから変更をプルした後に実行してください。 task -f
-
default
タスクを実行しますが、ソースファイルが変更されていなくてもすべてのタスクを実行します。minikube を再作成した後に実行してください。 task <taskname>
-
Taskfile.yaml
から特定のタスクを実行します。ほとんどのタスクは変更された場合にのみ実行するように設定されているため、task はtask: Task "<taskname>" is up to date
と応答する場合があります。タスクの実行を強制するには、-f
フラグを追加します。これにより、タスクとその依存関係の両方が実行されます。 task <var>=<value>
-
特定の値を持つ変数を設定し、タスクを実行します。たとえば、1 回限りの実行でストレージタイプを設定するには、
task KC_DATABASE=postgres
を使用します。 task --dry
-
どのタスクが実行されるかを表示します。次に task が実行するコマンドを確認するために実行します。タスク名と
-f
フラグと組み合わせて使用できます。 task <taskname> -- <cli_args>
-
タスクファイルで必要なコマンドライン引数を渡すことにより、
Taskfile.yaml
から特定のタスクを実行します。これにより、ユーザーは特定のタスクに再実装することなく、シェルスクリプトやその他のプログラムを再利用できます。このようなタスクの例としては、データセットプロバイダーの最後に完了したジョブを見つけることが挙げられます。
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