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