练习 - 部署示例 Spring Boot 应用程序
在此练习中,你将使用自动化工作流来生成并部署 Spring Boot 示例应用程序。
设置一个 GitHub 操作来部署示例应用程序
现在,你已预配了 Azure 资源,可以部署示例 Spring Boot 应用程序了。
为了创建 Maven GitHub 工作流,你将使用 Azure 应用服务门户的部署中心提供的内置持续集成和持续交付 (CI/CD) 向导工具。
Azure 应用服务部署中心自动生成基于应用程序堆栈的 GitHub Actions 工作流文件。 然后,部署中心将该文件提交到正确目录中的 GitHub 存储库。 部署中心还会将你的 GitHub 操作链接到 Azure 应用服务发布配置文件。
在 Azure 门户中,转到你的 Azure 应用服务 Web 应用。
在左侧窗格上,展开“部署”,选择“部署中心”。
在“源”下拉列表中的“持续部署(CI/CD)”下,选择“GitHub”。
选择“GitHub Actions”。 (这应该是默认值,但如果不是,请选择“更改提供程序”以加载提供程序选项。)
在“设置”下的下拉列表中,执行以下操作:
a. 选择你的 GitHub 存储库。
b. 对于“分支”,请选择“main”。
c. 对于“应用程序堆栈”,请选择“JAVA 8”。在最后一页上,检查所做的选择,并预览将提交到存储库的工作流文件。
选择“保存”,将工作流文件提交到存储库,然后立即开始生成并部署你的应用。
注意
通过选择“操作”选项卡,然后选择“生成并部署”工作流和“重新运行作业”,也可触发你的存储库中的 GitHub Actions 工作流。
确认 GitHub Actions 生成
在 GitHub 存储库中,选择“操作”选项卡,然后在左侧的“所有工作流”下,选择“生成 JAR 应用并部署到 Azure Web 应用”。
接下来,在右侧表的“工作流运行”下,选择工作流运行“添加或更新应用服务部署工作流配置”。
等待工作流运行完成,然后在工作流运行的部署作业下,复制显示 Azure Web 应用 URL 的部署作业中的 URL。
最后,在浏览器中打开 URL,并验证 Java 应用程序已部署、已连接到 MySQL 数据库并返回数据。
后续步骤
祝贺你! 现在,你有了两个 GitHub Actions 工作流:一个预配操作,一个“生成并部署”操作。
每次你输入 git push
命令来提交代码时,都会触发“生成并部署”操作,然后系统就会部署你的应用程序。
重要
如果资源已经存在,则重新运行 GitHub 操作的预配不会重新创建资源。 你需要手动删除资源组或资源,然后重新运行 GitHub 操作。
重新运行“生成并部署”GitHub 操作会替换你的应用程序。
如果重新创建应用服务实例,则还需改为使用新的发布配置文件。 只需要更改以下行:
publish-profile: ${{ secrets.AzureAppService_PublishProfile_c1ee8d191003493b9c9e13a9b78ad2c3 }}
设置 Azure 管道以部署示例应用程序
与之前一样,你需要创建一个 Azure 管道来生成并部署你的应用程序。
在 Azure DevOps 中,转到“Project”,依次选择“Pipelines”和“New Pipeline”(右上角)。
现在将为你提供 4 个选项卡来设置管道:
- 在“连接”选项卡上,选择“GitHub”(YAML 文件)。
- 在“选择”选项卡上,选择包含模板的 GitHub 存储库。
- 在“配置”选项卡上,选择以使用“现有的 Azure Pipelines YAML 文件”。
- 在路径中,这次选择“/azuredevops/build_deploy.yml”
- 选择“继续”以转到“查看”选项卡,在运行管道前查看管道。
在“查看管道 YAML”屏幕上,检查要用于创建管道的 YAML 文件:
name: Build and Deploy
trigger:
- main
stages:
# Build your Spring Boot App using Maven
- stage: Build
displayName: Build stage
jobs:
- job: MavenPackageAndPublishArtifacts
displayName: Maven Package and Publish Artifacts
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Maven@3
displayName: 'Maven Package'
inputs:
mavenPomFile: 'pom.xml'
- task: CopyFiles@2
displayName: 'Copy Files to artifact staging directory'
inputs:
SourceFolder: '$(System.DefaultWorkingDirectory)'
Contents: '**/target/*.?(war|jar)'
TargetFolder: $(Build.ArtifactStagingDirectory)
- upload: $(Build.ArtifactStagingDirectory)
artifact: drop
# Deploy to Azure using the AzureWebApp task using your Service Connection
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeployLinuxWebApp
displayName: Deploy Linux Web App
environment: 'production'
pool:
vmImage: 'ubuntu-latest'
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
displayName: 'Azure Web App Deploy'
inputs:
azureSubscription: $(serviceConnection)
appType: webAppLinux
appName: '$(webAppName)'
package: '$(Pipeline.Workspace)/drop/**/target/*.?(war|jar)'
让我们来看看我们在“Build”配置中使用的一些字段:
- azureSubscription:你的 Azure 订阅
- appType:你的 Web 应用类型
- appName:现有应用服务的名称
- package:包的文件路径或包含应用服务内容的文件夹
添加生成变量
对于我们的预配管道,在保存并运行生成和部署管道之前,你需要添加管道变量:
- 选择顶部的“Variables”。
- 添加一个名为“serviceConnection”的变量,其值作为服务连接的名称。
- 选择右下角的“确定”以保存变量。
- 通过应用服务名称(在 Terraform 变量“application_name”中定义的相同值)添加第二个名为“webAppName”的变量。
- 选择“确定”以保存变量。
- 在右下角选择“保存”以保存这两个变量。
监视管道运行
- 选择 && 以保存并运行管道
- 正如你对预配管道所做的那样,跟踪生成过程的每个阶段和步骤。
- 请验证你的 Java 应用程序已部署,已连接到 MySQL 数据库并返回数据。
后续步骤
祝贺你! 现在有两个 Azure 管道工作流:预配管道和“生成并部署”管道。
每次你输入 git push
命令将代码提交到主分支时,都会触发“生成并部署”管道,然后系统就会部署你的应用程序。
重要
如果资源已经存在,则重新运行预配管道不会重新创建资源。 你需要手动删除资源组或资源,然后重新运行管道。 若要详细了解如何在生产中更好地实现这一点,可参阅“摘要”部分。
重新运行“生成并部署”管道会替换你的应用程序。
下一单元是知识检查,看看你在本模块中学会了哪些知识。