我正在撰寫一個 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
uj5u.com熱心網友回復:
我個人不熟悉詹金斯,但我猜問題是之前的空格 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-document 時使用縮進。前導空白字符是不允許的,只有制表符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/342361.html
