针对 Azure 应用服务配置 Azure Pipelines 部署阶段的批准

Configure approval for Azure Pipelines deployment stage against Azure App Services

我将 Azure Pipeline 定义为代码,其中将有多个部署阶段(暂存和生产)。我需要在一些用户的批准下执行生产阶段。

目前有一种方法可以定义“环境”的批准。然而这只包括 VM 和 K8s 等资源,但应用程序将部署在 Azure App Services 上:

流水线摘要:

  - stage: Deploy_Production
    pool:
      vmImage: ubuntu-latest
    jobs:
      - job: deploy
        steps:
        - script: find ./
        - task: DownloadBuildArtifacts@0
          inputs:
            buildType: 'current'
            downloadType: 'single'
            artifactName: 'drop'
            downloadPath: '$(System.ArtifactsDirectory)'
        - script: 'find $(System.ArtifactsDirectory)'
        - task: AzureRmWebAppDeployment@4
          inputs:
            ConnectionType: 'AzureRM'
            azureSubscription: 'Free Trial(xxx)'
            appType: 'webAppLinux'
            WebAppName: 'app'
            packageForLinux: '$(System.ArtifactsDirectory)/**/*.jar'
            RuntimeStack: 'JAVA|11-java11'
            StartupCommand: 'java - jar $(System.ArtifactsDirectory)/drop/build/libs/app.jar'

如何在这种情况下配置批准?

更新:

根据 MorrowSolutions 的回答,我更新了我的管道

  1. 如果我按照答案所示保留它,步骤条目将突出显示为无效语法:

  1. 如果我缩进它,它似乎是正确的。部署阶段执行并下载工件,但似乎没有执行任何其他操作(脚本、部署任务...):

因此,您绑定到环境的资源不会限制哪些管道可以与该环境相关联。此外,它们不是必需的,目前 Microsoft 仅支持 Kubernetes 和 VMS,因此您将无法关联 Azure 应用服务。

在您的情况下,不要将任何资源与您的环境相关联。您需要更新 YAML 以专门使用 deployment 作业并在参数中指定环境。这将告诉您的管道将发布与您配置的环境相关联。在你的情况下它应该看起来像这样:

stages:
- stage: Deploy_Production
  pool:
    vmImage: ubuntu-latest
  jobs:
    - deployment: DeployWeb
      displayName: Deploy Web App
      environment: YourApp-QA
      pool:
        vmImage: 'ubuntu-latest'
      strategy:
        runOnce:
          deploy:
            steps:
                - script: find ./
                - task: DownloadBuildArtifacts@0
                  inputs:
                    buildType: 'current'
                    downloadType: 'single'
                    artifactName: 'drop'
                    downloadPath: '$(System.ArtifactsDirectory)'
                - script: 'find $(System.ArtifactsDirectory)'
                - task: AzureRmWebAppDeployment@4
                  inputs:
                    ConnectionType: 'AzureRM'
                    azureSubscription: 'Free Trial(xxx)'
                    appType: 'webAppLinux'
                    WebAppName: 'app'
                    packageForLinux: '$(System.ArtifactsDirectory)/**/*.jar'
                    RuntimeStack: 'JAVA|11-java11'
                    StartupCommand: 'java - jar $(System.ArtifactsDirectory)/drop/build/libs/app.jar'

这是 Microsoft 关于部署作业架构的文档,其中包含有关如何使用 environment 参数的更多信息:

实际上我刚刚和某人谈过这件事。并非只有您认为绑定到环境的资源 必须 与您在 YAML 管道中部署的资源相关联 :)