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

如何在Azure DevOps中向Gradle传递含美元符号的密码?

问题:Azure DevOps Linux代理中Gradle传递含美元符号的密码失败

背景

我的build.gradle配置了带认证的Maven仓库,通过命令行传入用户名和密码变量:

maven {
    url 'https://artifactory.example.com/'
    credentials {
        username "$artifactory_username"
        password "$artifactory_password"
    }       
}

本地通过以下命令可以正常传递含美元符号的密码:

./gradlew -Partifactory_username='myUser' -Partifactory_password='myPa$sw0rd'

但在Azure DevOps YAML流水线中,将用户名和密码设为流水线变量后,配置如下:

- task: Gradle@3
  inputs:
    gradleWrapperFile: 'gradlew'
    options: '-Partifactory_username=${user} -Partifactory_password=${password}'
    tasks: 'jar'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'

当密码包含美元符号时,构建失败,日志显示完整密码未被传递给Gradle。

我尝试过多种引号格式,均无效:

options: '-Partifactory_username=${user} -Partifactory_password=${password}'
    options: "-Partifactory_username='${user}' -Partifactory_password='${password}'"
    options: '-Partifactory_username=$${user} -Partifactory_password=$${password}'

限制条件:

  • 无法修改密码或在变量中转义密码,二者由他人管控
  • 生产环境必须使用Linux代理,相同配置在Windows代理上可正常运行

解决方法

方法1:修正命令行参数的引号格式

在Linux bash环境中,$会被解析为变量引用,需用单引号包裹密码避免解析,同时在YAML中正确处理变量替换和引号转义:

- task: Gradle@3
  inputs:
    gradleWrapperFile: 'gradlew'
    options: "-Partifactory_username='$(user)' -Partifactory_password='$(password)'"
    tasks: 'jar'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
  • 使用$(user)和$(password)是Azure DevOps流水线变量的标准引用方式
  • 用双引号包裹整个options值,确保流水线能正确替换变量
  • 密码参数用单引号包裹,让bash将其视为纯文本,不解析其中的$

方法2:通过环境变量传递(更稳定)

避开命令行参数传递特殊字符的问题,改用环境变量传递:

  1. 流水线YAML中设置环境变量:
- task: Gradle@3
  inputs:
    gradleWrapperFile: 'gradlew'
    tasks: 'jar'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
  env:
    ARTIFACTORY_USERNAME: $(user)
    ARTIFACTORY_PASSWORD: $(password)
  1. 修改build.gradle读取环境变量:
maven {
    url 'https://artifactory.example.com/'
    credentials {
        username System.getenv('ARTIFACTORY_USERNAME')
        password System.getenv('ARTIFACTORY_PASSWORD')
    }       
}

这种方式完全避免了命令行解析特殊字符的问题,适合处理含复杂符号的密码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:00:33