Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell jenkins管道的sh中未填充变量_Shell_Variables_Jenkins_Curl_Jenkins Pipeline - Fatal编程技术网

Shell jenkins管道的sh中未填充变量

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: '

我有下面的代码和用户名,当我在sh脚本中执行curl时,前面阶段的pwd和modulename没有被填充

请让我知道我需要什么来修复它

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]。名称