Octopus Web.config 转换为客户端端点地址

Octopus Web.config transforms for client endpoint address

我有一个 Web 项目使用了两个服务端点,这些服务端点位于客户端下的 Web.config 文件中 --> 端点 --> 地址部分

我在每个八达通变量部分找到了以下内容,但似乎找不到任何关于如何像通常那样使用实际变量来处理更改的参考

我正在使用 Octopus 的 webui

http://{server-name}/app#/projects/{project-name}/variables

variable-substitution-syntax

我尝试像这样分配变量,但值从未更新 原始条目如下所示

<endpoint address="http://services-test.example.com/test.svc/soap" binding="basicHttpBinding" bindingConfiguration="soap" contract="test.service" name="soap" />

Name                    Address                         Instance   
Endpoint[A].Address     test-service-a.example.com      1
Endpoint[B].Address     test-service-b.example.com      2

这是否可以使用八达通变量实现? (我知道可以使用常规 Web.config 转换来完成,因为我们已经在这样做了)。

如果可能,

的正确替换值是多少

endpoint address

是,我将如何为多个不同的端点地址完成此操作?

听起来你已经完成大部分工作了。如果它已经在使用您的 Web.config 转换,那么您需要做的就是用变量替换标记替换转换中的值。

例如:Web.Release.Config

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.serviceModel>
    <client>
      <endpoint address="http://#{Server1}/test.svc/soap" name="x1"
                xdt:Locator="Match(name)" xdt:Transform="SetAttributes(address)" />
      <endpoint address="#{Endpoint2}" name="x2"
                xdt:Locator="Match(name)" xdt:Transform="SetAttributes(address)" />
    </client>
  </system.serviceModel>
</configuration>

当然这里有很多选择。

对于文件名,您可以坚持使用默认约定 'Web.Release.config' 或使用 'Web.[Environment].config' 或使用自定义的东西。我们使用 'Web.Octopus.Config' 这样它就不会被任何其他进程获取。

More on naming transforms here: https://octopus.com/docs/deploying-applications/configuration-files#Configurationfiles-Namingconfigurationtransformfiles

More on custom transforms (Web.Octopus.com) here: https://octopus.com/docs/deploying-applications/configuration-files#Configurationfiles-AdditionalConfigurationTransforms

对于变量,您可以只为服务器定义一个变量 (name=x1),这更简单,或者只是将整个地址放在一个变量中,从而为 Octopus 提供更多控制权 (name=x2)。

关键部分是将变量替换标记放入配置中。 Octopus 运行 首先对配置文件进行变量替换,然后 运行 进行转换。这意味着第一遍将替换 Web.Release.Config 中的标记,然后 Octopus 将 运行 转换为 Web.config

希望对您有所帮助。