我所在项目的分支设置希望强制规定只有dev分支才能合并到master分支。
是否可以通过分支策略来设置? 如果不行,是否还有其他替代方案?
我们试图防止任何开发人员试图从错误的分支合并到master分支。
感谢任何帮助。
我所在项目的分支设置希望强制规定只有dev分支才能合并到master分支。
是否可以通过分支策略来设置? 如果不行,是否还有其他替代方案?
我们试图防止任何开发人员试图从错误的分支合并到master分支。
感谢任何帮助。
steps:
- script: 'ThisIsNotDevBranch.exe test'
failOnStderr: true
displayName: 'Command Line Script'
condition: ne(variables['System.PullRequest.SourceBranch'], 'refs/heads/dev')
Step2. 配置master
分支的分支策略,在设置中添加 构建策略:
选择在步骤1中创建的流水线作为构建策略所使用的流水线。
工作原理:
1. 每当我创建一个pull request来合并一个分支到master分支时,就会自动触发在步骤1中创建的流水线。
2. 我使用了CMD任务中实际上不存在的命令,并勾选了“Fail On Standard Error”复选框。然后这个任务将会抛出错误并且使任务,如果运行,则使流水线失败。
3. 在该任务中使用条件,只有当PR的源分支是dev分支(refs/heads/dev
)时,该任务才会运行。
4. 现在如果我创建一个PR来将分支testBranch
合并到master=>流水线运行=>自定义条件=true=>任务运行,然后它抛出错误使流水线失败=>此时无法完成PR(如果流水线失败,则无法工作完成按钮)。
然后,如果我创建一个PR来将分支dev
合并到master=>流水线运行=>条件=false=>任务将跳过=>流水线成功=>我们可以批准和完成PR。
注意:
1. 如果您想要设置只有dev分支可以合并到master分支,请在条件中使用refs/heads/dev
。如果是Dev,则请改为refs/heads/Dev
。
2. 这个方案的核心是有条件的CMD任务,我们可以用其他类型的任务替换它。此外,我们不必创建一个流水线来运行这个任务。如果您想要,只需在现有的流水线中添加有条件的任务即可。但是需要额外的步骤来区分流水线是由PR还是普通更新的源文件触发。因此,我建议创建一个新的简单经典流水线来进行验证。
附加说明:
1. System.PullRequest.SourceBranch的详细信息。
2. 除了构建策略之外,您还可以在分支策略中尝试其他策略来保护您的主分支。就像Krzysztof Madej所说,您还可以考虑代码审核人选项。将这些策略选项组合起来是一个不错的选择!