ツール 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 の実行の分析

失敗した実行を分析するには、次の手順に従ってください

  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