You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Gradle azurewebapp插件部署SpringBoot的Bitbucket CD问题

方案可行性结论

Bitbucket Pipelines部署SpringBoot Jar到Azure App Service的方案完全合理,不需要强制更换Azure Pipeline。如果你们的代码托管、评审、CI流程已经全部跑在Bitbucket上,直接复用Bitbucket Pipelines做CD是投入产出比最高的选择,跨平台对接Azure Pipeline反而需要额外处理账号打通、代码同步、权限打通的问题,维护成本更高。Azure Pipeline更适合全研发流程都基于Azure DevOps搭建的团队。

流水线变量获取说明

你列出的AZURE_APP_ID/AZURE_PASSWORD/AZURE_TENANT_ID三个认证参数,都不是现有App Service的属性,也不是你个人管理员账号的登录凭证,本质是Azure AD服务主体的认证信息——Bitbucket通过这个预授权的服务主体获得操作Azure资源的权限,全程无交互,完全适配自动化CD流程。各变量的具体获取方式如下:

  • AZURE_TENANT_ID

    该值是你Azure账号所属组织(租户)的全局唯一标识,相当于整个Azure资源目录的身份ID。
    获取路径:登录Azure门户,进入「Azure Active Directory」服务,在概述页面直接复制「租户ID」字段即可。
  • AZURE_APP_ID

    该值不是你部署的SpringBoot应用对应的App Service ID,是Azure AD应用注册(即服务主体)的客户端ID。
    获取步骤:
    1. 在Azure Active Directory页面进入「应用注册」菜单,点击「新注册」
    2. 名称可自定义(比如bitbucket-cd-sp),受支持账户类型选择「仅此组织目录中的账户」,重定向URI无需填写,直接完成注册
    3. 注册完成后,概述页的「应用程序(客户端) ID」就是需要的AZURE_APP_ID

    注意:注册完服务主体必须配置权限:进入目标App Service所在的资源组,打开「访问控制(IAM)」,添加角色分配,角色选择「网站参与者」(遵循最小权限原则,不需要给全局参与者或者管理员权限),成员选择刚才创建的服务主体,保存即可完成授权。

  • AZURE_PASSWORD

    该值绝对不是你个人账号的登录密码,是服务主体的客户端密钥。
    获取路径:回到刚才创建的应用注册详情页,进入「证书和密码」菜单,点击「新建客户端密码」,填写备注(比如bitbucket-pipeline-key),按公司安全规则选择过期时间,确认创建。该密钥仅在创建完成时显示一次,关闭页面后无法再次查看,请及时复制保存,这个值就是AZURE_PASSWORD。
  • AZURE_RESOURCE_GROUP

    即目标App Service所属的资源组名称,直接在Azure门户「资源组」列表中找到对应资源组,复制名称即可,注意大小写完全匹配。
  • AZURE_APP_NAME

    即你已经创建好的Azure App Service的应用名称,就是之前用azurewebapp插件部署时填写的应用名,在App Service列表中直接复制名称即可。
SpringBoot Jar部署注意事项

因为你是打包为独立Jar的SpringBoot应用,不要直接把构建产物上传部署,需要做几个适配:

  1. 在项目根目录创建web.config文件,配置Azure平台的Java启动命令,内容参考如下(对应Java 17运行时,其他版本替换路径即可):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%JAVA_HOME%\bin\java.exe"
                  arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\app.jar&quot;">
    </httpPlatform>
  </system.webServer>
</configuration>
  1. 流水线打包Zip时,必须将重命名后的app.jar和web.config放在Zip包根目录,不要嵌套额外文件夹,否则部署后会找不到启动入口。
  2. 所有敏感认证变量在Bitbucket仓库配置时,务必勾选「Secure」选项,避免变量值明文出现在流水线日志中造成泄露。
  3. 提前把Azure App Service的运行时栈设置为对应版本的Java SE,不要选Tomcat等Web容器,避免和内嵌Tomcat的SpringBoot应用冲突。

可直接参考的流水线配置片段:

pipelines:
  branches:
    main:
      - step:
          name: Build and Deploy to Azure
          image: maven:3.8.6-openjdk-17
          caches:
            - maven
          script:
            - mvn clean package -DskipTests
            # 整理部署文件到zip根目录
            - cp target/*.jar app.jar
            - zip $ZIP_FILE app.jar web.config
            # 安装Azure CLI
            - apt-get update && apt-get install ca-certificates curl apt-transport-https lsb-release gnupg -y
            - curl -s https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg
            - echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/azure-cli.list
            - apt-get update && apt-get install azure-cli -y
            # 服务主体无交互登录部署
            - az login --service-principal -u $AZURE_APP_ID -p $AZURE_PASSWORD --tenant $AZURE_TENANT_ID
            - az webapp deployment source config-zip --resource-group $AZURE_RESOURCE_GROUP --name $AZURE_APP_NAME --src $ZIP_FILE

内容的提问来源于stack exchange,提问作者Em Ae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:48:15