如何在jenkins管道中连接两个env变量,中间有斜杠?

Jen*_*989 1 concatenation environment-variables jenkins jenkins-pipeline

我有一个脚本将生成的RPM发送到Nexus OSS管理器.詹金斯的舞台是:

stage ('nexus deploy') {
  env.REPONAME = "snapshots"
  sh '''
    mvn deploy:deploy-file -Durl="${env.NEXUS_URL}/$env.REPONAME"
    '''
  }
Run Code Online (Sandbox Code Playgroud)

我已经设置了env变量env.NEXUS_URL但是用两个变量并排调用它之间的斜杠,不知何故检测变量并且构建失败并出现错误.

-Durl="${env.NEXUS_URL}/$REPONAME": bad substitution
Run Code Online (Sandbox Code Playgroud)

lvt*_*llo 7

你在混淆groovy语法和语法shell.你可以使用env.VARgroovy,你可以使用${VAR}之间sh '..':

pipeline {
    agent any

    options {
        buildDiscarder(logRotator(numToKeepStr: '3'))
    }

    environment {
        NEXUS_URL = 'https://mynexus.com'
        REPONAME    = 'myrepo'
    }

    stages {
        stage('test') {
            steps {
                echo "print env vars in groovy"
                echo "my nexus is " + env.NEXUS_URL + " any my repo name is " + env.REPONAME
                sh 'echo "env vars in sh"'
                sh 'echo "nexus is ${NEXUS_URL} and my repo name is ${REPONAME}"'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

[Pipeline] echo
print env vars in groovy
[Pipeline] echo
my nexus is https://mynexus.com any my repo name is myrepo
[Pipeline] sh
[test] Running shell script
+ echo 'env vars in sh'
env vars in sh
[Pipeline] sh
[test] Running shell script
+ echo 'nexus is https://mynexus.com and my repo name is myrepo'
nexus is https://mynexus.com and my repo name is myrepo
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您需要:

mvn deploy:deploy-file -Durl=${NEXUS_URL}/${REPONAME}
Run Code Online (Sandbox Code Playgroud)