如何在Jenkins流水线中使用Email-ext插件将HTML报告嵌入电子邮件正文?

3

我该如何将电子邮件正文制作成Selenium HTML报告。我已经按照这个问题中提供的方法进行了操作,但是出现了错误。

org.codehaus.groovy.control.MultipleCompilationErrorsException:
startup failed: WorkflowScript: 6: unexpected token: FILE @ line 6,
column 17.
        body: ${FILE,path="enteryPath/template.html"},
                ^
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(
ErrorCollector.java:310)
at org.codehaus.groovy.control.ErrorCollector.addFatalError(
ErrorCollector.java:150)
at org.codehaus.groovy.control.ErrorCollector.addError(
ErrorCollector.java:120) 
at org.codehaus.groovy.control.ErrorCollector.addError(
ErrorCollector.java:132) 
at org.codehaus.groovy.control.SourceUnit.addError(SourceUnit.java:350)
at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(
AntlrParserPlugin.java:144)
at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(
AntlrParserPlugin.java:110)
at org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:234)
at org.codehaus.groovy.control.CompilationUnit$1.call(
CompilationUnit.java:168)
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(
CompilationUnit.java:943)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(
CompilationUnit.java:605)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(
CompilationUnit.java:581)
at org.codehaus.groovy.control.CompilationUnit.compile(
CompilationUnit.java:558)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)     
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)  
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(
CpsGroovyShell.java:129)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(
CpsGroovyShell.java:123)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(
CpsFlowExecution.java:517)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(
CpsFlowExecution.java:480)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(
WorkflowRun.java:269)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:421) Finished: FAILURE

我使用的代码是:

node {
    stage ('email')
    {
        emailext (
        subject: "some subject",
        body: ${FILE,path="enteryPath/template.html"},
        to: "email@example.com"
        )  

    }
}

Jenkins 版本 2.85 电子邮件扩展插件版本 2.60 谢谢

3个回答

6
我已通过以下代码解决了管道问题。
emailext mimeType: 'text/html',
        body: '${FILE,path="Seleniun/test-output/emailable-report.html"}', 
        subject: 'Selenium: Job '${env.JOB_NAME}' Status: currentBuild.result, 
        to: EMAIL_ADD

2

如果您使用自定义路径,这篇文章适用于您

我在尝试实现此结果时遇到了一些问题,因为我的路径是动态变化的,我必须在FILE变量中使用一个变量。所以当我尝试以下任何一种方式时:

body: '${FILE,path=${report}}'
body: "${FILE,path=${report}}"
body: '''${FILE,path=${report}}'''

还有很多其他方法,但都不起作用。另一方面,由于Jenkins的限制,我无法使用Groovy读取文件。

我的解决方法是直接使用shell读取html文件,如下所示:

html_body = sh(script: "cat ${report}", returnStdout: true).trim()

然后只需发送电子邮件

emailext replyTo: '$DEFAULT_REPLYTO',
  subject: "subject",
  to: EMAIL,
  mimeType: 'text/html',
  body: html_body

其中${report}是一个html文件的路径,例如/var/jenkins/workspace_318/report.html


0
为了使用动态路径或计算变量路径,您可以执行以下操作:
 " \ ${FILE,path= \ "${FILE_LOCATION} \ "}"

请注意反斜杠,需要去除空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接