You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线报错:unexpected token: JELLY_SCRIPT原因排查求助

问题分析与解决方案

这个错误的核心原因是Groovy字符串插值和Email Extension插件的Jelly脚本标签冲突了,具体来说:

  • 在Jenkins Pipeline的Groovy语法中,${}是用来解析Groovy环境变量或自定义变量的语法,比如你代码里的${env.JOB_NAME}就是Groovy在执行时替换成实际的任务名称。
  • 而${JELLY_SCRIPT,template="testResults.jelly"}是Email Extension插件专属的标签,它不是Groovy变量,Groovy会把它当成一个非法的Groovy表达式去解析,自然就抛出了unexpected token: JELLY_SCRIPT的语法错误。

两种可行的修复方案

方案1:改用单引号包裹邮件正文

Groovy中,单引号包裹的字符串是纯字符串,不会解析里面的${}语法,这样Email Extension插件就能正常识别并处理JELLY_SCRIPT标签。如果你的正文里还有Groovy变量,需要手动拼接字符串:

修改后的success阶段emailext代码示例:

success { 
    emailext ( 
        subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", 
        to: '$EMAIL_LIST', 
        attachmentsPattern: '**/results/*',
        attachLog: true, 
        body: '<p>SUCCESSFUL: Job \'' + env.JOB_NAME + ' [' + env.BUILD_NUMBER + ']\'</p> ' +
              '<p>Check console output at ;<a href=\'' + env.BUILD_URL + '\'>' + env.JOB_NAME + ' [' + env.BUILD_NUMBER + ']</a></p> ' +
              '<br> Unit test: ' + env.UNIT_TEST + ' <br> Integration test: ' + env.INTEGRATION_TEST + ' <br> Upgrader test: ' + env.UPGRADER_TEST + ' <br> ' +
              '<h1>Unit Test Report</h1> ' + env.UNIT_TEST_REPORT + ' <br> ' + env.UPGRADER_REPORT + ' <br> ' +
              '<h3>Find Upgrader Logs in following location : </h3><br> ' + env.FTP_PATH + ' <br> ' + env.FTP_LOCATION + ' <br> ' +
              env.EMAIL_CONTENT +
              '${JELLY_SCRIPT,template="testResults.jelly"}',
        recipientProviders: [[$class: 'UpstreamComitterRecipientProvider']] 
    ) 
    cleanWs() 
}

方案2:转义JELLY_SCRIPT的${}

如果你想继续使用三重引号的多行字符串(保留Groovy变量的便捷插值),只需要把JELLY_SCRIPT标签里的${}转义成\${},这样Groovy就会把它当成普通字符串内容,不会尝试解析,而是直接传给Email Extension插件处理:

修改后的body部分示例:

body: """<p>SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'</p> <p>Check console output at ;<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a></p> <br> Unit test: ${env.UNIT_TEST} <br> Integration test: ${env.INTEGRATION_TEST} <br> Upgrader test: ${env.UPGRADER_TEST} <br> <h1>Unit Test Report</h1> ${env.UNIT_TEST_REPORT} <br> ${env.UPGRADER_REPORT} <br> <h3>Find Upgrader Logs in following location : </h3><br> ${env.FTP_PATH} <br> ${env.FTP_LOCATION} <br> ${env.EMAIL_CONTENT}
\${JELLY_SCRIPT,template="testResults.jelly"}""",

这样修改后,Groovy就不会再把JELLY_SCRIPT当成非法的Groovy表达式,Email Extension插件也能正确识别并渲染你指定的Jelly模板了。

内容的提问来源于stack exchange,提问作者Viraj Amarasinghe - Resiliz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:01:40