我尝试使用OctopusDeploy在部署期间替换#{port}变量。如果我直接将它添加到我的App.Config中,我可以这样做:
<services>
<service name="SampleService" behaviorConfiguration="ServiceBehaviour">
<host>
<baseAddresses>
<add baseAddress="http://localhost:#{port}/SampleService/" />
</baseAddresses>
</host>
..
</service>
有没有办法可以在这里添加一个默认端口(例如25555,以便开发人员可以在不更换#{port}的情况下使用它),但是仍然指定OctopusDeploy必须修改这个特定的端口? (我使用多租户部署)
答案 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)
章鱼在变量替换中支持if
和unless
(文档: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。