如果特定文件已更改,则合并或构建失败?

时间:2017-07-27 11:36:06

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline

在VSTS上,我们要在 某些 分支上保护一些文件。如果特定文件发生了变化,怎么会失败合并/构建?

一等奖是在构建服务器上配置它,在本例中是VisualStudio.com(VSTS / GIT)。

场景:我们有各种版本分支v1,v2,v3。我们希望保护packages.json文件,以防止任何人更新这些分支上的Nuget包。因此,如果package.json文件已经在拉取请求中更改为" v3",则不允许合并。

4 个答案:

答案 0 :(得分:1)

对于 Git ,您可以保护某个分支(不是某个文件),然后分支中存在的所有文件都将受到保护。

您可以使用分支机构安全哪些用户/群组可以为分支做出贡献。

或者您可以使用分支政策来保护分支机构不直接提交更改,但使用pull请求进行更改等。

或者您可以锁定分支以防止更新。

enter image description here

扩大Starain的答案:

首先为要保护的分支创建构建定义 n(例如在获取源步骤中选择V3分支)。并使用以下内容添加powershell任务:

$head=$(git rev-parse HEAD)
$parents=$(git rev-list --parents -n 1 $head)
$p1,$p2,$p3=$parents.split(' ')
If ($p1 = $head)
{
  $parent1=$p2
  $parent2=$p3
}
ElseIf ($p2 = $head)
{
  $parent1=$p1
  $parent2=$p3
}
Else
{
  $parent1=$p1
  $parent2=$p2
}
$outp1=$(git diff $head $parent1 --name-only)
$outp2=$(git diff $head $parent2 --name-only)
If ($outp1 -contains 'package.json')
{
  echo "changed the specified file on the branch which contains commit $parent1"
  exit 1
}
If ($outp2 -contains 'package.json')
{
  echo "changed the specified file on the branch which contains commit $parent2"
  exit 1
}

因此,当文件package.json发生变化时,powershell脚本将失败构建结果。

然后为要保护的分支添加分支策略

添加构建政策 - >选择刚刚创建的构建定义 - >政策要求为必需 - >构建到期时间为0.1小时(6分钟)或其他值,因为每次快速排队使用PowerShell任务排队 - >保存。

答案 1 :(得分:0)

您可以在VSTS中为特定分支放置特定文件夹/文件的必需审阅者。

通过这种方式,该人无法获得所需审稿人的批准,无法办理登机手续。

enter image description here

答案 2 :(得分:0)

Git并没有真正这样做;个别文件不具备任何安全性。

您可以使用pre-commit hook,但重要的是要注意这些挂钩是客户端,而不是服务器端 - 每个用户都必须设置预提交挂钩。< / p>

VSTS / TFS不支持Git服务器挂钩(至少,它不能阻止推送),否则pre-receiveupdate挂钩就是你的想。

答案 3 :(得分:0)

您可以尝试在构建,简单的工作流程中执行此操作:

  1. 为所需的成功构建配置分支策略
  2. 检查该版本中是否更改了特定文件
  3. 如果特定文件已更改,则构建失败