【问题标题】:TFS Build Definition with multiple builds of the same project and app.config changes in betweenTFS 构建定义与同一项目的多个构建和 app.config 之间的变化
【发布时间】:2018-08-07 12:36:31
【问题描述】:

我正在 TFS 上进行构建定义。当前处理此项目问题的方法是触发构建,获取已部署的设置文件,然后更改 app.config 中的设置(多个 regions要使用的产品,它只是一个改变的值),并且手动触发另一个构建。这对每个区域重复。 我正在尝试自动化这个过程,我的方法是使用 Powershell 内联脚本构建步骤来更改 app.config 中的值并重复“构建解决方案 ”和“复制发布工件”构建步骤。我得到的错误是:

构建 X 的工件安装程序已经存在

有没有更好的方法来解决这个问题?我不太熟悉 TFS 构建定义的可能性。

编辑:

构建现在运行,问题是 Powershell 脚本似乎没有生效,但我已经在其他地方对它进行了测试,它可以编辑文件。检查放置位置,有多个相同的设置文件。是不是需要check out再check in之类的?

这是脚本:

(get-content $(Build.SourcesDirectory)\Source\projectname\app.config) |

Foreach-Object {$_ -replace "$ServerRegionCE","$ServerRegionUK"}  |

set-content $(Build.SourcesDirectory)\Source\projectname\app.config

【问题讨论】:

  • 更好的方法是看看 devops 实践可以为您提供什么。这意味着: 1. 在您的 app.config 文件中构建一个包含无用值的包。 2. 使用“OctopusDeploy”之类的发布工具进行部署,该工具将根据您要部署的位置替换 app.config 中的值。
  • 我意识到有一些扩展,比如 Octopus,可以非常有效地解决这个问题。我试图在不使用额外 TFS 扩展的情况下找到一个简单的解决方案,因为我无法在不咨询管理员的情况下添加它们。我认为只使用 powershell 脚本会更容易,因为更改非常小。

标签: git tfs azure-devops


【解决方案1】:

问题是Powershell脚本似乎没有生效

根本原因是被引用变量的语法不正确。

在 PowerShell 脚本中,您需要使用变量 $env:BUILD_SOURCESDIRECTORY 而不是 $(Build.SourcesDirectory)

它也适用于自定义变量。因此,如果您在构建过程中定义了变量$ServerRegionCE$ServerRegionUK,那么您可以像下面的格式一样使用它们:

$env:ServerRegionCE$env:ServerRegionUK

详情请见Working with variables

所以,试试下面的脚本:

(get-content $env:BUILD_SOURCESDIRECTORY\Source\projectname\app.config) |

Foreach-Object {$_ -replace "$env:ServerRegionCE","$env:ServerRegionUK"}  |

set-content $env:BUILD_SOURCESDIRECTORY\Source\projectname\app.config

【讨论】:

  • 我明白了,我偶然发现了这种语法,但我可以发誓它在测试项目中与我的语法配合使用。无论如何,我现在使用“复制文件”构建步骤让它工作,所以我在每次构建之前复制所需的 app.config 文件。您会说 powershell 变体是更好的解决方案吗?
  • @tweedledum11 不,只是解决您在问题中提到的问题。解决方案修改文件或将文件复制到源目录以替换上一个具有相同效果。 “复制文件”更容易..好吧,您可以发布您的解决方案作为答案,然后接受它。这可能对阅读此主题的其他社区成员有所帮助。
  • 我将在今天某个时候更新我的问题,并在您更新的脚本旁边提供我的解决方案,无论如何感谢您的帮助!在此 tfs 构建定义中重命名已部署的设置文件的问题是否需要一个全新的问题?
  • @tweedledum11 是的,任何新话题你最好创建一个新线程来跟踪新问题。
【解决方案2】:

更新解决方案: 我设法通过扔掉那个powershell脚本来做我想做的事。 Andy Li-MSFT 发布它的方式应该可以工作,但我添加了一个“复制文件”构建步骤,该步骤在构建解决方案之前运行。我在源代码中创建了文件夹,每个服务器区域特定的文件夹都包含相应的 app.config 以在项目构建和部署之前复制到项目源中。

看起来像这样:

UnitedKingdom_Config 文件夹,在这种情况下,只有 app.config,如果还有其他文件,您显然需要在 Contents 字段中指定文件。

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 2017-01-07
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多