Развертывание вручную на этапах в настоящее время не поддерживается в конвейере yaml. Пожалуйста, отметьте этот открытый выпуск .
. Вы можете попробовать добавить зависящее от и условие для каждого этапа. Для примера ниже yaml конвейер. Этап Сборка начнет выполняться только после успешного завершения этапа Запуск , затем Сборка этапа будет ожидать подтверждения, Выпуск этапа не будет запускаться до тех пор, пока Сборка этапа не будет утверждена и успешно завершена.
Вы можете определить pr триггер и установить autocancel=true
(по умолчанию true) для отмены предыдущих запусков, если новые изменения были перенесены в тот же pr.
Свойство batch для trigger
может обеспечить аналогичный эффект. Он не запустит новый запуск, если текущий pr все еще находится в здании.
trigger:
batch: boolean # batch changes if true (the default); start a new build for every push if false
branches:
include:
_
pr:
autoCancel: true
branches:
include:
- master
stages:
- stage: Start
jobs:
- job: A
pool:
vmImage: windows-latest
steps:
- powershell: |
echo "i am job a"
- stage: Build
dependsOn: Start
condition: succeeded()
jobs:
- deployment: Dev
displayName: deploy Web App
pool:
vmImage: 'Ubuntu-16.04'
# creates an environment if it doesn't exist
environment: 'Dev'
strategy:
# default deployment strategy, more coming...
runOnce:
deploy:
steps:
- script: echo "i am dev environment"
- stage: Release
dependsOn: Build
condition: succeeded()
jobs:
- deployment: Environ
displayName: deploy Web App
pool:
vmImage: 'Ubuntu-16.04'
# creates an environment if it doesn't exist
environment: 'Environment'
strategy:
# default deployment strategy, more coming...
runOnce:
deploy:
steps:
- script: echo "i am Environment environment"
Обновление: Отмена в процессе сборки через скрипты powershell .
Вы можете добавить задачу powershell в верхней части конвейера, чтобы вызвать build api . Приведенные ниже скрипты получают все текущие сборки и отменяют их, кроме текущей сборки.
- task: PowerShell@2
inputs:
targetType: inline
script: |
$header = @{ Authorization = "Bearer $(system.accesstoken)" }
$buildsUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds?api-version=5.1"
echo $buildsUrl
$builds = Invoke-RestMethod -Uri $buildsUrl -Method Get -Header $header
$buildsToStop = $builds.value.Where({ ($_.status -eq 'inProgress') -and ($_.definition.name -eq "$(Build.DefinitionName)") -and ($_.id -ne $(Build.BuildId))})
ForEach($build in $buildsToStop)
{
echo $build.id
$build.status = "cancelling"
$body = $build | ConvertTo-Json -Depth 10
$urlToCancel = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$($build.id)?api-version=5.1"
echo $urlToCancel
Invoke-RestMethod -Uri $urlToCancel -Method Patch -ContentType application/json -Body $body -Header $header
}
Чтобы у вашего конвейера было разрешение отменить текущую текущую сборку. Вам нужно go к вашему конвейеру, нажмите на 3 точки и выберите Управление защитой
Затем установите Остановить разрешение на сборку для Разрешить для пользователя Служба сборки коллекций проектов (имя_проекта),