Jenkins管道中的多行bash命令

tig*_*tig 4 linux bash jenkins

我的Jenkinsfile中有以下sh命令,它不起作用,因为它尝试执行最后一个"DATA"作为命令.如果我将最后一个"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
        """
Run Code Online (Sandbox Code Playgroud)

小智 10

我知道这是一个古老的问题,但我在某个时候碰到了这个问题,并最终使用了stripIndent()

steps {
    echo 'Deploying....'
    sh """
    ssh somewhere <<EOF
    cd somewhere
    do some more stuff
    EOF
    """.stripIndent()
}
Run Code Online (Sandbox Code Playgroud)

这样你仍然可以保留缩进和格式


Nah*_*eul 5

因为<<DATA指定了here-doc的结尾,<<-DATA抑制前导制表符,但不抑制空格

cat <<-DATA
    hello
<tab>DATA
Run Code Online (Sandbox Code Playgroud)

另一种选择是在标记中添加空格

cat << "    DATA"
    hello
    DATA
Run Code Online (Sandbox Code Playgroud)