快速入门:使用 ARM 模板将 Linux Web 应用部署到 Azure

Azure DevOps Services

开始使用 Azure 资源管理器模板(ARM 模板)通过 MySQL 部署 Linux Web 应用。 ARM 模板提供了一种在代码中保存配置的方法。 使用 ARM 模板是基础结构即代码方法的一个示例,并且是良好的 DevOps 做法。

ARM 模板是定义项目基础结构和配置的 JavaScript 对象表示法 (JSON) 文件。 模板使用声明性语法。 在声明性语法中,你可以在不编写创建部署的编程命令序列的情况下,描述预期部署。

可以使用 JSON 或 Bicep 语法部署 Azure 资源。 详细了解模板的 JSON 和 Bicep 之间的差异

先决条件

开始前,需要具备:

获取代码

创建 GitHub 上此存储库的分支:

https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.web/webapp-linux-managed-mysql

查看模板

本快速入门中使用的模板来自 Azure 快速启动模板

该模板定义了多个资源:

创建管道并部署模板

  1. 登录到 Azure DevOps 组织,并导航到你的项目。 如果你没有项目,请创建一个

  2. 转到“管道”,然后选择“创建管道”。

  3. 选择“GitHub”作为源代码位置。

    注意

    你可能会被重定向到 GitHub 进行登录。 如果是这样,请输入 GitHub 凭据。

  4. 出现存储库列表时,选择 yourname/azure-quickstart-templates/

    注意

    你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果出现这种情况,请选择“批准并安装”。

  5. 出现“配置”选项卡时,选择 Starter pipeline

  6. 将管道的内容替换为以下代码:

    trigger:
    - none
    
    pool:
      vmImage: 'ubuntu-latest'
    
  7. 创建三个变量:siteNameadministratorLoginadminPassadminPass 需是机密变量。

    • 选择“变量”。
    • 使用 + 符号添加三个变量。 创建 adminPass 时,请选择“将此值保密”。
    • 完成后,单击“保存”。
    变量 是否为机密?
    siteName mytestsite
    adminUser fabrikam
    adminPass Fqdn:5362!
  8. 映射机密变量 $(adminPass),使其在 Azure 资源组部署任务中可用。 在 YAML 文件的顶部,将 $(adminPass) 映射到 $(ARM_PASS)

    variables:
      ARM_PASS: $(adminPass)
    
    trigger:
    - none
    
    pool:
      vmImage: 'ubuntu-latest'
    
  9. 将“复制文件”任务添加到 YAML 文件。 你将使用 101-webapp-linux-managed-mysql 项目。 有关详细信息,请参阅使用 Azure Database for MySQL 在 Linux 上生成 Web 应用存储库。

    variables:
      ARM_PASS: $(adminPass)
    
    trigger:
    - none
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'quickstarts/microsoft.web/webapp-linux-managed-mysql/'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
    
  10. 添加并配置“Azure 资源组部署”任务。

    该任务引用你使用“复制文件”任务生成的工件和管道变量。 在配置任务时已设置这些值。

    • 部署范围(deploymentScope):将部署范围设置为 Resource Group。 可将部署目标设定为管理组、Azure 订阅或资源组。
    • Azure 资源管理器连接(azureResourceManagerConnection):选择你的 Azure 资源管理器服务连接。 若要配置新的服务连接,请从列表中选择 Azure 订阅,然后单击“授权”。 有关更多详细信息,请参阅连接到 Microsoft Azure
    • 订阅(subscriptionId):选择应部署到的订阅。
    • 操作(action):设置为 Create or update resource group 以创建新资源组或更新现有资源组。
    • 资源组:设置为 ARMPipelinesLAMP-rg 以命名新资源组。 如果这是现有的资源组,则会更新它。
    • 位置(location):部署资源组的位置。 设置为最近的位置(例如“美国西部”)。 如果订阅中已存在资源组,则会忽略此值。
    • 模板位置(templateLocation):设置为 Linked artifact。 这是模板和参数文件的位置。
    • 模板(csmFile):设置为 $(Build.ArtifactStagingDirectory)/azuredeploy.json。 这是 ARM 模板的路径。
    • 模板参数(csmParametersFile):设置为 $(Build.ArtifactStagingDirectory)/azuredeploy.parameters.json。 这是 ARM 模板的参数文件的路径。
    • 替代模板参数(overrideParameters):设置为 -siteName $(siteName) -administratorLogin $(adminUser) -administratorLoginPassword $(ARM_PASS) 以使用之前创建的变量。 这些值将替换模板参数文件中设置的参数。
    • 部署模式(deploymentMode):部署资源的方式。 设置为 Incremental。 设置为 Incremental 会保留不包含在 ARM 模板中的资源,并且速度比 Complete 更快。 使用 Validate 模式可以在部署之前发现模板的问题。
    variables:
      ARM_PASS: $(adminPass)
    
    trigger:
    - none
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    - task: CopyFiles@2
      inputs:
        SourceFolder: 'quickstarts/microsoft.web/webapp-linux-managed-mysql/'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: AzureResourceManagerTemplateDeployment@3
      inputs:
        deploymentScope: 'Resource Group'
        azureResourceManagerConnection: '<your-resource-manager-connection>'
        subscriptionId: '<your-subscription-id>'
        action: 'Create Or Update Resource Group'
        resourceGroupName: 'ARMPipelinesLAMP-rg'
        location: '<your-closest-location>'
        templateLocation: 'Linked artifact'
        csmFile: '$(Build.ArtifactStagingDirectory)/azuredeploy.json'
        csmParametersFile: '$(Build.ArtifactStagingDirectory)/azuredeploy.parameters.json'
        overrideParameters: '-siteName $(siteName) -administratorLogin $(adminUser) -administratorLoginPassword $(ARM_PASS)'
        deploymentMode: 'Incremental'
    
  11. 单击“保存并运行”以部署模板。 管道作业随即会启动,在几分钟后,根据你的代理,作业状态应指示 Success

查看已部署的资源

  1. 验证是否已部署资源。 在 Azure 门户中转到 ARMPipelinesLAMP-rg 资源组,确认是否可以看到应用服务、应用服务计划和 Azure Database for MySQL 服务器资源。

    Azure 门户中的 ARM 模板资源

    还可以使用 Azure CLI 来验证资源。

    az resource list --resource-group ARMPipelinesLAMP-rg --output table
    
  2. 转到新站点。 如果已将 siteName 设置为 armpipelinetestsite,则该站点位于 https://armpipelinetestsite.azurewebsites.net/

清理资源

还可以使用 ARM 模板来删除资源。 将“Azure 资源组部署”任务中的 action 值更改为 DeleteRG。 还可以删除 templateLocationcsmFilecsmParametersFileoverrideParametersdeploymentMode 的输入。

variables:
  ARM_PASS: $(adminPass)

trigger:
- none

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: CopyFiles@2
  inputs:
    SourceFolder: 'quickstarts/microsoft.web/webapp-linux-managed-mysql/'
    Contents: '**'
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: '<your-resource-manager-connection>'
    subscriptionId: '<your-subscription-id>'
    action: 'DeleteRG'
    resourceGroupName: 'ARMPipelinesLAMP-rg'
    location: ''<your-closest-location>'

后续步骤