2016-11-11 120 views
0

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

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

有没有一种方法,我可以添加一个默认端口这里(25555说,这样开发人员可以使用它总是没有替换#{端口}),但仍然指定OctopusDeploy这个特定的端口已被修改? (我正在使用多租户部署)

回答

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中的一个变换。当你构建和打包你的代码时,只要你使用“release”配置,转换就会触发,硬编码值将被你的构建所取代并被添加到包中。

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

+0

谢谢,我用app.config转换自己和OctopusDeploy的替代变量.. – Narayana

0

八达通支持的变量替换(文档:http://docs.octopusdeploy.com/display/OD/Variable+Substitution+Syntaxifunless

这意味着你可以申请一个默认的相对容易。

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

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

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

#{unless port}25555#{/unless} 

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

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