在构建管道期间覆盖发布配置文件的发布文件夹 (url)

Posted

技术标签:

【中文标题】在构建管道期间覆盖发布配置文件的发布文件夹 (url)【英文标题】:Override publish folder (url) of publish profile during the build pipeline 【发布时间】:2020-04-03 20:32:06 【问题描述】:

我们有一个包含多个项目的 ASP.Net 解决方案。每个项目都有 build.pubxml 和唯一的文件夹路径。

例如:

在项目Test 中,build.pubxml 中有这一行:

<publishUrl>C:\publish\SolutionName\Test</publishUrl>

在项目Exam 中,我们在build.pubxml 中有这一行:

<publishUrl>C:\publish\SolutionName\Exam</publishUrl>

在带有此参数的 MSBuild 步骤的构建管道中(在 TFS 中):

/p:PublishProfile=build.pubxml

在构建之后,我们得到了 2 个文件夹 - TestExam 中的 C:\publish\SolutionName

到目前为止一切顺利。

问题是我们的分支很少,我们想为每个分支分开发布文件夹,所以我们为每个分支添加了.pubxml,并在构建管道中指定了正确的。但是 make 在创建的每个新分支上都需要做很多工作,并且可能会导致错误。

我们尝试在 MSBuild 中传递 /p:publishUrl=C:\publish\BranchName,但随后我们得到了一个文件夹,其中包含 TestExam 的所有内容,而不是两个文件夹。

想法是每个项目只有一个 .pubxml 文件,并在管道中传递值,例如:

<publishUrl>C:\publish\$(Parameter)\Test</publishUrl>

并且在构建中我们会根据分支传递参数。

有可能做这样的事情吗?

【问题讨论】:

我假设您正在使用调用 msbuild 进行构建和部署的 VS 构建任务。并且 msbuild 可以接受命令行中的属性,即使这些属性未在 csproj 中定义,请参阅here。 【参考方案1】:

有可能做这样的事情吗?

答案是肯定的。由于 msbuild 在命令行中接受 Global Properties。如果我们在build.pubxml 中定义一个属性,例如&lt;publishUrl&gt;C:\PublishFolders\$(BranchID)\xxx(Test,Exam...)&lt;/publishUrl&gt;,那么我们可以简单地在 msbuild 参数中传递值,如下所示:

然后我们将在C:\PublishFolders\NewTest 下获得TestExam 文件夹。我们也可以选择将管道预定义变量传递给命令,例如:/p:BranchID=$(Build.SourceBranch)...

这适用于在本地机器、tfs 和 Azure Devops 管道中构建。希望以上所有帮助:)

【讨论】:

谢谢@Lance,我会尽快检查并更新:) 不客气,如果有任何更新,请随时告诉我:)

以上是关于在构建管道期间覆盖发布配置文件的发布文件夹 (url)的主要内容,如果未能解决你的问题,请参考以下文章

发布构建期间配置文件中的 Maven 依赖项

在天蓝色管道发布期间更新 SSAS 表格连接字符串

Azure 构建管道 yaml 模板参考

自托管 azure 代理 - 如何配置管道以共享相同的构建文件夹

Azure Devops 构建管道 - 未发布文件

Azure ML:在模型部署期间包括其他文件