【问题标题】:How to replace arbitrary nodes in config file using xpath under Octopus?如何在 Octopus 下使用 xpath 替换配置文件中的任意节点?
【发布时间】:2017-11-14 18:19:55
【问题描述】:

向有八达通经验的人提问。

这是关于非常基本的功能,在 Octopus 中似乎令人惊讶地缺少。它是关于使用 XPath 语法和 not Octopus 变量替换配置文件中的任意节点(顺便说一句,https://octopus.com/docs/deploying-applications/configuration-files 建议这是一个非常糟糕的解决方案,因为每次你都需要一个新版本需要替换配置文件中的新元素或属性)。

我可以编写一个命令行应用程序,它可以在一个小时左右完成这项工作,但是否可以将它与 Octopus 集成。例如。以某种方式为变量列表中存在的每个变量运行应用程序?

第二个问题,我需要将 XPath 表达式沿值存储在某处,可能是变量名,但是必须以某种方式对其进行编码。 也许将变量存储在 Octopus WebUI 文本文件中任意但可编辑的变量中?它到底有没有这样的功能?

如果您对此有任何解决方案,请您分享一下吗?

【问题讨论】:

  • 1) 八达通变量替换方法有什么问题,不适合您的使用? 2) 有一个新版本来更改配置文件是绝对正确的。在您看来,这样做的缺点是什么?附言请标记我,以便我收到您的回复通知:)
  • @gvee:嗯,有几件基本的事情:首先,限制在 Octopus 变量页面中输入的变量数量。这个页面太可怕了,它甚至不值得一个 alpha 版本,但它的版本是 3.17:没有导入/导出,没有组处理,没有默认范围,键盘处理被破坏,鼠标焦点消失,没有更改历史记录,没有排序...因此,使用 XPath(或任何类似的东西)您只能更改需要更改的内容,而无需修改项目并发布它。尽管有很多人抱怨,但我认为该页面不会很快改善。
  • 变量编辑器在 v4 中得到了改进
  • 每次创建发布时都会捕获变量的状态,您可以在 VariableSets 表的 JSON 数据中看到这些值。
  • @benPearce:在版本 4 中,您甚至无法调整列宽(原文如此!),因此除非您将浏览器大小调整为多个屏幕,否则无法看到变量的全名。更糟糕的是,省略号也丢失了,因此很难找出名称是否被缩短。没有多变量编辑,没有导入,没有自定义排序,没有默认范围,没有逻辑分组,没有用于审计目的的历史记录。依此类推。新的用户界面非常可怕。如果您将其称为改进,那么坦率地说,我不知道该说什么。

标签: xpath config octopus-deploy


【解决方案1】:

假设您有一个App.config 文件(我将要描述的内容同样适用于Web.config 文件)。在解决方案的旁边创建一个App.Release.config 文件。确保此文件包含在您的包中,其名称已更改为与 App.config 文件的名称相对应。例如如果 App.config 已经变成MyApp.exe.config,那么它需要是MyApp.exe.Release.config

在该文件中,您使用XML document transform syntax(它基于 XML 和 XPath,非常容易上手)来指定您希望如何更改配置文件。使用 Octopus 变量作为您需要的值的占位符。

在您的 Octopus 项目流程中,您可能有一个类似“部署包”的步骤。在此顶部,“保存”按钮旁边是“配置功能”链接按钮。 (并非所有步骤都有这个......你需要使用一个这样做的。)取消选中“配置变量”(阅读说明:我发现这个功能不太可能对我有帮助),确保“配置转换”是勾选,并勾选“替换文件中的变量”,按OK。

设置“替换文件中的变量”以替换 MyApp.exe.Release.config 文件中的变量。如果您没有使用我建议的*.Release.config 名称,那么您需要配置“配置转换”以应用您的转换文件。不用担心顺序 - 替换将在转换之前发生。

关于这一点“每次你需要替换配置文件中的新元素或属性时,它都需要一个新版本”:如果你能够编写 XDT 以保证未来的发展对于您将来所做的所有更改,太好了。但如果不是,XDT 配置文件将在配置文件旁边提醒您,如果您更改配置文件(顺便说一句,这意味着您需要创建一个新版本),那么您可能想要更改XDT 文件也是如此。

我还喜欢针对配置文件和 XDT 进行单元测试,以验证配置文件中的每个 appSetting、connectionString 和端点是否由 XDT 配置。因此,如果我添加一个新的,而忘记添加 XDT,单元测试将通过失败提醒我。每个测试都有一个排除列表,我可以在其中添加我故意不配置的排除。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2011-08-25
    相关资源
    最近更新 更多