Jenkins “internal” pipeline脚本运行sh步骤时产生错误

42次阅读
没有评论

问题描述

在使用Jenkins的内置pipeline编辑器创建新的pipeline时,遇到了一个问题。当运行任何sh步骤时,会收到以下错误信息:

sh: 1: Syntax error: end of file unexpected (expecting "done")

用户提供了一个最小工作示例(MWE):

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'echo "FOO!"'
            }
        }
    }
}

奇怪的是,用户从源代码管理(SCM)获取的pipeline脚本却可以正常工作,尽管这些脚本中包含了大量的shell脚本。
Jenkins版本为2.73.2。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

解决方案1

根据最佳回答,这个问题可能是由于pipeline名称中包含撇号字符引起的。将构建重命名可能会解决这个问题。

解决方案2

如果重命名构建不起作用,可以尝试以下解决方案:
1. 确保Jenkins服务器上的插件已经更新到最新版本。
2. 检查pipeline脚本中是否存在语法错误。确保所有的语法都是正确的,并且没有遗漏的done关键字。
3. 尝试在pipeline脚本中添加一些调试输出,以便更好地定位问题。例如,可以在sh步骤之前添加一个echo语句,输出一些调试信息。
4. 如果问题仍然存在,可以尝试使用其他的pipeline编辑器或从SCM获取pipeline脚本来替代内置的pipeline编辑器。

解决方案3

如果以上解决方案都不起作用,可以尝试使用script步骤来替代sh步骤。script步骤可以执行任意的Groovy脚本,包括shell脚本。以下是一个示例:

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                script {
                    sh 'echo "FOO!"'
                }
            }
        }
    }
}

使用script步骤可以绕过可能与sh步骤相关的问题。

解决方案4

如果以上解决方案仍然无效,可以尝试升级Jenkins到最新版本,或者尝试使用其他的pipeline插件来替代内置的pipeline编辑器。这些插件可能提供了更好的兼容性和稳定性。
请注意,解决此问题可能需要根据具体情况进行调试和尝试不同的解决方案。如果问题仍然存在,请参考Jenkins的官方文档或向Jenkins社区寻求帮助。

正文完