簡體   English   中英

Jenkins 管道中的多行 bash 命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM