我能够在go模板中引用环境变量吗?

时间:2014-04-02 09:14:20

标签: thoughtworks-go

尝试从go模板引用环境变量,但我认为它不可能?无法在文档中看到任何内容以及我通过充分利用参数而从未使用环境变量的示例。我喜欢的是

<templates>
<pipeline name="TestEcho">
  <stage name="Echo">
    <jobs>
      <job name="Echo">
        <tasks>
          <exec command="echo ${SOME_ENVIRONMENT_VARIABLE}">
          </exec>
        </tasks>
      </job>
    </jobs>
  </stage>
</pipeline>
<templates>

提前致谢!

3 个答案:

答案 0 :(得分:6)

是的,你可以!

您应该使用%SOME_ENVIRONMENT_VARIABLE%而不是$ {SOME_ENVIRONMENT_VARIABLE}(在 windows 代理上)。

我猜你正在使用Windows代理。 ThoughtWorks的&#39;文档以Linux为重点,这就是为什么他们的例子不适合你。

您可以在任务中使用所有Go Standard environment variables

您可以在以下位置设置环境变量:

  • 环境水平
  • 管道级别(覆盖环境级别)
  • 阶段级别(覆盖管道级别)

您可以在任务中使用所有这些环境变量:

<pipeline name="TestEcho">
  <stage name="Echo">
    <jobs>
      <job name="Echo">
        <tasks>
          <exec command="echo %SOME_ENVIRONMENT_VARIABLE%">
          </exec>
        </tasks>
      </job>
    </jobs>
  </stage>
</pipeline>

您可以在环境级别设置环境变量:

<environments>
  <environment name="SomeEnvironment">
    <environmentvariables>
      <variable name="SomeVariable">
        <value>SomeValue</value>
      </variable>
    </environmentvariables>
    <pipelines>
      <pipeline name="TestEcho" />
    </pipelines>
  </environment>
</environments>

您可以在管道级别设置环境变量:

<pipeline name="TestEcho">
  <environmentvariables>
    <variable name="SomeVariable">
      <value>SomeValue</value>
    </variable>
  </environmentvariables>
  <stage name="Echo">
    <jobs>
      <job name="Echo">
        <tasks>
          <exec command="echo %SomeVariable%">
          </exec>
        </tasks>
      </job>
    </jobs>
  </stage>
</pipeline>

您可以在阶段级别设置环境变量:

<pipeline name="TestEcho">
  <stage name="Echo">
    <jobs>
      <job name="Echo">
        <environmentvariables>
          <variable name="SomeVariable">
            <value>SomeValue</value>
          </variable>
        </environmentvariables>
        <tasks>
          <exec command="echo %SomeVariable%">
          </exec>
        </tasks>
      </job>
    </jobs>
  </stage>
</pipeline>

您可以覆盖环境变量:

<pipeline name="TestEcho">
  <environmentvariables>
    <variable name="SomeVariable">
      <value>Value1</value>
    </variable>
  </environmentvariables>
  <stage name="Echo">
    <jobs>
      <job name="Echo">
        <environmentvariables>
          <variable name="SomeVariable">
            <value>Value2</value>
          </variable>
        </environmentvariables>
        <tasks>
          <exec command="echo %SomeVariable%"><!-- Write Value2 -->
          </exec>
        </tasks>
      </job>
      <job name="Echo2">
        <tasks>
          <exec command="echo %SomeVariable%"><!-- Write Value1 -->
          </exec>
        </tasks>
      </job>
    </jobs>
  </stage>
</pipeline>

Source that helped me

答案 1 :(得分:2)

目前,这是不可能的,只能使用#{parameter_name}语法

引用参数

答案 2 :(得分:1)

是的,这是可能的。您只需将其作为自定义命令任务运行,使用/bin/bash作为命令,-c作为第一个参数告诉bash扩展参数。

所以你的管道配置看起来像这样:

<templates>
<pipeline name="TestEcho">
  <stage name="Echo">
    <jobs>
      <job name="Echo">
        <tasks>
          <exec command="/bin/bash">
            <arg>-c</arg>
            <arg>echo ${SOME_ENVIRONMENT_VARIABLE}</arg>
          </exec>
        </tasks>
      </job>
    </jobs>
  </stage>
</pipeline>
<templates>

在此处查看类似的内容:http://support.thoughtworks.com/entries/22628904-Custom-environment-variables-referencing-other-variables