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

Azure Pipeline执行Maven Release报错‘could not read password’求助

解决Azure DevOps YAML Pipeline中Maven Release的Git认证错误

错误信息

[ERROR] Cloning into 'checkout'...
[ERROR] fatal: could not read Password for 'https:********@dev.azure.com': terminal prompts disabled

当前Pipeline配置

parameters:
- name: releaseVersion
  displayName: release releaseVersion
  type: string
  default: "changeme"
- name: tagName
  displayName: tag name
  type: string
  default: "changeme"
- name: nextVersion
  displayName: next version
  type: string
  default: "changeme"

trigger: none


steps:
- checkout: self
  persistCredentials: true
  clean: true
  fetchDepth: 0
- script: |
    git config user.email "release-pipeline@example.com"
    git config user.name "release-pipleine"
    git fetch --all
    git checkout master 
- task: MavenAuthenticate@0
  inputs:
    artifactsFeeds: 'Artifacts'
- task: Maven@4
  inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.17'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    testResultsFiles: '**/surefire-reports/TEST-*.xml'
    goals: 'release:clean release:prepare release:perform'
    options: >-  
      --batch-mode
      -DreleaseVersion=${{ parameters.releaseVersion }}
      -DtagName=${{ parameters.tagName }} 
      -DnextVersion=${{ parameters.nextVersion }}
      -Darguments="-Dmaven.deploy.skip=true"

已知构建服务已配置对应权限,以下是可行的解决办法:

解决办法

  • 给Maven Release插件注入Git凭证
    Maven Release插件执行release:prepare时会重新克隆仓库,默认不会继承Pipeline的Git凭证。直接在Maven参数里添加Azure DevOps内置的系统访问令牌作为Git账号密码:
    修改Maven任务的options字段,追加以下参数:

    -Dusername=$(System.AccessToken)
    -Dpassword=$(System.AccessToken)
    

    修改后的完整options如下:

    options: >-  
      --batch-mode
      -DreleaseVersion=${{ parameters.releaseVersion }}
      -DtagName=${{ parameters.tagName }} 
      -DnextVersion=${{ parameters.nextVersion }}
      -Darguments="-Dmaven.deploy.skip=true"
      -Dusername=$(System.AccessToken)
      -Dpassword=$(System.AccessToken)
    
  • 修正Git配置并注入凭证到远程URL
    原配置中Git用户名存在拼写错误(release-pipleine→release-pipeline),同时手动替换Git远程仓库URL,将系统访问令牌嵌入其中,避免克隆时的凭证请求:
    修改script步骤为:

    - script: |
        git config user.email "release-pipeline@example.com"
        git config user.name "release-pipeline"
        git remote set-url origin https://$(System.AccessToken)@dev.azure.com/[你的组织名]/[你的项目名]/_git/[你的仓库名]
        git fetch --all
        git checkout master 
    
  • 复用当前克隆的仓库,跳过重新克隆
    让Maven Release插件直接使用当前Pipeline已经克隆好的仓库,添加-DcheckoutDirectory=.参数即可:

    options: >-  
      --batch-mode
      -DreleaseVersion=${{ parameters.releaseVersion }}
      -DtagName=${{ parameters.tagName }} 
      -DnextVersion=${{ parameters.nextVersion }}
      -Darguments="-Dmaven.deploy.skip=true"
      -DcheckoutDirectory=.
    
  • 验证分支级推送权限
    即使仓库级权限配置正确,也需要确认构建服务账户(格式为[项目名] Build Service ([组织名]))对master分支拥有推送权限:

    1. 进入Azure DevOps仓库的「分支」页面
    2. 找到master分支,点击「...」→「分支权限」
    3. 确认构建服务账户在「允许推送」列表中,或拥有Contributor及以上角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:27:41