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

Mar*_*cks 3 azure-devops azure-pipelines azure-pipelines-release-pipeline

在 VSTS 上,我们想要在某些分支上保护一些文件。如果特定文件已更改,合并/构建如何会失败?

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

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

Mar*_*Liu 5

对于Git来说,你可以保护某个分支(而不是某个文件),那么该分支中存在的所有文件都会受到保护。

\n

您可以使用用户/组可以为分支做出贡献的分支安全性。

\n

或者您可以使用分支策略来保护不直接在分支上提交更改,而是使用拉取请求进行更改等。

\n

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

\n

在此输入图像描述

\n
\n

扩展斯塔林的答案:

\n

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

\n
$head=$(git rev-parse HEAD)\n$parents=$(git rev-list --parents -n 1 $head)\n$p1,$p2,$p3=$parents.split(\' \')\nIf ($p1 = $head)\n{\n  $parent1=$p2\n  $parent2=$p3\n}\nElseIf ($p2 = $head)\n{\n  $parent1=$p1\n  $parent2=$p3\n}\nElse\n{\n  $parent1=$p1\n  $parent2=$p2\n}\n$outp1=$(git diff $head $parent1 --name-only)\n$outp2=$(git diff $head $parent2 --name-only)\nIf ($outp1 -contains \'package.json\')\n{\n  echo "changed the specified file on the branch which contains commit $parent1"\n  exit 1\n}\nIf ($outp2 -contains \'package.json\')\n{\n  echo "changed the specified file on the branch which contains commit $parent2"\n  exit 1\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这样,当文件package.json发生更改时,powershell 脚本将使构建结果失败。

\n

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

\n

添加构建策略 -> 选择您刚刚创建的构建定义 -> 作为必需的策略要求 -> 构建过期时间 0.1 小时(6 分钟)或其他值,因为它\xe2\x80\x99s 很快就可以使用 powershell 任务对构建进行排队 - > 保存。

\n