在 TeamCity metarunner 中传递值
Passing values within a TeamCity metarunner
我有一个整合两个跑步者的 TeamCity 元跑步者。第一个跑步者做了一堆 Powershell 的东西来获得正确的 Octopus 版本来部署,它工作正常。第二个跑步者尝试部署它。
<build-runners>
<runner name="Get project release for current branch" type="jetbrains_powershell">
<parameters>
<param name="jetbrains_powershell_bitness" value="x86" />
<param name="jetbrains_powershell_execution" value="PS1" />
<param name="jetbrains_powershell_minVersion" value="4.0" />
<param name="jetbrains_powershell_script_code"><![CDATA[
#Do some powershell stuff here to get the right release
$ProjectRelease="1.2.3.45"
Write-Output "##teamcity[setParameter name='ProjectRelease' value='$ProjectRelease']"
Start-Sleep -s 10
]]></param>
<param name="jetbrains_powershell_script_mode" value="CODE" />
<param name="teamcity.step.mode" value="default" />
</parameters>
</runner>
<runner name="Deploy Project" type="octopus.deploy.release">
<parameters>
<param name="octopus_additionalcommandlinearguments" value="--specificmachines=%AgentList%" />
<param name="octopus_deployto" value="%Octopus.EnvironmentName%" />
<param name="octopus_host" value="%system.Octopus-prod_ServerUrl%" />
<param name="octopus_project_name" value="%ProjectName%" />
<param name="octopus_releasenumber" value="%ProjectRelease%" />
<param name="octopus_version" value="3.0+" />
<param name="octopus_waitfordeployments" value="true" />
<param name="secure:octopus_apikey" value="zxx318ab49dce685b0ae65d94a963ff326672f51fb87c685575c3b6ed4f6eb8a569" />
<param name="teamcity.step.mode" value="default" />
</parameters>
</runner>
</build-runners>
所以您可以看到 %ProjectRelease% 设置为 1.2.3.45,然后可以在后续构建步骤中使用此值 - 一切都很好。但是对于第二名,在线:
<param name="octopus_releasenumber" value="%ProjectRelease%" />
%ProjectRelease% 仍然等于默认值("To be populated" 而不是“1.2.3.45”)。如何将此值传递给 Deploy Project runner?
好的,所以我找到了解决这个问题的方法,但它有点老套。
通过将 ProjectRelease 命名为 env.ProjectRelease(并且不要忘记将其添加为参数)它变成了一个实时更新的环境参数,因此会起作用。
显然是行:
Write-Output "##teamcity[setParameter name='ProjectRelease' value='$ProjectRelease']"
...直到整个脚本完成后才设置参数。如果有比这更优雅的解决方案,请告诉我!
您应该能够在 xml 中为整个 metarunner 设置参数。
例如:
<?xml version="1.0" encoding="UTF-8"?>
<meta-runner name="YourMetaRunnerName">
<description>YourMetaRunner Description </description>
<settings>
<parameters>
<!-- meta-runner parameters accessible in all build runners
below -->
<param name="ProjectRelease"value="Release.1.2.3.45"/>
然后您将能够在 MetaRunner 中的后续构建运行器中使用这些参数。这应该是一个更封闭的解决方案。
我有一个整合两个跑步者的 TeamCity 元跑步者。第一个跑步者做了一堆 Powershell 的东西来获得正确的 Octopus 版本来部署,它工作正常。第二个跑步者尝试部署它。
<build-runners>
<runner name="Get project release for current branch" type="jetbrains_powershell">
<parameters>
<param name="jetbrains_powershell_bitness" value="x86" />
<param name="jetbrains_powershell_execution" value="PS1" />
<param name="jetbrains_powershell_minVersion" value="4.0" />
<param name="jetbrains_powershell_script_code"><![CDATA[
#Do some powershell stuff here to get the right release
$ProjectRelease="1.2.3.45"
Write-Output "##teamcity[setParameter name='ProjectRelease' value='$ProjectRelease']"
Start-Sleep -s 10
]]></param>
<param name="jetbrains_powershell_script_mode" value="CODE" />
<param name="teamcity.step.mode" value="default" />
</parameters>
</runner>
<runner name="Deploy Project" type="octopus.deploy.release">
<parameters>
<param name="octopus_additionalcommandlinearguments" value="--specificmachines=%AgentList%" />
<param name="octopus_deployto" value="%Octopus.EnvironmentName%" />
<param name="octopus_host" value="%system.Octopus-prod_ServerUrl%" />
<param name="octopus_project_name" value="%ProjectName%" />
<param name="octopus_releasenumber" value="%ProjectRelease%" />
<param name="octopus_version" value="3.0+" />
<param name="octopus_waitfordeployments" value="true" />
<param name="secure:octopus_apikey" value="zxx318ab49dce685b0ae65d94a963ff326672f51fb87c685575c3b6ed4f6eb8a569" />
<param name="teamcity.step.mode" value="default" />
</parameters>
</runner>
</build-runners>
所以您可以看到 %ProjectRelease% 设置为 1.2.3.45,然后可以在后续构建步骤中使用此值 - 一切都很好。但是对于第二名,在线:
<param name="octopus_releasenumber" value="%ProjectRelease%" />
%ProjectRelease% 仍然等于默认值("To be populated" 而不是“1.2.3.45”)。如何将此值传递给 Deploy Project runner?
好的,所以我找到了解决这个问题的方法,但它有点老套。
通过将 ProjectRelease 命名为 env.ProjectRelease(并且不要忘记将其添加为参数)它变成了一个实时更新的环境参数,因此会起作用。
显然是行:
Write-Output "##teamcity[setParameter name='ProjectRelease' value='$ProjectRelease']"
...直到整个脚本完成后才设置参数。如果有比这更优雅的解决方案,请告诉我!
您应该能够在 xml 中为整个 metarunner 设置参数。
例如:
<?xml version="1.0" encoding="UTF-8"?>
<meta-runner name="YourMetaRunnerName">
<description>YourMetaRunner Description </description>
<settings>
<parameters>
<!-- meta-runner parameters accessible in all build runners
below -->
<param name="ProjectRelease"value="Release.1.2.3.45"/>
然后您将能够在 MetaRunner 中的后续构建运行器中使用这些参数。这应该是一个更封闭的解决方案。