Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 具有条件手动批准作业的DevOps模板_Azure Devops_Azure Pipelines_Azure Pipelines Release Pipeline_Azure Pipelines Yaml - Fatal编程技术网

Azure devops 具有条件手动批准作业的DevOps模板

Azure devops 具有条件手动批准作业的DevOps模板,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,azure-pipelines-yaml,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,Azure Pipelines Yaml,我正在尝试根据阶段添加审批作业,我正在使用模板,希望跳过某些阶段的审批: parameters: - name: Stage type: string - name: Environment type: string - name: WebAppName type: string - name: ArtifactName type: string - name: DependsOn type: object default: [] - name: Subscriptio

我正在尝试根据阶段添加审批作业,我正在使用模板,希望跳过某些阶段的审批:

parameters:
- name: Stage
  type: string
- name: Environment
  type: string
- name: WebAppName
  type: string
- name: ArtifactName
  type: string
- name: DependsOn
  type: object
  default: [] 
- name: Subscription
  type: string
- name: isApproval
  type: boolean
  default: false 

stages:

############################################################
# Deploy stages
############################################################

- stage: ${{ parameters.Stage }}  
  displayName: '${{ parameters.Stage }} Stage'
  dependsOn: '${{ parameters.DependsOn }}' # this will execute based on the stage that is passed.

  jobs:
  - job: approval
    condition: eq('${{ parameters.isApproval }}', true)
    pool:
      vmImage: 'windows-latest'
    steps:
    - task: ManualIntervention@8
      timeoutInMinutes: 1440 # task times out in 1 day
      inputs:
        emailRecipients: 'example@example.com'
        instructions: 'Please validate the build configuration and resume'
            
  - deployment: ${{ parameters.Environment }} 
    ${{ if eq('${{ parameters.isApproval }}', true)}}:
      dependsOn: approval
    timeoutInMinutes: 70
    environment: '${{ parameters.Environment }} Environment'
    pool:
      vmImage: 'windows-latest'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadBuildArtifacts@0
            inputs:
              buildType: 'current'
              downloadType: 'single'
              artifactName: ${{ parameters.ArtifactName }}
              downloadPath: '$(System.ArtifactsDirectory)'
          - task: AzureRmWebAppDeployment@4
            inputs:
              ConnectionType: 'AzureRM'
              azureSubscription: ${{ parameters.Subscription }} 
              appType: 'webApp'
              WebAppName: ${{ parameters.WebAppName }}
              package: '$(System.ArtifactsDirectory)/**/*.zip'
现在从发布管道,我将值传递给模板:

- template: stages\deploy.yml 
    parameters:
      Environment: 'Dev'
      WebAppName: 'azureappservicehelloworldapp-dev'
      Stage: 'Dev'
      ArtifactName : '$(ArtifactName)'
      Subscription: 'AzureConnectionSC'
      # empty DependsOn, as Dev depends on nothing
      DependsOn:
      - Build

  - template: stages\deploy.yml 
    parameters:
      Environment: 'UAT'
      WebAppName: 'azureappservicehelloworld-uat'
      Stage: 'UAT'
      ArtifactName : '$(ArtifactName)'
      Subscription: 'AzureConnectionSC'
      DependsOn:
      - Dev
      isApproval: true

  - template: stages\deploy.yml 
    parameters:
      Environment: 'Prod'
      WebAppName: 'azureappservicehelloworld'
      Stage: 'Prod'
      ArtifactName : '$(ArtifactName)'
      Subscription: 'AzureConnectionSC'
      DependsOn:
      - UAT
      isApproval: true
如果您看到从UAT和Prod模板发送的IsApproval为true,那么我应该能够验证UAT和Prod的批准,并且开发人员应该在没有任何批准的情况下部署

但我在模板中得到了以下批准作业的错误:

- template: stages\deploy.yml 
    parameters:
      Environment: 'Dev'
      WebAppName: 'azureappservicehelloworldapp-dev'
      Stage: 'Dev'
      ArtifactName : '$(ArtifactName)'
      Subscription: 'AzureConnectionSC'
      # empty DependsOn, as Dev depends on nothing
      DependsOn:
      - Build

  - template: stages\deploy.yml 
    parameters:
      Environment: 'UAT'
      WebAppName: 'azureappservicehelloworld-uat'
      Stage: 'UAT'
      ArtifactName : '$(ArtifactName)'
      Subscription: 'AzureConnectionSC'
      DependsOn:
      - Dev
      isApproval: true

  - template: stages\deploy.yml 
    parameters:
      Environment: 'Prod'
      WebAppName: 'azureappservicehelloworld'
      Stage: 'Prod'
      ArtifactName : '$(ArtifactName)'
      Subscription: 'AzureConnectionSC'
      DependsOn:
      - UAT
      isApproval: true


手动干预任务出现错误,请提供任何建议。

手动干预任务仅适用于经典版本,并且仅适用于版本的无代理作业阶段

在您的情况下,我要做的是向管道中注入两个新的占位符环境,每个环境都有批准要求,但不部署任何内容:

-模板:stages\deploy.yml
参数:
环境:“Dev”
WebAppName:“azureappservicehelloworldapp开发”
阶段:'开发'
工件名称:'$(工件名称)'
订阅:'AzureConnectionSC'
#空DependsOn,因为Dev不依赖任何东西
德彭森:
-建造
-阶段:批准
显示名称:“UAT批准阶段”
德彭森:“德夫”
工作:
-部署:核准
环境:“UAT批准环境”
游泳池:
vmImage:“windows最新版本”
战略:
跳动:
部署:
步骤:
-pwsh:编写主机“占位符批准部署”
-模板:stages\deploy.yml
参数:
环境:“UAT”
WebAppName:“azureappservicehelloworld uat”
阶段:“UAT”
工件名称:'$(工件名称)'
订阅:'AzureConnectionSC'
德彭森:
-批准
我同意:是的
-阶段:批准
displayName:“产品批准阶段”
德彭森:“UAT”
工作:
-部署:PRODApproval
环境:“产品批准环境”
游泳池:
vmImage:“windows最新版本”
战略:
跳动:
部署:
步骤:
-pwsh:编写主机“占位符批准部署”
-模板:stages\deploy.yml
参数:
环境:“Prod”
WebAppName:“azureappservicehelloworld”
阶段:“Prod”
工件名称:'$(工件名称)'
订阅:'AzureConnectionSC'
德彭森:
-产品批准
我同意:是的

如果愿意,您可以像其他部署阶段一样“模板化”这些阶段。

手动干预任务有一个
runOn:“server”
设置,因此您不能在代理上运行它,它在应用层上运行

这意味着您不能使用:

    pool:
      vmImage: 'windows-latest'

结果是它引发了一次审查。正如所料


不管出于什么原因ManualIntervention@8任务在YAML上下文中具有不受支持的任务执行处理程序。所以你可以用ManualValidation@0,但不是ManualIntervention@8.

谢谢你,它成功了ManualIntervention@8以及没有问题,什么是不支持的ManualIntervention@8?我收回它,我得到错误:错误分析手动干预(手动干预)ID:bcb64569-d51a-4af0-9c01-ea5d05b3b622的任务定义的任务执行部分缺失或无效。是的,
ManualIntervention
使用
“执行”:{“RM:ManualIntervention”:{}
,YAML管道扩展不支持该部分。
ManualValidation
任务没有为执行处理程序使用
RM:
命名空间。错误消息和任务显示在YAML编辑器中的事实非常令人困惑。我猜Microsoft在某个时候不赞成为YAML执行此任务。文档说它不受支持,但在某些情况下它显然可以工作。在UATProval或ProdApproval阶段如何包括手动干预,我只看到pwsh:Write Host“Placeholder approval deployment”。这一步如何进行手动干预?它的作用是运行一个简单的作业(写入一些输出)。然后停下来。然后在Azure管道中对环境本身设置批准条件。一旦作业运行,下一个作业将不会运行,直到有人批准您刚刚“部署”的琐碎工作。