1

上周,我们的团队决定将所有单独的 .NET 项目转移到一个解决方案中。因为我们已经在为每个项目使用带有单独构建管道的 Azure DevOps,所以我们研究了仅在特定项目发生更改时才触发构建的可能性。这是为了防止构建代理在每次提交时重建整个解决方案。

因为我们的源存储库是一个本地托管的 Git 存储库,所以我们没有使用路径过滤器的好处,所以我们使用了一个 Powershell 任务来确定是否应该跳过所有即将到来的任务,使用自定义条件(在这个SO 问题中解释)。

现在,在每次提交时,都会触发所有构建,但是如果它们应该继续构建并且(更重要的是)它们是否应该在最后发布构建工件,则构建会自行解决。这种跳过构建的示例如下:

跳过 Azure DevOps 构建示例

但是,每次这样的构建“成功”时,都会创建一个新的工件,即使跳过了发布工件任务。问题是当构建管道创建工件时,我们所有的发布管道都会被触发。因此,每次如上所示跳过构建时,发布管道都会触发并尝试部署工件。但它失败了,因为它用于部署的工件并不真正存在(看起来它是空的,并且构建管道实际上并没有在摘要选项卡上提及工件),因此对工件的任何操作在发布中都会失败管道。

我们的发布管道设置为在源类型 build artifact上触发,对于相应的构建管道,默认版本参数设置为latest.

即使跳过发布工件任务,发布管道仍会触发并尝试部署空工件,这怎么可能?

4

1 回答 1

2

我假设您在 Releases 管道中启用了 Continues Delivery,此选项与构建工件无关此选项意味着构建成功时将触发 Release(无论他是否有工件)。

所以这就是为什么每次构建后都会启动一个新版本的原因。

作为解决方法,您可以在构建中添加仅在存在工件时添加“构建标签”的任务,并且在发布工件选项中,Latest您可以选择Latest from the build pipeline default branch with tags并指定您在构建中放置的标签,而不是选择。
另一个选项是在“阶段”中单击触发器,然后将其配置为“发布后”,因此启用“工件过滤器”并在那里指定构建标签。

如何添加构建标签?使用以下命令添加 PowerShell 任务:

Write-Host "##vso[build.addbuildtag]test-tag"
于 2019-05-23T13:56:57.720 回答