TeamCity基于分支更改工件部署目录

时间:2015-07-10 20:12:38

标签: teamcity

我想这样做,以便TeamCity将部署到一个文件夹,用于构建来自master和另一个文件夹,用于构建来自其他任何内容。经过一些谷歌搜索,我遇到了这篇文章:TeamCity, passing an id generated in one build step to a later build step

不幸的是,它似乎并没有为我工作,我希望有人能告诉我原因。

enter image description here

然后我的powershell脚本看起来像这样:

if ("%teamcity.build.branch%".CompareTo("refs/heads/master")) {
    Write-Host "##teamcity[setParameter name='artifactory_deploy_dir' value='test1']"
} else {
    Write-Host "##teamcity[setParameter name='artifactory_deploy_dir' value='test2']"
}

Write-Host %artifactory_deploy_dir%

这是它输出的内容: enter image description here

我宁愿通过Commandline执行此操作,但我已经读过,回声并不真实有效,该声明是否有效?

由于

2 个答案:

答案 0 :(得分:0)

看起来上面提到的powershell脚本正在构建配置中作为最后一步运行。屏幕截图的第一行:

[16:12:57] 第2/2页:rrtwr(Powershell)(3s)

在实际使用之前,您需要设置artifactory_deploy_dir的值。所以powershell应该作为第一步运行。您只需要对构建步骤重新排序,并确保在使用之前设置artifactory_deploy_dir

答案 1 :(得分:0)

DevOps是正确的。这是他的回答:

"当您的PowerShell脚本由TeamCity生成时,变量值将使用%artifactory_deploy_dir%注入到该脚本中,因此在此时它将是静态的。使用set参数更新参数将起作用,但您只需写出静态注入值。添加一个额外的构建步骤并将最后一行(Write-Host%artifactory_deploy_dir%)移动到该步骤,您将看到该值已更新

此外,还没有测试CompareTo()方法的结果。如果字符串匹配区分大小写的比较,它将返回0."

之后我运行了另一个构建步骤并查询了值,它确实发生了变化。我还继续将if语句更新为" if("%teamcity.build.branch%" .equals(" refs / heads / master")), "这部分也可以。

感谢DevOps。如果您以某种方式发布答案,我可以将其标记为"已回答"我完全将你的标记作为答案,而不是我的。