教程:使用 Jenkins 和 Azure CLI 将应用部署到 Azure Spring Cloud
注意
Azure Spring Apps 是 Azure Spring Cloud 服务的新名称。 虽然该服务有新名称,但一些地方仍会使用旧名称,我们仍在更新屏幕截图、视频和图形等资产。
Azure Spring Apps 是一种完全托管的微服务开发,具有内置服务发现和配置管理。 借助此服务,可以轻松地将基于 Spring Boot 的微服务应用程序部署到 Azure。 本教程演示如何在 Jenkins 中使用 Azure CLI 自动实现 Azure Spring Apps 的持续集成和交付(CI/CD)。
在本教程中,你将完成以下任务:
- 预配服务实例并启动 Java Spring 应用程序
- 准备 Jenkins 服务器
- 在 Jenkins 管道中使用 Azure CLI 生成并部署微服务应用程序
先决条件
- Azure 订阅:如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- Jenkins: 在 Linux VM 上安装 Jenkins
- GitHub 帐户:如果没有 GitHub 帐户,请在开始之前创建一个 免费帐户 。
预配服务实例并启动 Java Spring 应用程序
我们使用 Piggy Metrics 作为示例 Microsoft 服务应用程序,并遵循快速入门中的相同步骤:使用 Azure CLI 启动 Java Spring 应用程序来预配服务实例并设置应用程序。 如果已完成相同的过程,可以跳到下一部分。 否则,请执行下面提供的 Azure CLI 命令。 请参阅快速入门:使用 Azure CLI 启动 Java Spring 应用程序以获取详细信息。
本地计算机需满足与 Jenkins 生成服务器相同的先决条件。 请确保安装以下内容,以便生成并部署微服务应用程序:
- Git
- JDK 8
- Maven 3.0 或更高版本
- 已安装 Azure CLI 2.0.67 或更高版本
安装 Azure Spring Apps 扩展:
az extension add --name spring
创建资源组以包含 Azure Spring Apps 服务:
az group create --location eastus --name <resource group name>
预配 Azure Spring Apps 的实例:
az spring create -n <service name> -g <resource group name>
将 Piggy 指标存储库分叉到你自己的 GitHub 帐户。 在本地计算机中,将存储库克隆到名为
source-code
的目录:mkdir source-code git clone https://github.com/<your GitHub id>/piggymetrics
设置配置服务器。 请确保将 <your GitHub id> 替换为正确的值。
az spring config-server git set -n <your-service-name> --uri https://github.com/<your GitHub id>/piggymetrics --label config
生成项目:
cd piggymetrics mvn clean package -D skipTests
创建三项微服务:gateway、auth-service 和 account-service:
az spring app create --n gateway -s <service name> -g <resource group name> az spring app create --n auth-service -s <service name> -g <resource group name> az spring app create --n account-service -s <service name> -g <resource group name>
部署应用程序:
az spring app deploy -n gateway -s <service name> -g <resource group name> --jar-path ./gateway/target/gateway.jar az spring app deploy -n account-service -s <service name> -g <resource group name> --jar-path ./account-service/target/account-service.jar az spring app deploy -n auth-service -s <service name> -g <resource group name> --jar-path ./auth-service/target/auth-service.jar
将公共终结点分配到网关:
az spring app update -n gateway -s <service name> -g <resource group name> --is-public true
查询网关应用程序以获取 URL,以便验证应用程序是否正在运行。
az spring app show --name gateway | grep url
导航到上一个命令提供的 URL,以运行 PiggyMetrics 应用程序。
准备 Jenkins 服务器
在本部分,我们准备 Jenkins 服务器,以便运行一个适合测试的生成项目。 但是,考虑到安全影响,应该使用 Azure VM 代理或 Azure 容器代理来运转 Azure 中的代理,以便运行生成项目。
安装插件
登录到 Jenkins 服务器。
选择“管理 Jenkins”。
选择“管理插件”。
在“可用”选项卡上选择以下插件:
如果这些插件没有显示在列表中,请检查“已安装”选项卡以查看它们是否已安装。
若要安装插件,请选择“立即下载” ,并在重启后安装。
重启 Jenkins 服务器以完成安装。
在 Jenkins 凭据存储中添加 Azure 服务主体凭据
部署到 Azure 需要 Azure 服务主体。 有关详细信息,请参阅“部署到 Azure 应用服务”教程中的创建服务主体部分。
az ad sp create-for-rbac
的输出如下所示:{ "appId": "xxxxxx-xxx-xxxx-xxx-xxxxxxxxxxxx", "displayName": "xxxxxxxjenkinssp", "name": "http://xxxxxxxjenkinssp", "password": "xxxxxx-xxx-xxxx-xxx-xxxxxxxxxxxx", "tenant": "xxxxxx--xxx-xxxx-xxx-xxxxxxxxxxxx" }
在 Jenkins 仪表板中,选择“凭据”>“系统”。 然后选择“全局凭据(不受限制)”。
选择“添加凭据”。
选择“Microsoft Azure 服务主体”作为类型。
提供以下字段的值:
- 订阅 ID:Azure 订阅 ID
- 客户端 ID:服务主体 appid
- 客户端密码:服务主体密码
- 租户 ID:Microsoft 帐户租户 ID
- Azure 环境:为环境选择适当的值。 例如,对 Azure 全局使用 Azure
- ID:设置为
azure_service_principal
. 我们将在本文后面的步骤中使用此 ID - 说明:此值是可选的,但建议从文档/维护的角度来看。
安装 Maven 和 Azure CLI spring 扩展
示例管道使用 Maven 生成和 Azure CLI 部署到服务实例。 Jenkins 安装完成时,它将创建名为 jenkins 的管理员帐户。 确保用户 jenkins 有权运行 spring 扩展。
通过 SSH 连接到 Jenkins 控制器。
安装 Maven。
sudo apt-get install maven
输入
az version
验证是否已安装 Azure CLI。 如果未安装 Azure CLI,请参阅 安装 Azure CLI。切换到
jenkins
用户:sudo su jenkins
安装 spring 扩展:
az extension add --name spring
创建 Jenkinsfile
在自己的存储库 -
https://github.com/your_github_id/piggymetrics
- 在根目录中创建 Jenkinsfile 。按如下所示更新 文件。 请确保替换资源组名称和<>服务名称>的值。< 将 azure_service_principal 替换为正确的 ID(如果你在 Jenkins 中添加凭据时使用了其他值)。
node { stage('init') { checkout scm } stage('build') { sh 'mvn clean package' } stage('deploy') { withCredentials([azureServicePrincipal('azure_service_principal')]) { // Log in to Azure sh ''' az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID az account set -s $AZURE_SUBSCRIPTION_ID ''' // Set default resource group name and service name. Replace <resource group name> and <service name> with the right values sh 'az config set defaults.group=<resource group name>' sh 'az config set defaults.spring=<service name>' // Deploy applications sh 'az spring app deploy -n gateway --jar-path ./gateway/target/gateway.jar' sh 'az spring app deploy -n account-service --jar-path ./account-service/target/account-service.jar' sh 'az spring app deploy -n auth-service --jar-path ./auth-service/target/auth-service.jar' sh 'az logout' } } }
保存并提交更改。
创建作业
在 Jenkins 仪表板上,选择“新建项”。
为作业提供名称 Deploy-PiggyMetrics 并选择“管道”。 单击“确定”。
选择“管道”选项卡。
对于“Definition”(定义),选择“Pipeline script from SCM”(来自 SCM 的管道脚本)。
对于“SCM”,选择“Git”。
输入分叉存储库的 GitHub URL:
https://github.com/<your GitHub id>/piggymetrics.git
。对于 分支说明符(“any”为黑色),请选择 /Azure。
对于 脚本路径,请选择 Jenkinsfile。
选择 “保存”
验证并运行作业
在运行作业之前,请编辑登录输入框中的文本以 输入登录 ID。
在存储库中,打开
index.html
。/gateway/src/main/resources/static/
搜索
enter your login
该文本并将其更新为enter login ID
。<input class="frontforms" id="frontloginform" name="username" placeholder="enter login ID" type="text" autocomplete="off"/>
保存并提交更改。
在 Jenkins 中手动运行作业。 在 Jenkins 仪表板上,选择作业
Deploy-PiggyMetrics
,然后选择“立即生成”。
作业完成后,导航到应用程序的公共 IP gateway
,并验证应用程序是否已更新。
清理资源
如果不再需要本文中创建的资源,请将其删除:
az group delete -y --no-wait -n <resource group name>