2015-07-10 32 views
1

我希望这样TeamCity将部署到一个文件夹以从主服务器生成并从另一个文件夹生成其他任何文件夹。一些谷歌搜索后,我跑过这篇文章:TeamCity, passing an id generated in one build step to a later build stepTeamCity更改基于分支的artifactory部署目录

不幸的是,它似乎并没有为我工作,我希望有人会告诉我为什么。

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

我宁愿通过命令行做到这一点,但我阅读回声并不真正起作用,这种说法有没有任何效力?

感谢

+1

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

+1

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

回答

0

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

“当你的powershell脚本由TeamCity生成时,变量值将被使用%artifactory_deploy_dir%注入到该脚本中,所以在这一点上它将是静态的。 ,但是你只是写出这个静态注入值,添加一个额外的构建步骤,并将最后一行(Write-Host%artifactory_deploy_dir%)移动到该值,您将看到该值已更新

此外, CompareTo()方法未被测试,如果字符串匹配区分大小写的比较,它将返回0。

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

感谢DevOps。如果您以答复的方式发布答案,我可以将答案标记为“回答”,我会完全将您的答案标记为答案,而不是我的答案。

+0

你可以有一个:) –

0

看起来像上面提到的PowerShell脚本运行在你的构建配置最后一步。您的屏幕截图的第一行:

[16时12分57秒] 步骤2/2:rrtwr(PowerShell的)(3S)

你需要真正使用它之前设置的artifactory_deploy_dir值。所以PowerShell应该作为第一步运行。您只需重新构建构建步骤,并确保artifactory_deploy_dir在使用之前得到设置。