Azure devops 如何在Azure管道yaml中添加手动干预步骤
如何将手动干预步骤添加到多阶段Azure Devops YAML管道中 在詹金斯,你可以做一些事情,比如:Azure devops 如何在Azure管道yaml中添加手动干预步骤,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,如何将手动干预步骤添加到多阶段Azure Devops YAML管道中 在詹金斯,你可以做一些事情,比如: stage ('approve-prod') { steps { input "Approve deployment to production?" } } 我正在寻找Azure Devops YAML中的等效版本 注意:这适用于新发布的多级Azure Devops管道,而不是旧式发布管道。此处的相关公告这似乎还不可用,但有一个GitHub问题跟踪此问题:
stage ('approve-prod') {
steps {
input "Approve deployment to production?"
}
}
我正在寻找Azure Devops YAML中的等效版本
注意:这适用于新发布的多级Azure Devops管道,而不是旧式发布管道。此处的相关公告这似乎还不可用,但有一个GitHub问题跟踪此问题: 本期: 因此,我从产品团队那里听到的是,这个“每个阶段的批准”策略目前还不可用,但已在他们的待办事项中 还有一个跟踪它的路线图工作项:
Azure DevOps/Pipelines现在有一个名为Environments的功能,支持审批。 我们正在使用它们作为解决办法。基本上,我们在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
第一个阶段将在不受干扰的情况下运行,第二个阶段将暂停,直到获得批准。因为Microsoft已经很久没有忽略这一点了,而且这是一个关键的缺失功能,我将在这里添加一个解决方法(目前,在多阶段YAML的情况下,忽略所有机器的整个步骤是可行的,但我认为这也可以解决,但我暂时不考虑) 不幸的是,在每个任务之前都需要添加一个任务。这也可以通过迭代插入()来解决 简而言之,为了能够忽略特定任务:
- T1正在检查“IgnoreStep”标记的生成运行。如果找到,它会将IgnoreStep变量设置为true并删除该标记
- T2仅在上一个Ignorstep为false时运行 当某个操作失败并且我想忽略该步骤时,我将为运行添加“IgnoreStep”标记,然后重试
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"
微软现在提供了一个全新的官方版本,允许在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'
需要注意的一些关键约束:
- 此任务仅在YAML管道中受支持
- 只能在YAML管道的无代理作业中使用