首页 > 解决方案 > 使用 ARM 模板创建 Azure Web 应用程序后,我们可以将 Web 应用程序名称作为参数传递给 YAML 管道吗?

问题描述

我是 devops 的新手,对此感到震惊。我正在开发基础设施作为项目的代码,该项目有多个 API、一个 Angular、一个数据库项目和一些其他组件。

我已创建 - ARM 模板,用于将资源部署到 Azure YAML 文件,以构建代码并将其部署到应用程序。

我不知道如何对这些任务进行分组。我需要在 ARM 模板部署完成后触发 yaml 管道并将 WebApp 名称传递给管道,以便可以部署工件。

提前感谢您的帮助。

标签: azureazure-devops

解决方案


正常情况下,我们不会分别执行 ARM 模板部署任务和 Azure 应用服务部署任务。在第一阶段执行 ARM deploy,然后在第二阶段,从前一阶段的输出中获取WebsiteNameor which:ResourceGroupName

在此处输入图像描述

对于 YAML,您应该像这样配置它(这只是一个部分定义,用于显示有关YAMLARMAPP部署的关键代码):

variables:
  WebAppName: {the webapp name you want to used}
stages:
  - stage: ARMdeploy
    jobs:
      - job: ARM
        steps:
        - checkout: none
        - task: AzureResourceGroupDeployment@2
          inputs:
            azureSubscription: '{Subscription name}'
            action: 'Create Or Update Resource Group'
            resourceGroupName: '{resource group name }'
            location: 'Central US'
            templateLocation: 'Linked artifact'
            csmFile: '{json file}'
            overrideParameters: '-webAppName $(WebAppName)'
            deploymentMode: 'Incremental'
  - stage: APPdeploy
    dependsOn: ARMdeploy
    condition: succeeded()
    jobs:
      - job: APP
        steps:
        - task: AzureRmWebAppDeployment@4
          displayName: 'Azure App Service Deploy: MerlinAngular-webapp'
          inputs:
            ConnectionType: 'AzureRM'
            azureSubscription: '{Subscription name}'
            appType: 'webApp'
            WebAppName: '$(WebAppName)'
            packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'

在我的 ARM json 文件中,我定义了参数 name webAppName,并使用来自任务的值而不是使用parameter.json文件

在此处输入图像描述

并且在 YAML 配置中,使用overrideParameters: '-WebAppName $(WebAppName)'来覆盖这个参数值。因为WebAppName是一个预定义变量,可以在一个发布管道的所有阶段获取值。另外,我将 设置APP deploy stage为取决于ARM deploy stage's 成功。现在,在 ARM 部署完成后,WebApp 名称将传递给作业,以便可以使用此 WebApp 名称部署 APP 部署。


但是,由于您没有显示您的 ARM 模板结构,如果您在parameter.json文件中定义了 WebApp 名称,则需要安装扩展ARM Outputs ,然后在 ARM 模板部署完成后使用任务ARM Outputs获取此变量。WebApp name

此任务可以将 ARM deploy 的所有输出转换为变量,现在您仍然可以使用$(xxx)将值传递给 APP deploy 任务。

希望这些方法可以帮到你。


推荐阅读