azure - 使用 ARM 模板创建 Azure Web 应用程序后,我们可以将 Web 应用程序名称作为参数传递给 YAML 管道吗?

标签 azure azure-devops

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

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

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

感谢您提前提供的帮助。

最佳答案

与往常一样,我们不会单独执行 ARM 模板部署任务和 Azure 应用服务部署任务。在第一阶段执行ARM部署,然后在第二阶段,获取上一阶段输出的WebsiteNameResourceGroupName:

enter image description here

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

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 文件中,我定义了参数名称 webAppName,并使用来自任务的值,而不是使用 parameter.json 文件

enter image description here

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

<小时/>

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

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

希望这些方法可以帮助到您。

关于azure - 使用 ARM 模板创建 Azure Web 应用程序后,我们可以将 Web 应用程序名称作为参数传递给 YAML 管道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57884094/

相关文章:

asp.net-mvc - Azure AD 登录后出现问题,Web 浏览器(Chrome、Firefox)中的声明为空

azure - Power BI 不支持 DocumentDB 分区集合吗?

sql - 对于这种情况,为什么 SQL Azure 数据库性能在 Web 版和新高级版上差异如此之大

angular - Azure CDN - 与 Verizon 结合 Identity Server 4 重写 Angular 应用程序的 URL

azure - Azure SQL 数据库的连接日志

azure - Azure CI 管道刚刚开始运行时发送电子邮件

tfs - TFS与VSTS的 future

azure-devops - 在 Visual Studio Team Services 中为不同项目设置不同的电子邮件地址

azure - 在 Azure Devops Pipeline 中构建 API 和集成测试工件

c# - Selenium webdriver 测试 100% 在本地通过,100% 在 VSTS 服务器上失败