如何在 TeamCity 中参数化代理要求

如何在 TeamCity 中参数化代理要求

团队城市,是否可以根据项目或构建配置参数来参数化代理要求?例如,值可以包括%...%替换吗?

举个例子:我们有一个项目参数env.XXX_VERSION,它指定了项目所有构建配置中所需的 XXX 产品版本。然后,我们可以在项目的相关构建脚本中使用此值。(随着时间的推移,我们会为我们所依赖的一些产品的不同变体复制此构建项目,因此我们现在有 12 个不同的项目,它们的参数值不同)。现在,我还想从项目中的所有相关构建配置中包含一个代理要求,以便只考虑可用的代理。但考虑到构建配置的数量和变体项目的数量,我更愿意根据现有值参数化要求env.XXX_VERSION。这可能吗?

(今天,我们所有的代理都包含了软件的所有可能版本,但将不再可能,因此我们需要从构建配置的项目中对代理提出要求)

答案1

看起来您已经知道自己想要做什么,问题是您需要处理大量的代理和配置。

为什么不使用 TeamCity 的 REST API 来自动化执行此操作?TeamCity 的服务器具有内置 HTTP API,您可以使用它来编辑/更新(几乎)任何可以使用 Web 界面的字段。

您可以使用首选脚本语言与 API 交互,使用 HTTP GET/PUT 调用来获取和更新值。在这种情况下,我认为值得您花时间编写一个脚本,以避免必须通过 UI 来更新您提到的所有构建配置。

您将编写一个脚本(使用您习惯使用的任何脚本语言),只需运行一次即可设置所有代理要求。以下是伪代码

  1. 迭代 TeamCity 中的项目

获取项目列表

curl -i -H "Accept: application/json" http://teamcity/httpAuth/app/rest/projects --user username:password
  1. XXX_VERSION从项目中获取参数。

循环遍历所有项目,获取所有参数并解析我们的 XXX_VERSION

curl http://teamcity/app/rest/projects/id:PROJECT_NAME/parameters
  1. 在构建配置上设置代理要求。

对于每个构建配置,在每个项目中使用解析出的 XX_VERSION 值设置构建配置上的代理要求

curl -X PUT http://teamcity/httpAuth/app/rest/buildTypes/<buildTypeLocator>/agent-requirements/<id> --user username:password

这是总体思路,但并不完整,通过花时间解决这个脚本,您将节省大量时间通过 TeamCity UI 进行管理。

https://confluence.jetbrains.com/display/TCD9/REST+API

答案2

你可以强制团队城市在不禁用所有其他连接的代理的情况下建立特定代理。

就是这样:

构建配置设置

下一个代理要求

现在你必须设置一个明确要求对于特定代理:

参数名称:system.agent.name

条件:等于

值:YOUR_SPECIFIC_AGENT_NAME

你也可以尝试这个:

浏览:TeamCity --> 管理 --> 代理 --> 选择代理 --> 兼容配置选项卡,然后当前运行配置策略然后仅运行指定的配置并点击+ 分配配置并完成。

请让我知道这可不可以帮你。

谢谢。

答案3

我找不到用%...%替换参数化值的方法,但我找到了一种解决方法。这不是理想的方法,但对我的小用例来说有效。

用例: 我正在从模板创建构建配置,并且需要每个构建配置仅在一台特定的机器上运行。我想teamcity.agent.name equals %buildAgentName%在模板中执行此操作,让 TeamCity 在我从模板创建构建配置时提示我填写参数。

解决方案: 我没有使用参数,而是输入了与任何代理名称都不匹配的字符串,例如teamcity.agent.name equals replaceThisWithActualAgentName在模板中。系统没有提示我输入参数,但这可以防止构建配置意外地在错误的机器上运行,直到我覆盖代理要求。

我不确定这是否能解决您的使用情况,但我将其发布在这里,以防它对其他人有帮助。

相关内容