【问题标题】:Devops Pull Request workflow validationsDevops 拉取请求工作流验证
【发布时间】:2020-05-28 12:07:47
【问题描述】:

我们正在使用 Azure devops,每个任务的工作流如下:

  1. 任务分支到发布分支
  2. 然后发布分支到master

审核者将批准每个拉取请求。
但是,创建 PR 的用户也可以从任务分支直接创建 PR。

有什么方法可以通过策略/验证系统可以阻止从任务到主控的 PR 本身的创建。

【问题讨论】:

  • 我们非常希望能够限制可以直接拉入给定分支的分支。这将完成信任策略链,例如,我们在以“pbi/”开头的分支名称上设置项目级策略,然后要求只有以“pbi/”开头的分支才能被拉入主分支。

标签: azure-devops


【解决方案1】:

目前 azure devops 没有策略/验证来防止创建需要掌握的任务的 pr。

但是,有一种解决方法可以防止合并 PR,这是要掌握的任务。

您可以使用脚本任务创建管道来检查 PR 的源分支。见下文:

$sourceBranch = "$(System.PullRequest.SourceBranch)"

if($sourceBranch -ne "refs/heads/release")
{
    exit 1
}

例如,使用上述脚本添加一个 powershell 任务。该脚本将检查 PR 源分支是否为发布分支,如果不是则使管道失败。

然后您可以将上述管道添加到主分支的branch policy。见下文:

那么任何没有发布到master的PR都会验证失败,无法完成。 (但它仍然不能阻止创建一个从测试到主的 PR)

您也可以点击here 向微软开发团队提交功能请求(点击 Suggest a feature 并选择 Azure Devops。)。希望他们将来会考虑添加此功能。

请看下面我的测试管道的屏幕截图。

【讨论】:

  • 创建一个 YAML 管道以使此解决方法起作用。来自 Microsoft 文档,$(System.PullRequest.SourceBranch) “如果 PR 受分支策略影响,此变量仅在 YAML 管道中可用。”
  • 我在经典管道上进行了测试。有效。不知道为什么它在文件中这么说。见上面我的测试结果。
  • 值得注意的是,如果有人在分支上拥有“完成拉取请求时绕过策略”的权限,则此控件不会捕获这种情况。最好仅通过 repo 安全性将访问权限限制为您信任的人来管理合并到 master。
  • 是的。它也在经典管道中工作。我认为 Microsoft 文档需要更新。
  • 在测试中,这似乎只有在构建验证中运行的解决方法管道与具有构建验证策略的分支位于同一存储库中时才有效。如果它位于不同的存储库中,则会失败并显示以下错误并且没有日志:“加载 YAML 构建管道时发生错误。对象引用未设置为对象的实例。”
【解决方案2】:

如果您只希望一部分用户管理与主分支的合并,您可以在主分支上设置分支安全性,以防止参与以该分支为目标的拉取请求。

【讨论】:

  • 我希望系统在创建要掌握的任务的 PR 时提示/阻止。这可能吗。
  • 我认为没有任何东西可以阻止针对分支创建 PR。但是,如果您定义安全性,则“完成”按钮将永远不可用,除非您授予访问权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
相关资源
最近更新 更多