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分支拥有推送权限:- 进入Azure DevOps仓库的「分支」页面
- 找到
master分支,点击「...」→「分支权限」 - 确认构建服务账户在「允许推送」列表中,或拥有Contributor及以上角色。
内容的提问来源于stack exchange,提问作者dermoritz
相关产品推荐
相关产品推荐

