上周,我们的团队决定将所有单独的 .NET 项目转移到一个解决方案中。因为我们已经在为每个项目使用带有单独构建管道的 Azure DevOps,所以我们研究了仅在特定项目发生更改时才触发构建的可能性。这是为了防止构建代理在每次提交时重建整个解决方案。
因为我们的源存储库是一个本地托管的 Git 存储库,所以我们没有使用路径过滤器的好处,所以我们使用了一个 Powershell 任务来确定是否应该跳过所有即将到来的任务,使用自定义条件(在这个SO 问题中解释)。
现在,在每次提交时,都会触发所有构建,但是如果它们应该继续构建并且(更重要的是)它们是否应该在最后发布构建工件,则构建会自行解决。这种跳过构建的示例如下:
但是,每次这样的构建“成功”时,都会创建一个新的工件,即使跳过了发布工件任务。问题是当构建管道创建工件时,我们所有的发布管道都会被触发。因此,每次如上所示跳过构建时,发布管道都会触发并尝试部署工件。但它失败了,因为它用于部署的工件并不真正存在(看起来它是空的,并且构建管道实际上并没有在摘要选项卡上提及工件),因此对工件的任何操作在发布中都会失败管道。
我们的发布管道设置为在源类型 build artifact
上触发,对于相应的构建管道,默认版本参数设置为latest
.
即使跳过发布工件任务,发布管道仍会触发并尝试部署空工件,这怎么可能?