TFS构建定义具有相同项目的多个构建,并且app.config之间有变化

时间:2018-08-07 12:36:31

标签: git tfs azure-devops

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

工件X的Artifact安装程序已经存在。

是否有更好的方法?我对TFS Build定义的可能性不太熟悉。

编辑:

该构建现在可以运行了,问题在于Powershell脚本似乎没有生效,但是我已经在其他编辑文件的地方对其进行了测试。检查放置位置,有多个相同的安装文件。是否需要将其检出并再次检入?

这是脚本:

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

更新解决方案: 通过抛弃该Powershell脚本,我设法做到了自己想要的。 Andy Li-MSFT发布它的方式应该可以使用,但是我改为添加了一个“复制文件”构建步骤,该步骤将在构建解决方案之前运行。我在源代码中创建了文件夹,每个服务器区域特定的文件夹都包含相应的app.config,要在构建和部署项目之前将其复制到项目源中。

它看起来像这样: enter image description here

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