Jenkins
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 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 """ } } } } }
另請參閱此答案。