Teamcity - 有没有办法在分配给代理后 select 构建配置?
Teamcity - Is there a way to select the build config after it gets assigned to an agent?
有没有办法在将构建配置分配给队列中的代理后更改构建配置?
我希望的工作流程:
change in vcs root -> queue up 'run tests' -> if Agent A, run 'run tests', if Agent B, run 'run tests in Docker'
更多上下文:我有一个我维护的 teamcity 实例,但没有管理员访问权限。这意味着我无法在服务器上安装我需要的东西。我们在某些构建代理服务器上进行了某些安装。我创建了不同版本的 'run tests' 构建配置,这样它将 运行 在所有可用的代理上。这是一个相当简单的区别:测试套件 运行s 定期与一个构建配置(在默认代理上)和 运行s 在其他 docker 容器中(在另外两个上)构建服务器)。并非所有服务器都安装了 docker。
需要说明的是,这些构建配置彼此不连续 - 它们是相同的构建配置,但版本不同。我不希望这两个作业都监听 vcs 更改——因为这将启动两个构建配置。我只是想在 运行 前面放一个条件,但在队列之后,但是数据流似乎是一种方式(排队作业,然后分配给代理)。
您应该能够使用 conditional build steps 实现您所需要的,但我不推荐太多,因为解决方案会有点 hacky:
- 在 Docker[=42 中添加两个构建步骤,'运行 测试' 和'运行 测试=]',添加到您的构建配置中。
- 向'运行 tests'步骤添加条件:如果
teamcity.agent.name
等于<dockerless-agent-name>
. 则执行步骤
- 在Docker步骤中为'运行测试添加另一个条件:如果
teamcity.agent.name
不满足则执行步骤 等于 <dockerless-agent-name>
.
- 这是棘手的部分。将 docker 步骤强加的隐式代理要求添加到 dockerless 代理的
buildAgent.properties
文件中。示例:如果您在 Docker 步骤中的“运行 测试中使用 docker wrapper,它将对 docker.server.version exists
代理要求施加影响构建配置。在这种情况下,将行 docker.server.version=whaterver
添加到 dockerless 代理的 buildAgent.properties
.
TeamCity 会认为没有 docker 的代理可以 运行 Docker[=42= 中的 '运行 测试]' 步骤,并且能够将构建分配给该代理。但如果发生这种情况,将执行 '运行 tests' 步骤,而不是 Docker[= 中的 '运行 tests 42=]'。就这些了。
此外,如果 ignoring implicit agent requirements if a condition is used in a build step 的功能得到实现,您无需通过 buildAgent.properties
.
破解即可实现目标
有没有办法在将构建配置分配给队列中的代理后更改构建配置? 我希望的工作流程:
change in vcs root -> queue up 'run tests' -> if Agent A, run 'run tests', if Agent B, run 'run tests in Docker'
更多上下文:我有一个我维护的 teamcity 实例,但没有管理员访问权限。这意味着我无法在服务器上安装我需要的东西。我们在某些构建代理服务器上进行了某些安装。我创建了不同版本的 'run tests' 构建配置,这样它将 运行 在所有可用的代理上。这是一个相当简单的区别:测试套件 运行s 定期与一个构建配置(在默认代理上)和 运行s 在其他 docker 容器中(在另外两个上)构建服务器)。并非所有服务器都安装了 docker。
需要说明的是,这些构建配置彼此不连续 - 它们是相同的构建配置,但版本不同。我不希望这两个作业都监听 vcs 更改——因为这将启动两个构建配置。我只是想在 运行 前面放一个条件,但在队列之后,但是数据流似乎是一种方式(排队作业,然后分配给代理)。
您应该能够使用 conditional build steps 实现您所需要的,但我不推荐太多,因为解决方案会有点 hacky:
- 在 Docker[=42 中添加两个构建步骤,'运行 测试' 和'运行 测试=]',添加到您的构建配置中。
- 向'运行 tests'步骤添加条件:如果
teamcity.agent.name
等于<dockerless-agent-name>
. 则执行步骤
- 在Docker步骤中为'运行测试添加另一个条件:如果
teamcity.agent.name
不满足则执行步骤 等于<dockerless-agent-name>
. - 这是棘手的部分。将 docker 步骤强加的隐式代理要求添加到 dockerless 代理的
buildAgent.properties
文件中。示例:如果您在 Docker 步骤中的“运行 测试中使用 docker wrapper,它将对docker.server.version exists
代理要求施加影响构建配置。在这种情况下,将行docker.server.version=whaterver
添加到 dockerless 代理的buildAgent.properties
.
TeamCity 会认为没有 docker 的代理可以 运行 Docker[=42= 中的 '运行 测试]' 步骤,并且能够将构建分配给该代理。但如果发生这种情况,将执行 '运行 tests' 步骤,而不是 Docker[= 中的 '运行 tests 42=]'。就这些了。
此外,如果 ignoring implicit agent requirements if a condition is used in a build step 的功能得到实现,您无需通过 buildAgent.properties
.