我正在写一个jenkins管道jenkinsfile,在脚本子句中,我必须ssh到一个盒子并运行一些命令。我认为这个问题与我在引号中使用的嫉妒有关。我得到一个ENDSSH命令没有发现错误,我不知所措。如有任何帮助,不胜感激。
stage("Checkout my-git-repo"){
steps {
script {
sh """
ssh -o StrictHostKeyChecking=accept-new -o LogLevel=ERROR -o UserKnownHostsFile=/dev/null -i ${JENKINS_KEY} ${JENKINS_KEY_USR}@${env.hostname} << ENDSSH
echo 'Removing current /opt/my-git-repo directory'
sudo rm -rf /opt/my-git-repo
echo 'Cloning new my-git-repo repo into /opt'
git clone ssh://${JENKINS_USR}@git.gitbox.com:30303/my-git-repo
sudo mv /home/jenkins/my-git-repo /opt
ENDSSH
"""
}
}
}
-bash: line 6: ENDSSH: command not found
我个人不熟悉jenkins,但我想问题是ENDSSH
之前的空白
分隔符前不允许有空格。
(https://linuxize.com/post/bash-heredoc/)
尝试删除缩进:
stage("Checkout my-git-repo"){
steps {
script {
sh """
ssh -o StrictHostKeyChecking=accept-new -o LogLevel=ERROR -o UserKnownHostsFile=/dev/null -i ${JENKINS_KEY} ${JENKINS_KEY_USR}@${env.hostname} << ENDSSH
echo 'Removing current /opt/my-git-repo directory'
sudo rm -rf /opt/my-git-repo
echo 'Cloning new my-git-repo repo into /opt'
git clone ssh://${JENKINS_USR}@git.gitbox.com:30303/my-git-repo
sudo mv /home/jenkins/my-git-repo /opt
ENDSSH
"""
}
}
}
或者确保空格仅为制表符,并将<<
替换为<<-
:
在重定向操作符<<-后面加上一个减号,将导致所有错误要忽略的前导制表符。这允许你使用在shell脚本中编写here-文档时缩进。领先的不允许使用空白字符,只允许使用制表符。