使用 tool 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