Shell jenkins管道的sh中未填充变量
我有下面的代码和用户名,当我在sh脚本中执行curl时,前面阶段的pwd和modulename没有被填充 请让我知道我需要什么来修复它Shell jenkins管道的sh中未填充变量,shell,variables,jenkins,curl,jenkins-pipeline,Shell,Variables,Jenkins,Curl,Jenkins Pipeline,我有下面的代码和用户名,当我在sh脚本中执行curl时,前面阶段的pwd和modulename没有被填充 请让我知道我需要什么来修复它 def USERNAME def PASSWORD def MODULE_NAME node { try { stage('userAuth') { withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: '
def USERNAME
def PASSWORD
def MODULE_NAME
node {
try {
stage('userAuth') {
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'ID-Creds',
usernameVariable: 'user', passwordVariable: 'pwd']]) {
USERNAME="$user"
PASSWORD="$pwd"
echo "$USERNAME:$PASSWORD" //This is fine
}
}
stage('readPOM') {
def pom = readMavenPom file: 'pom.xml'
MODULE_NAME = pom.module
echo "$MODULE_NAME" //This is printing fine
}
stage('do curl') {
def revision = sh(script: '''
AUTH="$USERNAME:$PASSWORD"; //Not getting populated getting empty
RespInfo=$(curl -u $AUTH "https://host/apis/${MODULE_NAME}/deployments"); //Not getting populated getting empty for modulename
currntRev=$(jq -r .revision[0].name <<< "${RespInfo}");
echo $currntRev
''',returnStdout: true).split()
}
}
catch (e) {
throw e
} finally {
}
}
def用户名
def密码
def模块名称
节点{
试一试{
阶段('userAuth'){
使用凭据([$class:'UsernamePasswordMultiBinding',credentialsId:'ID Creds',
usernameVariable:'user',passwordVariable:'pwd']]){
USERNAME=“$user”
PASSWORD=“$pwd”
echo“$USERNAME:$PASSWORD”//这很好
}
}
阶段('readPOM'){
def pom=readMavenPom文件:“pom.xml”
模块名称=pom.MODULE
echo“$MODULE_NAME”//打印正常
}
阶段('do curl'){
def revision=sh(脚本:“”
AUTH=“$USERNAME:$PASSWORD”;//未填充或为空
RespInfo=$(curl-u$AUTH)https://host/apis/${MODULE_NAME}/deployments”);//未填充,modulename为空
currentrev=$(jq-r.revision[0]。name您必须使用双引号(“”“
)来应用字符串插值:
def revision = sh(script: """
AUTH=\"$USERNAME:$PASSWORD\"; //Not getting populated getting empty
一种更简单的方法是按如下方式连接两个字符串:
def revision = sh(
returnStdout: true,
script: '''
AUTH="$user:$pwd";
RespInfo=$(curl -u "$AUTH" "https://host/apis/''' + MODULE_NAME + '''/deployments");
currntRev=$(jq -r .revision[0].name <<< "${RespInfo}");
echo $currntRev
'''
).split()
def revision=sh(
是的,
脚本:“”
AUTH=“$user:$pwd”;
RespInfo=$(curl-u“$AUTH”https://host/apis/''模块名称+''/部署];
currentrev=$(jq-r.revision[0]。name now在美元符号后获得非法字符串体字符;解决方案:转义文字美元符号“\$5”或将值表达式“${5}”括在第27行第20列。RespInfo=$(curl-u“${AUTH}”https://host/apis/${MODULE_NAME}/deployments”)我可以把这三行放在脚本中吗?我试过这个脚本:“${USERNAME}:${PASSWORD}\”;RespInfo=\$(curl-u\“${AUTH}\”https://host/apis/\“${MODULE\u NAME}\”/deployments\”;currentrev=\$(jq-r.revision[0].name您很高兴地将Groovy和Shell变量混合在一起。AUTH
被声明为Shell变量,因此您现在必须转义美元符号,以便Groovy不会对其进行解释:curl-u\“\$AUTH\”
感谢您的解释。这里是我的第一个Groovy脚本。终于可以使用def revision=sh(脚本:““AUTH=\”${USERNAME}:${PASSWORD}\“RespInfo=\$(curl-u\$AUTH\”https://host/apis/\“${MODULE\u NAME}\”/deployments\”;currentrev=\$(jq-r.revision[0]。名称