Azure Конвейеры: CI Build работает после слияния запроса на получение источника. - PullRequest
0 голосов
/ 03 марта 2020

Это немного сложно объяснить, но в Azure Конвейеры, если у вас есть политика проверки сборки для запроса на извлечение, конвейер сборки будет работать со следующими переменными:

System.PullRequest.SourceBranch 

The branch that is being reviewed in a pull request. For example: refs/heads/feature/branch. 


System.PullRequest.TargetBranch

The branch that is the target of a pull request. For example: refs/heads/master. 

Но после извлечения Запрос завершен, и CI запускает сборку конвейера в целевой ветви (refs / head / master), поэтому больше невозможно просматривать эти переменные.

У меня есть пакет npm, где я хочу, после успешное слияние PR, чтобы опубликовать sh новую минорную или патч-версию автоматически, в зависимости от того, начинается ли ветка PR с refs / feature / или refs / bugfix / соответственно.

Как я могу получить имя исходной ветви PR в этой сборке CI на целевой ветви. (Не политика проверки сборки PR)

1 Ответ

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

Вы можете использовать rest api для получения исходных ветвей PR.

Вы можете добавить задачу скрипта для вызова Get Pull Requests Api и указать searchCriteria для фильтрации последний запрос на извлечение. Пожалуйста, проверьте приведенный ниже пример:

 - powershell: |
        $url = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.ID)/pullrequests?searchCriteria.targetRefName=refs/heads/master&searchCriteria.status=completed&'$top=1&api-version=5.1"
        $result = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $(System.AccessToken)"} -Method get
        $branches = $result.value[0]
        echo "##vso[task.setvariable variable=sourceBranch]$($branches.sourceRefName)"

Вышеуказанные сценарии получат последний запрос Pull, который объединен с основной ветвью, а затем получат sourceRefName и зададут его в переменной sourceBranch. Чтобы вы могли ссылаться на переменную $ (sourceBranch) в следующих задачах.

Другой API, который вы можете использовать для получения sourceRefName, это Builds - Get . Поскольку сборка CI в основной ветке запускается сразу после сборки PR. Вы можете обратиться к идентификатору сборки PR в сборке CI главной ветви по $(Build.BuildId)-1. Например

$buildid = $(Build.BuildId)-1    

$url="$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$buildid?api-version=5.1"

$bresult = Invoke-RestMethod -Uri $prurl -Headers @{authorization = "Bearer $(System.AccessToken)"}  -Method get

$para = $bresult.parameters | ConvertFrom-Json

echo "##vso[task.setvariable variable=sourceBranch]$($para.'system.pullRequest.sourceBranch')"
...