【问题标题】:Passing values within a TeamCity metarunner在 TeamCity 元运行器中传递值
【发布时间】:2018-10-18 03:03:02
【问题描述】:

我有一个合并两个跑步者的 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% 仍然等于默认值(“待填充”而不是“1.2.3.45”)。如何将此值传递给 Deploy Project 运行器?

【问题讨论】:

    标签: powershell teamcity


    【解决方案1】:

    好的,所以我找到了解决这个问题的方法,但它有点 hacky。

    通过将 ProjectRelease 命名为 env.ProjectRelease(并且不要忘记将其添加为参数),它成为实时更新的环境参数,并且这样就可以了。

    显然是行:

    Write-Output "##teamcity[setParameter name='ProjectRelease' value='$ProjectRelease']"
    

    ...直到整个脚本完成后才设置参数。如果有比这更优雅的解决方案,请告诉我!

    【讨论】:

    • Teamcity 现在支持跑步者之间传递参数,需要“添加为参数”但不需要更改环境。
    【解决方案2】:

    您应该能够在 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 中的后续构建运行器中使用这些参数。这应该是一个更包容的解决方案。

    【讨论】:

    • 感谢您在 2 年后回复,感谢您的努力!如果我理解正确,那将设置全局值。我想在第一步中分配一个值并将其传递给第二步。
    • 谢谢,对不起,我误读了这个问题。在这种情况下,您目前有一个很好的解决方法。我能想到的其他解决方案可能是将 Octopus Deploy 和 Powershell 运行器合并到一个 powershell 运行器中,或者从上游工件依赖项 (%dep.xxx) 获取 ProjectRelease 值参数并将其用作元运行器的全局参数。
    • 到目前为止,在meta runner的global中添加参数还是不行,需要作为runner的参数添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多