Мы не предоставляем такую готовую функцию в политике филиала, чтобы помочь вам достичь этой цели до сих пор.
Но есть один обходной путь, который вы можете использовать: выполните решение о том, равно ли значение behind
0 в конвейере сборки, через api , затем укажите этот конвейер как * 1006. * Проверка сборки в политике ветвления.
Шаг 1 :
Создание конвейера сборки и добавление в него задачи Powershell
с именами BehindNoVerify
.
Шаг 2 :
Добавьте приведенный ниже сценарий в эту задачу после выбора режима inline
:
[String]$project = "$env:SYSTEM_TEAMPROJECT"
[String]$OrgUri = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"
[String]$Repo = "$env:BUILD_REPOSITORY_NAME"
$headers = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
$commiturl =$OrgUri + $project + "/_apis/git/repositories/" + $Repo + "/commits?searchCriteria.itemVersion.version=master&api-version=5.1"
$comresponse = Invoke-RestMethod -Uri $commiturl -Headers $headers -Method Get
#Obtain the latest commit id value from master branch
$latestcommitid= $($comresponse.value.commitid[0])
$behindurl =$OrgUri + $project + "/_apis/git/repositories/" + $Repo + "/stats/branches?baseVersionDescriptor.versionOptions=none&baseVersionDescriptor.version=" + $latestcommitid + "&baseVersionDescriptor.versionType=commit&api-version=5.1"
$response = Invoke-RestMethod -Uri $behindurl -Headers @{Authorization = "Basic $token"} -Method Get
#filter out the behind data of develop branch
$results = $response.value | Where {$_.name -eq "develop"} #|
Write-Host "results = $($results.behindCount | ConvertTo-Json -Depth 100)"
#Fail current task once behind value is non-zero
if ($result -ne 0 ) {
exit 128
}
Примечание: Рабочий лог c приведенного выше сценария powershell: 1). Сначала получите самую последнюю commit id
из master
ветви. 2). Используйте это commit id
в качестве целевой версии для сравнения с коммитами ветви develop
, затем рассчитайте / получите число ahead
и develop
с помощью это API . 3) Как только учетная запись behind
будет отлична от нуля , измените код завершения, чтобы вручную выполнить задачу.
Можно применить вышеуказанный сценарий к любой организации и проекту, так как я использую переменную окружения, чтобы получить Token
, org name
, project name
и repos name
. Просто включите System.AccessToken в порядке.
Шаг 3
Go branch policy
соответствующей ветви => Build validation
=> Add build policy
=> Выберите Построить конвейер BehindNoVerify
, который мы определили ранее.
Выберите Trigger
как Автомат c и Policy requirement
как требуется .
Теперь запрос на выборку позволяет быть completed
только тогда, когда конвейер (BehindNoVerify
) работает успешно, то есть значение behind
равно 0.