Continuous integration Teamcity-在将构建配置分配给代理后,是否有方法选择构建配置?

Continuous integration Teamcity-在将构建配置分配给代理后,是否有方法选择构建配置?,continuous-integration,teamcity,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实例,我维护它,但没有管理员访问权限。这意味着我无法在服务器上安装所需的内容。我们在某些构建代理服务器上安装了某些组件。我创建了不同版本的“运行测试”构

有没有办法在从队列中分配给代理之后更改生成配置? 我希望的工作流程是:

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更改,因为这将启动两个构建配置。我只是想在运行之前,但在队列之后设置一个条件,但是数据流似乎是单向的(排队作业,然后分配给代理)。

您应该能够使用实现所需的功能,但我不建议设置太多,因为解决方案有点粗糙:

  • 将构建步骤“运行测试”和“在Docker中运行测试”添加到构建配置中
  • 向“运行测试”步骤添加条件:如果
    teamcity.agent.name
    等于
    ,则执行步骤
  • 为“在Docker中运行测试”步骤添加另一个条件:如果
    teamcity.agent.name
    不等于
    ,则执行步骤
  • 这是令人讨厌的部分。将docker步骤施加的隐式代理要求添加到您的dockerless代理的
    buildAgent.properties
    文件中。示例:如果在“在Docker中运行测试”步骤中使用,它将在生成配置上强制执行
    Docker.server.version exists
    代理要求。在这种情况下,将行
    docker.server.version=whaterver
    添加到dockerless代理的
    buildAgent.properties
  • TeamCity会认为没有docker的代理可以运行“在docker中运行测试”步骤,并且能够将构建分配给该代理。但如果发生这种情况,将执行“运行测试”步骤,而不是“在Docker中运行测试”。就这样


    此外,如果实现的功能,您将能够实现目标,而无需通过
    buildAgent.properties

    对其进行黑客攻击。据我所知,您希望在默认代理以及您可以控制的代理上运行单个生成配置。几个问题:1)您的“在Docker中运行测试”构建步骤是否添加了默认代理无法满足的隐式代理要求?2) 您是否具有对默认代理的buildAgent.properties文件的写入权限?@tolace我已配置代理要求,以便docker作业将在安装了docker的服务器上运行,反之亦然。我对道具文件有写权限是的。这不是确保正确的作业在正确的服务器上运行的问题——我已经介绍了代理要求。相反,我正试图有效地配置一个自定义触发器,以便在确定“运行测试”将运行的代理之后,将“运行测试”的正确版本排入队列。从某种意义上说,这就是我要寻找的。不幸的是,我使用的是过时的teamcity版本,我没有能力设置条件。我正在建造我们的新管道,我们正在挖沟TC,所以我只是在管道上贴上胶带,直到我能把它扔掉。鉴于我的TC版本,我不认为我能完成我想做的事情。我非常感谢您的帮助,因为您理解了我的问题并给出了可靠的答案。