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