Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Teamcity 设置特定构建参数的触发器选项?_Teamcity_Teamcity 7.0 - Fatal编程技术网

Teamcity 设置特定构建参数的触发器选项?

Teamcity 设置特定构建参数的触发器选项?,teamcity,teamcity-7.0,Teamcity,Teamcity 7.0,我正在寻找一种方法,将一些特定的构建参数附加到计划触发器 我们的想法是不断构建产品的调试版本。不过,我们的夜间构建必须是发布构建。我们大多数项目的构建配置都是完全相同的。它甚至已经有了一个配置参数。所以我需要的只是一个触发器,它允许为单个构建参数指定覆盖。这将使构建配置减少一半,以便维护 有什么方法可以实现这一点吗?现在不行,您可以遵循。我在上一个构建步骤中添加了请求 curl -i -u "%login%:%pass%" -H "Content-type: text/plain" -X PUT

我正在寻找一种方法,将一些特定的构建参数附加到计划触发器

我们的想法是不断构建产品的调试版本。不过,我们的夜间构建必须是发布构建。我们大多数项目的构建配置都是完全相同的。它甚至已经有了一个配置参数。所以我需要的只是一个触发器,它允许为单个构建参数指定覆盖。这将使构建配置减少一半,以便维护


有什么方法可以实现这一点吗?

现在不行,您可以遵循。

我在上一个构建步骤中添加了请求

curl -i -u "%login%:%pass%" -H "Content-type: text/plain" -X PUT -d "v1" http://tc.server/httpAuth/app/rest/buildTypes/id:%buildConfigurationId%/parameters/env.%SOME_PARAMETER%

我使用的方法是创建“部署::开发D1::运行所有集成测试”构建。然后,我在每个集成服务构建上创建一个构建触发器

我为集成服务构建创建了一个名为“env:OctopusEnvironment”的参数。将该值设置为空。我喜欢使用提示和显示:

select display='prompt' label='OctopusEnvironment' data_13='Production' data_12='CI' data_11='Local - Hassan' data_10='Local - Mustafa' description='OctopusEnvironment' data_02='Test T1' data_01='Dev D1' data_04='Local - Taliesin' data_03='Continuous Deployment CI 1' data_06='Local - Paulius' data_05='Local - Ravi' data_08='Local - Venkata' data_07='Local - Marko' data_09='Local - Ivan'
在每个集成服务构建中,我添加了以下powershell步骤:

$octopusEnvironment=($env:octopusEnvironment).Trim()
写入主机“Octopus环境=“$octopusEnvironment”
如果($octopusEnvironment.Length-lt 1){
编写主机“自动检测八达通环境”
$trigger='%teamcity.build.triggeredBy%'-split':'
如果($trigger.Length-gt 2){
$environment=$trigger[1]。Trim()
写入主机“##teamcity[setParameter name='env.OctopusEnvironment'值='$environment']”
}
}

因此,现在我可以通过触发器运行集成测试,当我直接运行它时,它将提示我在哪个环境下运行集成测试。

我遇到了相同的问题,并投票支持Evgeny提到的问题。正如sergiussergius所提到的,我们认为的一个解决方案是在构建步骤序列中添加最后一个步骤,通过使用RESTAPI传递自定义构建参数来手动触发下一个构建配置。但在这种情况下,我们失去了构建链信息。 使用TeamCity 9.x,在REST API上尝试一些东西,我可以实现一个解决方案,它可以从触发(子)构建中检索触发(祖先)构建及其参数。 我们要做的第一件事是使用TeamCity设置的环境变量获取当前构建:

https://<host>/httpAuth/app/rest/builds/number:<env.BUILD_NUMBER>,buildType:(name:<env.TEAMCITY_BUILDCONF_NAME>,project:<env.TEAMCITY_PROJECT_NAME>)
注:

  • 这篇文章引用了TeamCity 7.X版。我使用TeamCity 9.X版完成了这项工作,但无法在以前的版本中尝试。我不知道在我的帖子中提到的RESTAPI调用是否与以前的版本相似
  • 在这个解决方案中,祖先的构建配置(触发构建的配置)和子构建配置(触发的配置)位于同一个项目中。我没有在两个不同的项目中使用构建配置进行测试:我希望“trigger”标记提供有关祖先项目的信息。如果有人能做这个测试就好了

我希望这个解决方案能有所帮助

这不是一个通用的解决方案,但在某些情况下(例如,如果您想确定生成是由计划触发器还是其他方法启动的),解决方法是检查预定义的参数
teamcity.build.triggeredBy

此参数设置为标签“触发者:”旁边的生成概述页面上显示的相同字符串。例如,“调度触发器”、“Git”或用户的全名。(还有一个
teamcity.build.triggeredBy.username
参数,但仅在后一种情况下设置)


这种方法的局限性在于,例如,您无法区分为同一构建配置定义的两个单独的计划触发器。但在这种情况下,您也可以检查当前时间。

漂亮的小powershell suff。但这不能成为JetBrains的家伙在Teamcity本身没有此功能的借口。在自动构建触发上设置自定义参数的内置功能显然将在下一版本中推出(在“仅”保留12年之后)。与此同时,你的解决方案确实帮了大忙!谢谢,伙计。确实,这是一个非常巧妙的解决办法。
<triggered type="unknown" details="##triggeredByBuildType='<triggering-build-configuration-internalId>' triggeredByBuild='<triggering-build-number>'" date="20160105T190642+0700"/>
https://<host>/httpAuth/app/rest/builds/number:<triggering-build-number>'4,buildType:(internalId:<triggering-build-configuration-internalId>1,project:name:<env.TEAMCITY_PROJECT_NAME>)
echo "##teamcity[setParameter name='env.ENV_AAA' value='aaaaaaaaaa']")