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

在ADO流水线中使用Maven Jib:Build推送至ACR遇认证问题

解决Azure DevOps中Maven Jib推送ACR的认证失败问题

核心原因

Maven Jib任务不会自动关联Azure DevOps的containerRegistry服务连接,而原Docker@2任务是通过服务连接内置逻辑处理ACR登录,因此直接运行jib:build会因缺失凭证返回UNAUTHORIZED错误。

两种可行解决方案

方案1:利用Docker登录任务自动传递凭证

Jib会自动读取Docker客户端的登录配置文件(~/.docker/config.json),因此可以先通过原有服务连接完成Docker登录,再执行Jib构建:

# 先通过服务连接登录ACR
- task: Docker@2
  inputs:
    containerRegistry: '<你的ACR服务连接名称>'
    command: 'login'

# 执行Jib构建,无需额外传递凭证
- task: Maven@4
  inputs:
    mavenPomFile: 'pom.xml'
    goals: 'jib:build'
    options: '-Dimage=<你的ACR地址>/<镜像名>:<版本号>'

方案2:手动传递ACR凭证作为Maven参数

通过Azure CLI获取ACR的访问凭证,注入流水线变量后,在Maven命令中通过-D参数传递给Jib插件:

# 获取ACR凭证并设置为流水线变量
- task: AzureCLI@2
  inputs:
    azureSubscription: '<你的Azure订阅服务连接>'
    scriptType: 'bash'
    inlineScript: |
      ACR_NAME="<你的ACR名称>"
      # 获取ACR用户名
      ACR_USER=$(az acr credential show --name $ACR_NAME --query username -o tsv)
      # 获取ACR密码(取第一个密码)
      ACR_PASS=$(az acr credential show --name $ACR_NAME --query passwords[0].value -o tsv)
      # 设置为流水线变量
      echo "##vso[task.setvariable variable=ACR_USER]$ACR_USER"
      echo "##vso[task.setvariable variable=ACR_PASS]$ACR_PASS"

# 执行Jib构建,传递凭证参数
- task: Maven@4
  inputs:
    mavenPomFile: 'pom.xml'
    goals: 'jib:build'
    options: >
      -Dimage=<你的ACR地址>/<镜像名>:<版本号>
      -Djib.to.auth.username=$(ACR_USER)
      -Djib.to.auth.password=$(ACR_PASS)

额外说明

  • 方案1更简洁,复用原有服务连接,无需额外配置Azure CLI权限;
  • 方案2适合无法使用Docker客户端的场景,直接通过API获取凭证;
  • 不要在pom.xml中硬编码凭证,避免敏感信息泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:48:21