Я хотел бы сделать мою длинную команду «ssh» многоразовой в качестве простой переменной в моем конвейере. Для этого было бы неплохо объявить мое имя хоста в переменной 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
"""
}
}
}
}
}
Смотрите также этот ответ.