5

我们正在测试 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>

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

4

2 回答 2

7

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

<add key="Octopus.Environment.Name" value="..." />

然后value将在部署时设置。

您尝试使用其他方法当然是合理的,但不是 Octopus 当前如何处理配置文件。

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

于 2014-01-23T02:42:29.613 回答
2

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

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

#{OctopusEnvironmentName}

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

于 2014-01-22T16:14:16.250 回答