Azure Dev Ops - 只允许某个分支合并到master

min*_*int 8 azure-devops

我所在项目的分支设置希望强制执行只有 dev 分支可以合并到 master 的规则。

有没有办法通过分支机构政策进行设置?如果没有,还有其他选择吗?

我们正在努力防止任何开发人员尝试从错误的分支合并到 master 中。

谢谢你的帮助。

Lan*_*SFT 12

有没有办法通过分支机构政策进行设置?如果没有,还有其他选择吗?

Azure Devops 无法控制哪个分支可以合并到 master 中,但我们可以使用分支策略作为解决方法。这是我的工作方向:

Step1 .使用一个命令行任务创建一个简单的管道(无论经典还是yaml,但经典更适合这种场景):

script:ThisIsNotDevBranch.exe 测试

fail on standard error: 在此输入图像描述

condition when run the task: 在此输入图像描述

yaml 格式:

steps:

- script: 'ThisIsNotDevBranch.exe test'
  failOnStderr: true
  displayName: 'Command Line Script'
  condition: ne(variables['System.PullRequest.SourceBranch'], 'refs/heads/dev')
Run Code Online (Sandbox Code Playgroud)

Step2 .配置master分支的分支策略,添加构建策略,设置如下:

在此输入图像描述

选择在步骤 1 中创建的管道作为构建策略中要使用的管道。

怎么运行的:

1.每当我创建一个 Pull 请求将一个分支合并到 master 时,步骤 1 中创建的管道就会自动触发。

2.我使用了CMD任务中实际上不存在的命令,并选中了Fail On Standard Error复选框。那么这个任务将抛出错误并使任务失败,管道如果运行的话。

3.根据该任务中的条件,仅当 PR 的源分支为 dev 分支(refs/heads/dev)时,该任务才会运行。

4.现在,如果我创建一个 PR 将分支合并testBranch到 master=> 管道运行=> 自定义条件=true=> 任务将运行,那么它会抛出错误以使管道失败=> 然后 PR 无法完成(如果管道失败,PR 中的完整按钮将无法工作)。

然后,如果我创建一个 PR 将分支合并dev到 master => 管道运行 => 条件 = false => 任务将跳过 => 管道成功 => 我们可以批准并完成 PR。

笔记:

1.如果你想设置只有dev分支可以合并到master,那么使用refs/heads/devin条件。如果是 Dev,请refs/heads/Dev改为使用。

2.这个方向的核心是条件CMD任务,我们可以用其他类型的任务代替它。此外,我们不必创建管道来运行任务。如果需要,只需在现有管道中添加条件任务即可。但它需要额外的步骤来区分管道是由 PR 还是正常更新的源文件触发的。因此,我建议创建一个新的简单经典管道来进行验证。

此外:

1.有关System.PullRequest.SourceBranch的详细信息。

2.除了构建策略之外,您还可以尝试分支策略中的其他策略来投影您的主分支。正如Krzysztof Madej所说,您还可以考虑代码审查员选项。将这些政策选项结合起来是一个不错的选择!