gpt4 book ai didi

git - 防止 pull 请求构建触发持续部署触发器 Azure DevOps 服务器

转载 作者:行者123 更新时间:2023-12-02 02:41:57 24 4
gpt4 key购买 nike

TL; 博士

我们希望通过 Continuous deployment trigger 阻止 Azure Devops 中的 Pull Request 分支策略构建触发发布。机制。

问题

我们目前是 Azure DevOps Server 2019 版本 Dev17.M153.3 的用户

我们同时使用构建和发布管道。当用户提交 pull 请求时,我们有一个 Branch Policy将构建排队以确保代码编译和任何测试通过。此构建的完成会触发 Continuous deployment trigger我们已经在相应版本的 Build 工件上进行了配置 - 这对我们来说不是理想的行为。

我们的理想行为是让分支策略构建通过 pull 请求排队,而不触发 Continuous deployment trigger因此不要排队发布。我们只想通过 Continuous deployment trigger 触发发布如果我们手动排队构建。我们永远不希望在 Pull Request 上构建分支策略时发生这种情况。 .

我们已经尝试使用 Build branch filtersContinuous deployment trigger ,但没有运气。我试过使用 Exclude 设置它和设置 Build branchpull/* , refs/pull/*merge但是这些过滤器没有任何运气,发布仍在排队中。

我想知道是否有更好的方法来处理这种情况,或者是否可以将其他过滤器添加到 Continuous deployment trigger减少不需要的发布排队。

最佳答案

我们已经确定目前没有针对此问题的“最佳解决方案”,以下是一些替代方案。

简单的解决方法

  • 将您当前的 PR 策略构建定义与发布定义取消链接并创建新的构建定义(或克隆退出)。将此新构建定义链接到您的版本并手动运行它。
  • 从您的发布定义中删除持续部署,并从您完成的构建中手动创建您的发布。
  • 使用继续部署并将其设置为某个分支。那么你的部署只会在 PR 完成后触发(如果你为你的build设置了 CI)。

  • enter image description here

    发布变量和自定义条件(单个工件)

    如果您的版本中只有一个工件,您可以使用 Build.SourceBranchName 跳过作业级别的任务。 release variable :

    enter image description here

    当变量表达式解析时,如果 Build.SourceBranchName变量等于 merge它跳过以下所有任务:

    enter image description here

    发布变量和自定义条件(多个工件)

    最后,如果您在发布中使用多个工件,您仍然可以完成上述行为,尽管您需要使用 PowerShell 脚本做一些额外的工作。

    您使用 PowerShell 脚本查看 RELEASE_TRIGGERINGARTIFACT_ALIAS环境变量然后查看对应的 RELEASE_ARTIFACTS_<RELEASE_TRIGGERINGARTIFACT_ALIAS>_SOURCEBRANCHNAME多变的。

    您的环境变量(在发布的 Initialize Job 步骤中可见)如下所示。
    ...
    [RELEASE_ARTIFACTS_PROJECT1_SOURCEBRANCHNAME] --> [master]
    ...
    [RELEASE_ARTIFACTS_PROJECT2_SOURCEBRANCHNAME] --> [merge]
    ...
    [RELEASE_ARTIFACTS_PROJECT3_SOURCEBRANCHNAME] --> [master]
    ...
    [RELEASE_TRIGGERINGARTIFACT_ALIAS] --> [PROJECT2]
    ...

    这在标准发布 View 中也可见。

    enter image description here

    enter image description here

    最终我们想看看触发工件的源分支名称变量是否设置为 merge , 如果是这样,我会通过 Control Options Custom conditions 使释放短路并跳过所有以下任务.这不是一个理想的情况,因为 Pull Request 构建仍然会触发不必要的发布,但是,它会阻止任何实际的发布操作发生。

    PowerShell 任务

    下面是我目前在第一个任务中使用的 PowerShell
    # Use the triggering artifact alias and constructing the name of the variable that will ultimately get us the source branch that triggered the release
    $SrcBranchName = "RELEASE_ARTIFACTS_$(('$(RELEASE.TRIGGERINGARTIFACT.ALIAS)' -replace '(^\s+|\s+$)','' -replace '\s+','_').ToUpper())_SOURCEBRANCHNAME"

    # Get the environment variable that holds the name of the source branch
    $SrcBranchName = Get-Item env:$SrcBranchName | Select-Object -ExpandProperty Value
    Write-Host "SrcBranchName: $SrcBranchName"

    if ($SrcBranchName -eq "merge") {
    Write-Host "Release caused by a PR - no further steps will run."
    }

    # Set an environment variable with the source branch name for use in a Custom Conditions Control
    Write-Host "##vso[task.setvariable variable=TriggeringArtifactSourceBranchName;]$SrcBranchName"

    自定义条件

    然后对于我在每个任务中的自定义条件,我使用以下如果 TriggeringArtifactSourceBranchName 跳过任务设置为 merge .
    and(succeeded(), ne(variables['TriggeringArtifactSourceBranchName'], 'merge'))

    关于git - 防止 pull 请求构建触发持续部署触发器 Azure DevOps 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940407/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com