OctopusDeploy 中的变量替换

Variable Substitution in OctopusDeploy

我正在尝试使用 OctopusDeploy 在部署期间替换 #{port} 变量。如果我直接将它添加到我的 App.Config 中,我能够做到这一点,如下所示:

<services>
  <service name="SampleService" behaviorConfiguration="ServiceBehaviour">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:#{port}/SampleService/" />
      </baseAddresses>
    </host>
    ..
  </service>

有没有办法可以在这里添加一个默认端口(比如 25555,这样开发人员就可以使用它而无需总是替换 #{port}),但仍然向 OctopusDeploy 指定必须修改这个特定端口? (我正在使用多租户部署)

您可以结合 Octopus 部署使用配置文件的 XML 转换功能。

Octopus 本身可以 运行 这些转换。当你编译代码时,app.config 被重命名为 [applicationName].exe.config 如果你创建一个名为 [applicationName].exe.release.config 的文件并将其添加到你的包中,那么你可以使用与通常相同的转换样式在该文件中使用 web.config 转换。如果 Octopus 看到一个名为 *.release.config 的文件,它将 运行 在部署过程中进行任何转换。

另外,This blog 包含扩展项目的说明,因此您可以在 app.config 个文件中使用 web.config 个文件的转换功能。

因此,您可以通过多种方式做到这一点。在 "base" app.config 中设置硬编码值,然后在 app.release.config 中设置八达通变量作为转换。当您构建和打包代码时,只要您使用 "release" 配置,转换就会触发,硬编码值将被您的构建替换并添加到包中。

或者你可以反过来做,在 app.debug.config 中有硬编码值,在 app.config 中有八达通变量。当开发人员 运行 进行调试构建时,变量将被 debug.config.

中的值替换

Octopus 在变量替换中支持 ifunless(文档:http://docs.octopusdeploy.com/display/OD/Variable+Substitution+Syntax

这意味着您可以相对轻松地应用默认值。

首先,如果变量存在,则使用它:

#{if port}#{port}#{/if}

其次,如果变量不存在,使用您的默认值:

#{unless port}25555#{/unless}

所以只需将它们组合在一起:

#{if port}#{port}#{/if}#{unless port}25555#{/unless}

使用项目变量模板创建变量时,您可以选择提供默认值。 Check the image in the link - Shows Variable template with default value

除非被覆盖,否则默认值会在部署时被替换。

因此在这种情况下,您可以创建一个 #{port} 变量,将参考变量添加到项目变量模板,默认值为 25555,除非被覆盖,否则在部署时将始终替换为 25555。