你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

注意

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

从 2024 年 9 月 30 日开始,标准消耗和专用计划将弃用,六个月后将完全关闭。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

本文适用于:✔️ 基本版/标准版 ✔️ 企业版

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

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

以下视频介绍如何使用你选择的工具(包括 Azure Pipelines)进行端到端自动化。


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

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

构建和部署应用

现在可以使用一系列任务来生成和部署项目。 以下 Azure Pipelines 模板定义变量、用于生成应用程序的 .NET Core 任务,以及用于部署应用程序的 Azure Spring Apps 任务。

variables:
  workingDirectory: './steeltoe-sample'
  planetMainEntry: 'Microsoft.Azure.SpringCloud.Sample.PlanetWeatherProvider.dll'
  solarMainEntry: 'Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.dll'
  planetAppName: 'planet-weather-provider'
  solarAppName: 'solar-system-weather'
  serviceName: '<your service name>'

steps:
# Restore, build, publish and package the zipped planet app
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: false
    arguments: '--configuration Release'
    zipAfterPublish: false
    modifyOutputPath: false
    workingDirectory: $(workingDirectory)

# Deploy the planet app
- task: AzureSpringCloud@0
  inputs:
    azureSubscription: '<Service Connection Name>'
    Action: 'Deploy'
    AzureSpringCloud: $(serviceName)
    AppName: 'testapp'
    DeploymentType: 'Artifacts'
    UseStagingDeployment: false
    DeploymentName: 'default'
    Package: $(workingDirectory)/src/$(planetAppName)/publish-deploy-planet.zip
    RuntimeVersion: 'NetCore_31'
    DotNetCoreMainEntryPath: $(planetMainEntry)

# Deploy the solar app
- task: AzureSpringCloud@0
  inputs:
    azureSubscription: '<Service Connection Name>'
    Action: 'Deploy'
    AzureSpringCloud: $(serviceName)
    AppName: 'testapp'
    DeploymentType: 'Artifacts'
    UseStagingDeployment: false
    DeploymentName: 'default'
    Package: $(workingDirectory)/src/$(solarAppName)/publish-deploy-solar.zip
    RuntimeVersion: 'NetCore_31'
    DotNetCoreMainEntryPath: $(solarMainEntry)

设置 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 项目的连接。 有关说明,请参阅连接到 Microsoft 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>'

部署并指定生成器(仅限企业计划)

如果你使用的是 Azure Spring Apps 企业计划,则还可以使用 builder 选项指定用于部署操作的生成器,如以下示例所示。 有关详细信息,请参阅使用 Tanzu 生成服务

- task: AzureSpringCloud@0
  inputs:
    azureSubscription: '<your-service-connection-name>'
    Action: 'Deploy'
    AzureSpringCloud: '<your-Azure-Spring-Apps-service-instance-name>'
    AppName: '<app-name>'
    UseStagingDeployment: false
    DeploymentName: 'default'
    Package: './target/your-result-jar.jar'
    Builder: '<your-Tanzu-Build-Service-Builder-resource>'

后续步骤