continuous-integration - Teamcity - 有没有办法在将构建配置分配给代理后选择它?
问题描述
有没有办法在将构建配置从队列中分配给代理后更改它?我希望的工作流程:
change in vcs root -> queue up 'run tests' -> if Agent A, run 'run tests', if Agent B, run 'run tests in Docker'
更多上下文:我有一个我维护的 teamcity 实例,但没有管理员访问权限。这意味着我无法在服务器上安装我需要的东西。我们在某些构建代理服务器上进行了某些安装。我创建了不同版本的“运行测试”构建配置,这样它就可以在所有可用的代理上运行。这是一个相当简单的区别:测试套件使用一个构建配置(在默认代理上)定期运行,并在其他(在其他两个构建服务器上)的 docker 容器中运行。并非所有服务器都安装了 docker。
需要明确的是,这些构建配置彼此不连续——它们是相同的构建配置,但版本不同。我不希望两个作业都监听 vcs 更改 - 因为这将启动两个构建配置。我只是想在运行之前但在队列之后放置一个条件,但是数据流似乎是一种方式(排队作业,然后分配给代理)。
解决方案
您应该能够使用条件构建步骤来实现您所需要的,但我不建议这样做太多,因为该解决方案会有点 hacky:
- 将“运行测试”和“在 Docker 中运行测试”这两个构建步骤添加到您的构建配置中。
- 为“运行测试”步骤添加条件:如果
teamcity.agent.name
等于,则执行步骤<dockerless-agent-name>
。 - 为“在 Docker 中运行测试”步骤添加另一个条件:如果
teamcity.agent.name
不等于,则执行步骤<dockerless-agent-name>
。 - 这是骇人听闻的部分。将 docker步骤强加的隐式代理要求添加到
buildAgent.properties
dockerless 代理的文件中。示例:如果您在“在 Docker 中运行测试”步骤中使用docker wrapper,它将对构建配置施加代理要求。在这种情况下,将该行添加到 dockerless agent 的.docker.server.version exists
docker.server.version=whaterver
buildAgent.properties
TeamCity 会认为没有 docker 的代理可以运行“在 Docker 中运行测试”步骤,并且能够将构建分配给该代理。但如果发生这种情况,将执行“运行测试”步骤而不是“在 Docker 中运行测试”。就是这样。
此外,如果在构建步骤中使用条件时忽略隐式代理要求的功能得到实现,您将能够实现目标而无需破解它buildAgent.properties
。
推荐阅读
- javascript - 如何等待响应的角度for循环?
- javascript - 使用 Selenium WebDriver (JavaScript) 检测 URL 更改
- html - 如何防止 VS Code 将长 HTML 行分成多行?
- python - suds 3 `__inject` 引发 AttributeError:“NoneType”对象没有属性“promotePrefixes”
- swift - 在 Mapbox 中设置预定义的纬度和经度,而不是点击位置
- javascript - 单击 div 时将 div 内的文本复制到剪贴板
- .net-core - VSTS dotnet 运行步骤未找到上一步的构建
- testng - 软断言和验证之间的区别
- sql - 将 JD Edwards 编号列格式化为 HH24:MI:SS
- iis-7 - 如何在 2 个 IIS 服务器内共享哈希表