Ограничить завершение PR, если ветвь функции позади. Azure Девопс - PullRequest
0 голосов
/ 10 марта 2020

Есть ли в любом случае, я могу ограничить завершение PR, если моя ветвь функции находится за веткой сравнения (в данном случае Master).

Я хочу создать 2 PR

  1. / 1 для разработки. Поскольку функция / 1 отстает от основного, я хочу ограничить завершение этого PR.
  2. функция / 2 для разработки. Поскольку эта ветвь функций синхронизируется с главной веткой c, на этот PR не должно накладываться никаких ограничений.

ПРИМЕЧАНИЕ : ветви функций создаются из главной

Спасибо

enter image description here

1 Ответ

1 голос
/ 11 марта 2020

Мы не предоставляем такую ​​готовую функцию в политике филиала, чтобы помочь вам достичь этой цели до сих пор.

Но есть один обходной путь, который вы можете использовать: выполните решение о том, равно ли значение 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 в порядке.

enter image description here

Шаг 3

Go branch policy соответствующей ветви => Build validation => Add build policy => Выберите Построить конвейер BehindNoVerify, который мы определили ранее.

Выберите Trigger как Автомат c и Policy requirement как требуется .


Теперь запрос на выборку позволяет быть completed только тогда, когда конвейер (BehindNoVerify) работает успешно, то есть значение behind равно 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...