【问题标题】:How to specify Octopus built-in variable names in an XML configuration file?如何在 XML 配置文件中指定 Octopus 内置变量名称?
【发布时间】:2014-02-12 16:26:51
【问题描述】:

我们正在测试 Octopus Deploy,因此我们制作了一个示例 web.config 文件,我们在不同的环境中安装和转换了该文件。 web.config 转换和自定义变量的使用工作正常,但我无法替换内置的 Octopus 变量。以下是 web.config 中 XML 部分的示例:

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="environmentTransform" value="" />
    <add key="EnvironmentVariable1" value="$OctopusEnvironmentName" />
    <add key="EnvironmentVariable2" value="$(OctopusEnvironmentName)" />
    <add key="EnvironmentVariable3" value="$(Octopus.Environment.Name)" />
    <add key="EnvironmentVariable4" value="$Octopus.Environment.Name)" />
    <add key="EnvironmentVariable5" value="$OctopusParameters[&quot;Octopus.Environment.Name&quot;]" />
    <add key="MachineVariable1" value="$Octopus.Machine.Name" />
    <add key="MachineVariable2" value="#(Octopus.Machine.Name)" />
    <add key="MachineVariable3" value="#OctopusMachineName" />
    <add key="CustomVariable" value="CustomVariable" />
  </appSettings>

这里是 web.Dev.config,以环境命名:

  <appSettings>
    <add key="environmentTransform" value="Dev" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
  </appSettings>

结果如下:

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="environmentTransform" value="Dev" />
    <add key="EnvironmentVariable1" value="$OctopusEnvironmentName" />
    <add key="EnvironmentVariable2" value="$(OctopusEnvironmentName)" />
    <add key="EnvironmentVariable3" value="$(Octopus.Environment.Name)" />
    <add key="EnvironmentVariable4" value="$Octopus.Environment.Name)" />
    <add key="EnvironmentVariable5" value="$OctopusParameters[&quot;Octopus.Environment.Name&quot;]" />
    <add key="MachineVariable1" value="$Octopus.Machine.Name" />
    <add key="MachineVariable2" value="#(Octopus.Machine.Name)" />
    <add key="MachineVariable3" value="#OctopusMachineName" />
    <add key="CustomVariable" value="Value for maeaint01" />
  </appSettings>

如您所见,章鱼变量没有被替换。知道为什么吗?

【问题讨论】:

    标签: xml web-config octopus-deploy


    【解决方案1】:

    Octopus 的配置文件变量替换仅适用于设置key,而不是值。如果您创建如下设置:

    &lt;add key="Octopus.Environment.Name" value="..." /&gt;

    那么value 将在部署时设置。

    您尝试使用其他方法当然是合理的,但目前 Octopus 与配置文件的工作方式并非如此。

    我们在 2.0 中通过新的解析器和新功能(#{if ...#{each 等)增强了我们的变量替换处理 - 您的问题启发了我起草 this proposal 可能更好地解决这种用法.

    【讨论】:

    • 感谢您的回答。现在我明白了。虽然这肯定有效,但我发现替换“值”(实际上是任何)属性的可能性更灵活,所以如果可以实现它会很棒。在“key”属性中使用 Octopus 变量名会在源代码中拖拽 Octopus 变量名,我宁愿避免。
    • 谢谢 - 下面@Declan McNulty 的建议显示了如何使用自定义变量为 Octopus 变量起别名。 (+1 德克兰 :))
    • 是的,这就是我们目前决定这样做的方式。谢谢!
    • 这在即将发布的 Octopus Deploy 2.3 版本中实现:octopusdeploy.com/blog/variable-substition-in-files
    【解决方案2】:

    我发现我的 .config 文件不会选择内置变量自定义变量。

    您可以在章鱼仪表板中设置名为 EnvironmentVariable1 的变量并将其值设置为

    #{OctopusEnvironmentName}
    

    这会将您配置中的 EnvironmentVariable1 节点转换为您当前部署到的环境名称。

    【讨论】:

    • 感谢您的建议。是的,这是一种解决方法,但是以直接的方式使用 Octopus 变量会很好。
    • 您是否能够让您的自定义变量直接在 web.config 中工作?
    • 它们在 web.config 中。其他变量有效,但不是内置 Octopus。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2023-03-13
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多