[英]Multiline bash command in Jenkins pipeline
我的 Jenkinsfile 中有以下 sh 命令,它不起作用,因為它試圖將最后一個“數據”作為命令執行。 如果我將最后一個“DATA”移到行首,它可以工作,但沒有我想要的那么漂亮。 在這種情況下有縮進的方法嗎?
sh """
sshpass -p 'password' ssh -o StrictHostKeyChecking=no appsadm@$backup_registry <<DATA
sudo /etc/init.d/docker stop || true
sudo yum remove -y docker-engine.x86_64
sudo rm -fr /var/lib/docker /var/log/docker
sudo rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm || true
sudo yum update -y
sudo yum -y install docker-io
sudo sed -i 's#other_args=.*#other_args="--insecure-registry $official_registry:5000"#g' /etc/sysconfig/docker
sudo /etc/init.d/docker start
DATA
"""
我知道這是一個老問題,但我在某個時候遇到過這個問題,最終使用了 stripIndent()
steps {
echo 'Deploying....'
sh """
ssh somewhere <<EOF
cd somewhere
do some more stuff
EOF
""".stripIndent()
}
這樣您仍然可以保留縮進和格式
因為<<DATA
指定 here-doc <<-DATA
的結尾抑制前導制表符而不是空格
cat <<-DATA
hello
<tab>DATA
另一種選擇是在標記中添加空格
cat << " DATA"
hello
DATA
編輯:我們不需要使用 EOF,只需將分號放在多行 shell 腳本的語句末尾,如下所示
sh """ if [ -d /opt/tomcat/apache-tomcat-8.5.38/webapps/ROOT ] ;
then ;
ssh $USERNAME@$DEV_HOSTNAME 'sudo rm -rf /opt/tomcat/apache-tomcat-8.5.38/webapps/ROOT' ;
echo 'ROOT directory deleted successfully' ;
fi ;
"""
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.