Giltab CI作业卡住,因为没有分配runner标签值



我有一个CICD配置,看起来像这样:

.rule_template: &rule_configuration
rules:
- changes:
- file/dev/script1.txt
variables:
DESTINATION_HOST: somehost1
RUNNER_TAG: somerunner1
- changes:
- file/test/script1.txt
variables:
DESTINATION_HOST: somehost2
RUNNER_TAG: somerunner2
default:
tags:
- scripts
stages:
- lint
deploy scripts 1/6:
<<: *rule_configuration
tags:
- ${RUNNER_TAG}
stage: lint
script: |
echo "Add linting here!"

....

简而言之,选择哪个运行器取决于更改了哪个文件,因此必须有条件地决定运行器标记。然而,这些作业永远不会执行,也永远不会被分配值,因为我总是得到:

This job is stuck because you don't have any active runners online or available with any of these tags assigned to them: ${RUNNER_TAG}

有任何想法,这是怎么回事,我能做些什么来解决这个问题?

gitlab-runner --version
Version:      14.7.0
Git revision: 98daeee0
Git branch:   14-7-stable
GO version:   go1.17.5
Built:        2022-01-19T17:11:48+0000
OS/Arch:      linux/amd64

标签将作业映射到运行者。我用他们使用的执行器类型标记我的运行器,例如-shell,docker

根据错误消息,您没有任何带有标记${RUNNER_TAG}的运行程序,这意味着它没有按照您希望的方式解析变量。

与其将这样的规则组合在一起,不如为每一个单独的作业,并为每个作业指定一个规则来说明何时触发它。

我在尝试为多客户端环境做一些动态管道时遇到过这个问题,并且多次遇到类似的问题。

据我所知,你上面的配置应该为你的目的工作,但因为它不是有另一种方法来完成这个触发作业。

为每个可能的跑者标签创建一个触发器作业。您可以使用extends来减少为此所需的总代码。

gitlab-ci.yml

stages:
- trigger
- lint
.trigger:
stage: trigger
trigger:
include:
- local: ./lint-job.yml
strategy: depend

trigger-lint-script1:
extends:
- .trigger
variables:
RUNNER_TAG: somerunner1
rules:
- changes:
- file/dev/script1.txt

trigger-lint-script2:
extends:
- .trigger
variables:
RUNNER_TAG: somerunner2
rules:
- changes:
- file/dev/script2.txt

为每个可能的标记创建一个带有相关规则的触发器作业。这样,您可以在一次提交中更改多个指定文件而不会出现问题。在lint-job.yml

中定义被触发的作业lint-job.yml

deploy scripts 1/6:
tags: [$RUNNER_TAG]
stage: lint
script: |
echo "Add linting here!"

还有其他方法可以完成此操作,但对于此特定用途,此方法是迄今为止最简单和最干净的方法。

最新更新