针对 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 的回答,我更新了我的管道
- 如果我按照答案所示保留它,步骤条目将突出显示为无效语法:
- 如果我缩进它,它似乎是正确的。部署阶段执行并下载工件,但似乎没有执行任何其他操作(脚本、部署任务...):
因此,您绑定到环境的资源不会限制哪些管道可以与该环境相关联。此外,它们不是必需的,目前 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 管道中部署的资源相关联 :)
我将 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 的回答,我更新了我的管道
- 如果我按照答案所示保留它,步骤条目将突出显示为无效语法:
- 如果我缩进它,它似乎是正确的。部署阶段执行并下载工件,但似乎没有执行任何其他操作(脚本、部署任务...):
因此,您绑定到环境的资源不会限制哪些管道可以与该环境相关联。此外,它们不是必需的,目前 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 管道中部署的资源相关联 :)