使用工具 *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