即使构建未发布工件,也会触发发布

时间:2019-05-23 13:39:32

标签: azure-devops continuous-integration build-pipeline

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

由于我们的源存储库是本地托管的Git,因此我们没有使用路径过滤器的好处,因此我们诉诸于使用Powershell任务来确定是否应使用自定义条件跳过所有即将到来的任务(在this问题)。

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

Skipped Azure DevOps build example

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

对于相应的构建管道,我们的发布管道已设置为在源类型 build artifact上触发,并且默认版本参数设置为{{1} }。

即使跳过了发布工件任务,释放管道仍可能触发并尝试部署空工件的可能性如何?

1 个答案:

答案 0 :(得分:0)

假设您在“发布”管道中启用了“继续交付”,则此选项与构建工件无关。此选项意味着在构建成功时将触发Release(不管他是否有工件,都可以)。

这就是为什么在每次构建后都会开始发布新版本。

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

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

Write-Host "##vso[build.addbuildtag]test-tag"