Избегайте запуска Azure конвейера при использовании 'git pu sh' из другого конвейера - PullRequest
1 голос
/ 25 мая 2020

У меня есть главная ветвь, и в ее конвейере есть сценарий PowerShell для обновления другой ветки (для автоматических c синхрон c целей) в конце процесса:

# User and email must be set, otherwise an error occurs
Write-Host "1: Set git configs"
git config --global user.email "${env:BUILD_REQUESTEDFOREMAIL}" 
git config --global user.name "${env:BUILD_REQUESTEDFOR}"

git checkout stage
git merge master
git push

Есть еще один конвейер для ветки этапа, который обычно запускается, если я вручную укажу sh на него. Но в этом случае (когда нажимается другой конвейер) я не хочу запускать, потому что изменения включают только изменение файлов документации, и нет необходимости тратить время и ресурсы на запуск новой сборки.

Мой первый подход должен был установить фильтры пути, чтобы исключить изменение файла CHANGELOG.md (файл документации)

enter image description here

Он работает, когда я sh из мой компьютер, но он не работает, когда pu sh приходит с машины агента сборки (он все еще запускается)

Как мне избежать срабатывания триггера? Также приветствуются другие предложения.

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 26 мая 2020

Git Применение слияния не создает новую фиксацию. Вы можете найти, что (no commit created; -m option ignored) в результате командной строки:

git merge -m "[skip ci] Merge from build agent" branch
Updating ed7d8f5..11d4c44
Fast-forward (no commit created; -m option ignored)
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Вы можете избежать быстрой перемотки вперед и создать фиксацию с сообщением [skip ci], используя параметр --no-ff:

git merge --no-ff -m "[skip ci] Merge from build agent" branch
Merge made by the 'recursive' strategy.
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
0 голосов
/ 26 мая 2020

Другой способ (но, возможно, более сложный) - использовать Pull Request для создания коммитов с сообщением [skip ci]. Вот пример оболочки Power для запуска в агенте сборки:

$user = ""
$token = "$(System.AccessToken)"
$branchTarget = "refs/heads/stage"
$branchSource = "refs/heads/master"
$teamProject = "$(System.TeamProject)"
$repoName = "$(Build.Repository.Name)"
$orgUrl = "$(System.CollectionUri)"

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$uriCreatePR = "$orgUrl/$teamProject/_apis/git/repositories/$repoName/pullrequests?api-version=5.1"
$uriUpdatePR = "$orgUrl/$teamProject/_apis/git/repositories/$repoName/pullrequests/{pullRequestId}?api-version=5.1"

$bodyCreatePR = "{sourceRefName:'$branchSource',targetRefName:'$branchTarget',title:'Sync changes from $branchSource [skip ci]'}"
$bodyUpdatePR = "{status:'completed',lastMergeSourceCommit:{commitId:'{commitId}',url:'{url}'}}"

$resultNewPR = Invoke-RestMethod -Uri $uriCreatePR -Method Post -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $bodyCreatePR

Write-Host "Created PR" $resultNewPR.pullRequestId

$uriUpdatePR = $uriUpdatePR -replace "{pullRequestId}", $resultNewPR.pullRequestId
$bodyUpdatePR = $bodyUpdatePR -replace "{commitId}", $resultNewPR.lastMergeSourceCommit.commitId
$bodyUpdatePR = $bodyUpdatePR -replace "{url}", $resultNewPR.lastMergeSourceCommit.url

$resultUpdatedPR = Invoke-RestMethod -Uri $uriUpdatePR -Method Patch -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $bodyUpdatePR

Write-Host "Completed PR" $resultUpdatedPR.pullRequestId
0 голосов
/ 26 мая 2020

См. Документацию «Как избежать запуска сборки CI при нажатии скрипта?» здесь:

https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/git-commands?view=azure-devops&tabs=yaml#how -do-i-escape-triggering-a-ci-build-when-the-script-push

enter image description here

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