【问题标题】:Multiline bash command in Jenkins pipelineJenkins 管道中的多行 bash 命令
【发布时间】:2017-12-04 03:58:49
【问题描述】:

我的 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
        """

【问题讨论】:

    标签: linux bash jenkins


    【解决方案1】:

    因为&lt;&lt;DATA 指定here-doc 的结尾&lt;&lt;-DATA 抑制前导制表符而不是空格

    cat <<-DATA
        hello
    <tab>DATA
    

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

    cat << "    DATA"
        hello
        DATA
    

    【讨论】:

    • 第二个选项不会意味着多行字符串中的变量不会被解释吗?
    • 这些命令只是演示了heredoc的工作原理。内容的解释方式取决于读取此处输入的程序cat 将不显示内容;在您的问题中,shell 将通过 ssh 和 sshpass 执行。
    • 如何同时删除空格,而不仅仅是制表符?
    【解决方案2】:

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

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

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

    【讨论】:

    • 这很奇怪。我昨天看到了这个,喜欢它的“优雅”。但是,它对我不起作用。就我而言,ssh somewheredelimiter 确实按空格对齐,但管道没有正确看到 EOF:即使我使用了 &lt;&lt;EOF。我不知道 Groovy,在 script 块内使用 stripIndent() 与您拥有的 steps 有区别吗?
    【解决方案3】:

    编辑:我们不需要使用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 ;
    """
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多