允许 PR 构建验证构建而不发布工件

Allow PR Build Validation builds without publishing artifacts

我正在尝试在我们的主分支上为 PR 设置一些构建验证(我们正在使用 Git 和 VSTS)。我添加了一些构建策略以根据更改的文件启动各种构建。对于某些背景,我们在流程的早期创建 PR,以便我们可以跟踪更改并在我们的功能分支开发时添加评论。

现在,我希望这些构建达到 运行 并成功,以便完成 PR,但是,我不希望发布这些构建的输出(工件)。我们的发布查看要部署的最新构建工件,在这种情况下,最新构建工件将来自 PR。如果我们确实允许发布来自 PR 的这些构建工件,那么我们将发布功能分支代码(来自 PR)到我们的主站点,这是不可取的(我们有一个单独的发布来处理我们的功能分支站点)。

本质上,在进行 PR 时,我只想 运行 构建以确保一切都符合标准,然后在完成后丢弃构建。

除了专门为 PR 验证创建构建定义之外,我不确定我还能做什么。我用谷歌搜索并四处询问,但我要么没有问正确的问题,要么答案并不像我希望的那么简单。

希望我提供了足够的详细信息来解释我的问题。

TL;DR

我如何运行在 PR 上构建验证而无需发布选择和部署验证构建产生的构建工件?

编辑(更多详细信息)

我尝试向发布任务添加条件(也尝试将发布置于一个阶段并有条件地 运行 进行)。然而,当我去制作一个新版本时,它仍然看到 运行 的构建定义。现在,我想如果我尝试发布该构建定义,它会失败,因为没有创建工件。但是我什至不想在发布时看到构建定义(不想不小心 select 它)。

您可以将 Publish Artifact 任务放在构建定义的末尾,然后使用 'Run this phase' 和 'Custom condition using variable expressions'。您也可以按照丹在下面的评论中建议的那样在任务级别执行此操作。

not(eq(variables['Build.Reason'], 'PullRequest'))

https://docs.microsoft.com/en-us/vsts/pipelines/process/conditions?view=vsts

您可以遵循多个选项来跳过发布工件以进行 PR 构建验证。

选项 1:使用单独的构建定义进行 PR 构建验证

您可以克隆当前构建定义,并使用克隆的构建定义单独进行 PR 构建验证。

在克隆的构建定义中,您可以删除不希望 PR 构建验证执行的任务(例如删除 Publish Build Artifacts 任务)。

选项 2:使用客户条件跳过执行 Publish Build Artifacts 任务

或者您可以使用 custom conditions 来有条件地 运行 执行您想要的任务(正如 Calidus 和 Daniel 提到的那样)。

比如为Publish Build Artifacts任务添加以下自定义条件(如果构建是为了PR验证,则不执行任务):

ne(variables['Build.Reason'], 'PullRequest')