我想让我的长“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
"""
}
}
}
}
}
也可以看看这个答案。