У нас есть несколько пайплайнов в Azure DevOps, у которых есть триггер сборки Continuous Integration — после каждого изменения в ветке dev
запускается сборка, после чего код выпускается в среду DEV
.
Наша бизнес-потребность заключается в том, чтобы не запускать автоматические развертывания для разработчиков по пятницам, а во все остальные дни недели.
Мы можем отключать триггер CI вручную каждую пятницу утром и включать вечером, но можно ли это как-то автоматизировать в Azure DevOps?
Скорее всего, вы не сможете добиться этого, используя тот же конвейер. Но вы можете создать еще один конвейер с запланированным триггером, а затем обновить исходное определение сборки с помощью REST API.
Вот вам определение этого звонка
PUT https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=6.0
Я проверил вкладку сети, и вы должны увидеть queueStatus
, где:
0
означает - enabled
1
означает - paused
2
означает - disabled
Здесь у вас есть лучшее объяснение, что означают эти статусы:
Вызов REST API из конвейера довольно прост, поскольку у нас есть System.AccessToken
, которые позволяют вам выполнять такие операции.
Вот пример (я использовал другую конечную точку, но правила те же):
- task: PowerShell@2
name: ConditionalStep
inputs:
targetType: 'inline'
script: |
Write-Host "I'm here"
Write-Host ('$(SomeVariable)' -eq 'Stop')
if ('$(SomeVariable)' -eq 'Stop') {
$uri = "https://dev.azure.com/thecodemanual/DevOps Manual/_apis/build/builds/$(Build.BuildId)?api-version=5.1"
$json = @{status = "Cancelling"} | ConvertTo-Json -Compress
$build = Invoke-RestMethod -Uri $uri -Method Patch -Headers @{Authorization = "Bearer $(System.AccessToken)"} -ContentType "application/json" -Body $json
Write-Host $build
}
Write-Host "And now here!"
pwsh: true
в вашем случае я бы рекомендовал сделать первый вызов, чтобы получить определение конвейера, изменить queueStatus
и отправить его обратно.
Конечно, вам нужно проверить, работает ли ваш пайплайн в пятницу/субботу, а затем установить 2
, а в понедельник утром установить для него 0
(или создать отдельные пайплайны).