【问题标题】:EOF: command not found in Jenkins PipelineEOF:在 Jenkins 管道中找不到命令
【发布时间】:2023-07-24 03:58:01
【问题描述】:

我正在尝试在 Jenkins 管道中启动 Datadog 代理,但出现以下错误:

第 7 行:警告:第 2 行的此处文档由文件结尾分隔(需要 `EOF')。 EOF:找不到命令错误。

    stage('Install Datadog agent'){
        when {
            environment(name: "DATADOG_REQ", value: "enable")
            }
        steps {
            script {
            echo "Installing Datadog Agent"
            
            sh '''#!/bin/bash 
                ssh -o ConnectTimeout=30 -t  ABC@1234 /bin/bash  << EOF || error_exit "creating based folder failed for $service_name"
                sudo chmod u+x ./${JOB_NAME}/enableDatadogAgent.sh
                sudo chown jenkins:jenkins ./${JOB_NAME}/enableDatadogAgent.sh
                echo ${DATADOG_REQ} ${JOB_NAME}
                ./${JOB_NAME}/enableDatadogAgent.sh ${DATADOG_REQ} 
                EOF'''
                }



            }
        }

任何帮助都会非常有帮助。

【问题讨论】:

  • 我不熟悉 Jenkins 语法,但是脚本在执行之前缩进的空格是否已删除?如果不是,则会导致此错误,因为此处的文档分隔符(在这种情况下为EOF)如果缩进则无法识别(除非您使用&lt;&lt;- EOF 仅使用制表符缩进;见this question)。

标签: bash jenkins eof jenkins-pipeline-unit


【解决方案1】:

我用

            script {
            echo "Installing Datadog Agent"
            
            sh '''#!/bin/bash 
                ssh -o ConnectTimeout=30 -t  ABC@1234 /bin/bash  <<- _EOF_ || error_exit "Failed to execute while doing SSH"    
                    sudo chmod u+x ./${JOB_NAME}/enableDatadogAgent.sh
                    sudo chown jenkins:jenkins ./${JOB_NAME}/enableDatadogAgent.sh
                    echo ${DATADOG_REQ} ${JOB_NAME}
                    ./${JOB_NAME}/enableDatadogAgent.sh ${DATADOG_REQ} 
                    _EOF_'''

                }

【讨论】: