Jenkins

Jenkins Pipeline:在另一個 Env Var 聲明中使用 Env Var

  • December 13, 2018

我想讓我的長“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 jenkins@buildhost.example.com'

但我似乎無法將變數嵌套在一起。有什麼辦法可以做到這一點?

這應該有效。但是,您需要對字元串插值使用雙引號:

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
                   """
               }
           }
       }
   }
}

另請參閱此答案

引用自:https://serverfault.com/questions/943739