【问题标题】:am i able to reference environment variables in go templates?我可以在 go 模板中引用环境变量吗?
【发布时间】:2014-04-02 09:14:20
【问题描述】:

尝试从 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>

提前致谢!

提姆

【问题讨论】:

  • 对不起,伙计们。错误的GO。使用 ThoughtWorks 的 GO 产品构建管道。

标签: thoughtworks-go


【解决方案1】:

是的,你可以!

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

我猜你正在使用 Windows 代理。 Thoughtworks 的文档以 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

【讨论】:

  • 汤姆,你能告诉我更多吗?你尝试了什么?你的管道怎么样?你是如何设置环境变量的?
  • 最后我发现我能够使用 ${VAR} 或 $VAR (但不是你建议的 %VAR% )引用环境变量 - 但不能在管道的不同阶段之间,所以无论如何,这对我没有多大好处!
  • @TomMcIntyre,我添加了一些关于如何设置环境变量的细节。你能检查一下你的配置是否相似吗?
  • @TomMcIntyre,我打赌你使用的是 linux 代理。我建议的语法仅适用于 Windows。我很确定 ${SOME_ENVIRONMENT_VARIABLE} 应该可以在 Linux 上运行。
【解决方案2】:

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

【讨论】:

  • 感谢您的回答。是的,很难发现这一点!到底这种情况并没有给我们带来太多的痛苦。虽然它确实给我带来了很多痛苦,试图让它发生!
  • 你错了。这是可能的,使用 %environment_variable_name% 语法。
【解决方案3】:

是的,这是可能的。您只需要将其作为自定义命令任务运行,使用/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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多