Jenkins Pipeline:在另一个 Env Var 声明中使用 Env Var

Jenkins Pipeline:在另一个 Env Var 声明中使用 Env Var

我想让我的长“ssh”命令可作为一个简单的变量在整个管道中重复使用。为此,最好在 var 中声明我的主机名,然后在另一个 var 声明中使用该 var 来构建最终命令:

environment {
    BUILDHOST   = 'buildhost.example.com'
    SSHCMD      = 'ssh -o StrictHostKeyChecking=no jenkins@${env.BUILDHOST}'
}

从概念上来说,是这样的:

pipeline {
    agent any
    environment {
        BUILDHOST   = 'buildhost01.example.com'
        SSHCMD      = 'ssh -o StrictHostKeyChecking=no jenkins@${env.BUILDHOST}'
    }
    stages {
        stage('SSH Testing') {
            steps {
                sshagent ( ['jenkins_ssh']) {
                    sh '''
                        $SSHCMD uname -a
                    '''
                }
            }
        }
        stage('Example Test') {
            steps {
                sshagent ( ['jenkins_ssh']) {
                    sh '''
                        $SSHCMD /run/something.sh
                    '''
                }
            }
        }
    }
}

当我声明 var 而不进行任何替换时,它工作正常: SSHCMD = 'ssh -o StrictHostKeyChecking=no [email protected]'

但我似乎无法将变量嵌套在一起。有什么办法吗?

答案1

这应该可以。但是,您需要使用双引号字符串插值

pipeline {
    agent any
    environment {
        BUILDHOST   = 'buildhost01.example.com'
        SSHCMD      = "ssh -o StrictHostKeyChecking=no jenkins@${env.BUILDHOST}" // <<< double-quotes
    }
    stages {
        stage('SSH Testing') {
            steps {
                sshagent ( ['jenkins_ssh']) {
                    sh """ // <<< double-quotes
                        $SSHCMD uname -a
                    """
                }
            }
        }
        stage('Example Test') {
            steps {
                sshagent ( ['jenkins_ssh']) {
                    sh """ // <<< double-quotes
                        $SSHCMD /run/something.sh
                    """
                }
            }
        }
    }
}

也可以看看这个答案

相关内容