【问题标题】:Release is triggered even though build does not publish artifact即使构建没有发布工件,也会触发发布
【发布时间】:2019-10-10 02:33:53
【问题描述】:

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

因为我们的源存储库是本地托管的 Git 存储库,所以我们没有使用路径过滤器的优点,因此我们求助于使用 Powershell 任务来确定是否应该跳过所有即将执行的任务,使用自定义条件(在this所以问题)。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 您提供的解决方案确实有效,但我确实需要使用artifact filters 选项。如果没有它(所以只能使用Latest from the build pipeline [...] 选项),仍然会部署版本。指定artifact filters 后,发布正确停止并显示消息Artifact conditions not met
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2011-02-11
    • 2015-02-13
    相关资源
    最近更新 更多