如何在多阶段Azure Devops YAML管道中添加手动干预步骤?
在詹金斯,您可以执行以下操作:
stage ('approve-prod') {
steps {
input "Approve deployment to production?"
}
}
我正在寻找Azure Devops YAML中的等效项。
注意:这是用于新发布的多阶段Azure Devops管道,而不是旧式发布管道。 https://devblogs.microsoft.com/devops/whats-new-with-azure-pipelines/
此处的相关公告答案 0 :(得分:5)
Azure DevOps / Pipelines现在具有称为环境的功能,该功能支持批准。 https://docs.microsoft.com/en-us/azure/devops/pipelines/process/environments?view=azure-devops#approvals
我们将它们用作解决方法。基本上,我们在Azure DevOps中指定了两个环境ApprovalNotRequired和ApprovalRequired。在后者上,我们指定了谁可以批准部署。然后在管道中引用这样的环境。
- stage: 'Approval not required'
jobs:
- deployment: 'MyDeployment'
displayName: MyDeployment
environment: 'ApprovalNotRequired'
strategy:
runOnce:
deploy:
# whatever
- stage: 'Approval required'
jobs:
- deployment: 'MyDeployment2'
displayName: MyDeployment2
environment: 'ApprovalRequired'
strategy:
runOnce:
deploy:
# whatever
第一阶段将在没有干扰的情况下运行,第二阶段将暂停直至获得批准。
答案 1 :(得分:1)
由于Microsoft忽略此名称已有很长时间,并且由于这是一项关键的缺少功能,因此我将在此处添加解决方法(目前,在多机情况下,它仅忽略所有计算机的整个步骤阶段YAML,但我认为这也可以解决,但是我暂时不对此进行研究。
不幸的是,在每个任务之前需要添加一个任务。这也可以通过迭代插入(https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops)来解决。
不久,为了能够忽略特定任务:
要添加标签,我正在使用API,因为目前尚无任务。有关请求的详细信息,请在Chrome中使用F21并在添加标签后检查它发送到服务器的内容,然后将请求导出到Power Shell。
下面有YAML:
trigger: none
jobs:
- deployment: Dev
environment:
name: Dev
resourceType: virtualMachine
tags: online
strategy:
runOnce:
deploy:
steps:
- task: PowerShell@2
displayName: CheckIfWeShouldIgnoreStep
name: CheckIfWeShouldIgnoreStep
inputs:
targetType: 'inline'
script: |
$user = "user"
$pass= "pass"
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)
$response = Invoke-RestMethod -Uri "https://server/tfs/collection/projectId/_apis/build/builds/$(Build.BuildId)/tags" `
-Method "GET" `
-Headers @{
"accept"="application/json;api-version=6.0;excludeUrls=true;enumsAsNumbers=true;msDateFormat=true;noArrayWrap=true"
} `
-ContentType "application/json" `
-Credential $credential -UseBasicParsing
Write-Host "##vso[task.setvariable variable=IgnoreStep]false"
Write-Host "Tags: $response"
foreach($tag in $response)
{
if($tag -eq "IgnoreStep")
{
Write-Host "##vso[task.setvariable variable=IgnoreStep]true"
Invoke-RestMethod -Uri "https://server/tfs/collection/projectId/_apis/build/builds/$(Build.BuildId)/tags/IgnoreStep" `
-Method "DELETE" `
-Headers @{
"accept"="application/json;api-version=6.0;excludeUrls=true;enumsAsNumbers=true;msDateFormat=true;noArrayWrap=true"
}`
-Credential $credential -UseBasicParsing
}
}
- task: PowerShell@2
displayName: Throw Error
condition: eq (variables.IgnoreStep, false)
inputs:
targetType: 'inline'
script: |
throw "Error"
答案 2 :(得分:1)
Microsoft现在提供了一个全新的官方Manual Validation task,可以将手动干预添加到YAML管道中。
如何使用此任务的快速示例如下:
jobs:
- job: waitForValidation
displayName: Wait for external validation
pool: server
timeoutInMinutes: 4320 # job times out in 3 days
steps:
- task: ManualValidation@0
timeoutInMinutes: 1440 # task times out in 1 day
inputs:
notifyUsers: |
test@test.com
example@example.com
instructions: 'Please validate the build configuration and resume'
onTimeout: 'resume'
需要注意的一些关键约束:
答案 3 :(得分:0)
该功能似乎尚不可用,但是有一个GitHub Issue跟踪此问题: https://github.com/MicrosoftDocs/vsts-docs/issues/4241
从问题开始:
所以我从产品团队那里听到的是,此“每阶段批准”政策尚不可用,但仍在积压中。
还有一个路线图工作项跟踪它: https://dev.azure.com/mseng/AzureDevOpsRoadmap/_workitems/edit/1510336/