自动将应用程序部署到 Azure Spring Apps

注意

基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。

本文演示如何使用适用于 Azure Pipelines 的 Azure Spring Apps 任务来部署应用程序。

通过持续集成和持续交付工具,你可以快速地将更新部署到现有应用程序,工作量较少且风险较低。 Azure DevOps 可帮助你组织和控制这些关键作业。

设置 Azure Spring Apps 实例和 Azure DevOps 项目

首先,使用以下步骤设置要与 Azure DevOps 配合使用的现有 Azure Spring Apps 实例。

  1. 转到你的 Azure Spring Apps 实例,然后创建一个新应用。
  2. 转到 Azure DevOps 门户,然后在选择的组织下创建一个新项目。 如果你没有 Azure DevOps 组织,可以创建一个。
  3. 选择“存储库”,然后将 Spring Boot 演示代码导入存储库。

创建 Azure 资源管理器服务连接

接下来,创建 Azure 资源管理器服务到 Azure DevOps 项目的连接。 有关说明,请参阅 连接到 Azure。 请务必选择用于 Azure Spring Apps 服务实例的同一订阅。

构建和部署应用

现在可以使用一系列任务来生成和部署项目。 以下部分介绍用于通过 Azure DevOps 部署应用的各种选项。

使用管道进行部署

若要使用管道进行部署,请执行以下步骤:

  1. 选择“管道”,然后使用 Maven 模板创建新管道。

  2. 编辑 azure-pipelines.yml 文件,将 mavenPomFile 字段设置为“complete/pom.xml” 。

  3. 选择右侧的“显示助手”,然后选择“Azure Spring Apps”模板。

  4. 选择你为 Azure 订阅创建的服务连接,然后选择你的 Azure Spring Apps 实例和应用实例。

  5. 禁用“使用过渡部署”。

  6. 将“包或文件夹”设置为“complete/target/spring-boot-complete-0.0.1-SNAPSHOT.jar”。

  7. 选择“添加”,将此任务添加到管道。

    你的管道设置应与下图匹配。

    Azure DevOps 屏幕截图,其中显示了“新建管道”设置。

    还可以使用以下管道模板生成和部署项目。 此示例首先定义用于生成应用程序的 Maven 任务,接下来定义第二个任务,该任务使用适用于 Azure Pipelines 的 Azure Spring Apps 任务来部署 JAR 文件。

    steps:
    - task: Maven@3
      inputs:
        mavenPomFile: 'complete/pom.xml'
    - task: AzureSpringCloud@0
      inputs:
        azureSubscription: '<your service connection name>'
        Action: 'Deploy'
        AzureSpringCloud: <your Azure Spring Apps service>
        AppName: <app-name>
        DeploymentType: 'Artifacts'
        UseStagingDeployment: false
        DeploymentName: 'default'
        Package: ./target/your-result-jar.jar
    
  8. 选择“保存并运行”,然后等待作业完成。

蓝绿部署

在上一部分介绍的部署在部署后会立即接收到应用程序流量。 这样,你便可以在应用程序接收任何客户流量之前,先在生产环境中对其进行测试。

编辑管道文件

若要按照前面所述的相同方式生成应用程序并将其部署到过渡部署,请使用以下模板。 在此示例中,过渡部署必须已经存在。 有关替代方法,请参阅蓝绿部署策略

steps:
- task: Maven@3
  inputs:
    mavenPomFile: 'pom.xml'
- task: AzureSpringCloud@0
  inputs:
    azureSubscription: '<your service connection name>'
    Action: 'Deploy'
    AzureSpringCloud: <your Azure Spring Apps service>
    AppName: <app-name>
    DeploymentType: 'Artifacts'
    UseStagingDeployment: true
    Package: ./target/your-result-jar.jar
- task: AzureSpringCloud@0
  inputs:
    azureSubscription: '<your service connection name>'
    Action: 'Set Production'
    AzureSpringCloud: <your Azure Spring Apps service>
    AppName: <app-name>
    UseStagingDeployment: true

使用“发布”部分

以下步骤说明如何从“发布”部分启用蓝绿部署。

  1. 选择“管道”,并为 Maven 生成和发布工件创建新管道。

    1. 选择“Azure Repos Git”作为代码位置。
    2. 选择代码所在的存储库。
    3. 选择“Maven”模板,并修改文件以将 mavenPomFile 字段设置为 complete/pom.xml
    4. 选择右侧的“显示助手”,然后选择“发布生成工件”模板 。
    5. 将“发布路径”设置为“complete/target/spring-boot-complete-0.0.1-SNAPSHOT.jar”。
    6. 选择“保存并运行”。
  2. 依次选择“发布”、“创建发布” 。

  3. 添加新管道,然后选择“空作业”以创建作业。

  4. 在“阶段”下,选择“1 个作业,0 个任务”行

    Azure DevOps 的屏幕截图,其中显示了“管道”选项卡,并突出显示了“1 个作业,0 个任务”链接。

    1. 选择“+”以将任务添加到作业。
    2. 搜索“Azure Spring Apps”模板,然后选择“添加”将任务添加到作业。
    3. 选择“Azure Spring Apps 部署:”以编辑任务。
    4. 使用应用信息填充此任务,然后禁用“使用过渡部署”。
    5. 启用“如果不存在过渡部署,则新建一个”,然后在“部署”中输入名称 。
    6. 选择“保存”以保存此任务。
    7. 选择“确定”。
  5. 依次选择“管道”、“添加工件” 。

    1. 在“源(生成管道)”下,选择前面创建的管道。
    2. 依次选择“添加”和“保存”。
  6. 在“阶段”下选择“1 个作业,1 个任务” 。

  7. 导航到“阶段 1”中的“Azure Spring Apps 部署”任务,然后选择“包或文件夹”旁边的省略号。

  8. 在对话框中选择“spring-boot-complete-0.0.1-SNAPSHOT.jar”,然后选择“确定”。

    Azure DevOps 的屏幕截图,其中显示了“选择文件或文件夹”对话框。

  9. 选择“+”,将另一个“Azure Spring Apps”任务添加到作业。

  10. 将操作更改为“设置生产部署”。

  11. 选择“保存”,然后选择“创建发布”以自动启动部署 。

若要验证应用的当前发布状态,请选择“查看发布”。 完成此任务后,访问 Azure 门户以验证应用状态。

从源进行部署

若要直接部署到 Azure 而不执行单独的生成步骤,请使用以下管道模板。

- task: AzureSpringCloud@0
  inputs:
    azureSubscription: '<your service connection name>'
    Action: 'Deploy'
    AzureSpringCloud: <your Azure Spring Apps service>
    AppName: <app-name>
    DeploymentType: 'Artifacts'
    UseStagingDeployment: false
    DeploymentName: 'default'
    Package: $(Build.SourcesDirectory)

从自定义映像进行部署

若要直接从现有容器映像进行部署,请使用以下管道模板。

- task: AzureSpringCloud@0
  inputs:
    azureSubscription: '<your service connection name>'
    Action: 'Deploy'
    AzureSpringCloud: '<your Azure Spring Apps service>'
    AppName: '<app-name>'
    DeploymentType: 'CustomContainer'
    UseStagingDeployment: false
    DeploymentName: 'default'
    ContainerRegistry: 'docker.io'  # or your Azure Container Registry, e.g: 'contoso.azurecr.io'
    RegistryUsername: '$(username)'
    RegistryPassword: '$(password)'
    ContainerImage: '<your image tag>'

后续步骤