OctopusDeploy中的可变替换

时间:2016-11-11 12:23:05

标签: octopus-deploy

我尝试使用OctopusDeploy在部署期间替换#{port}变量。如果我直接将它添加到我的App.Config中,我可以这样做:

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

有没有办法可以在这里添加一个默认端口(例如25555,以便开发人员可以在不更换#{port}的情况下使用它),但是仍然指定OctopusDeploy必须修改这个特定的端口? (我使用多租户部署)

3 个答案:

答案 0 :(得分:1)

您可以将配置文件的XML转换功能与Octopus deploy结合使用。

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

或者This blog包含扩展项目的说明,以便您可以在app.config文件中使用web.config文件的转换功能。

所以你可以通过几种方式做到这一点。在“base”app.config中使用硬编码值,然后将Octopus变量作为app.release.config中的变换。在构建和打包代码时,只要使用“发布”配置,转换就会触发,硬编码值将被构建替换并添加到包中。

或者你可以反过来做,在app.debug.config中使用硬编码值,在app.config中使用Octopus变量。当开发人员运行调试版本时,Variable将被debug.config中的值替换。

答案 1 :(得分:1)

章鱼在变量替换中支持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}

答案 2 :(得分:0)

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

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

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