マルチステージAzure Devops Yaml Pipelineに手動の介入ステップを追加しますか?
ジェンキンスでは、次のようなことができることがあります。
stage ('approve-prod') {
steps {
input "Approve deployment to production?"
}
}
_
私はAzure DevOps Yamlの等価物を探しています。
注:これは、古いスタイルのリリースパイプラインではなく、新しくリリースされたマルチステージAzure DevOpSパイプライン用です。関連のお知らせここ https://devblogs.microsoft.com/devops/whats-new-with-azure-pipelines/
マイクロソフトは現在ブランドの新しい公式 手動検証タスク が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: |
[email protected]
[email protected]
instructions: 'Please validate the build configuration and resume'
onTimeout: 'resume'
_
注意するためのいくつかの重要な制約
マイクロソフトがこれを無視してから長い時間があるからであり、これは重大な不足機能であるため、ここで回避策を追加します(現時点では、マルチステージYAMLの場合はすべてのマシンの全体のステップを無視するのにのみ機能していますが私はこれも解決できると思いますが、私は現時点では見ていません)。
残念ながら、各タスクの前に追加する必要があるタスクがあります。これは繰り返し挿入によっても解決できます( https://docs.microsoft.com/jaus/azure/devops/pipelines/process/templatess?view=azure-devops )。
特定のタスクを無視できるようにするには
タグを追加するには、まだ実行するタスクがないため、APIを使用しています。リクエストの詳細については、F21 IN Chrome]およびタグを追加した後にサーバーに送信された内容を確認し、そのリクエストを電源シェルにエクスポートします。
下には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"
_