9
votes

I am using Jenkins and email-ext to send build notifications. Build produces small custom report stored as simple HTML in out directory. Right now I can easy attach this report to the email, but what I want is to have this report rendered to the email body itself. I know that I can write my own jelly template, but this requires access to the build server(to install jelly script), I want to avoid this too. So my questions are:

  1. Can I include content of the arbitrary file(generated during build) to Content field of the Email-Ext plugin?
  2. If I cannot, what is most easy way to send such report in Jenkins?
4

4 Answers

14
votes

It looks like most easy way is to use 'Pre-send Script' of the Email-ext

Script looks like this:

def reportPath = build.getWorkspace().child("HealthTestResults.html")
msg.setContent(reportPath.readToString(), "text/html");

It renders content of the HealthTestResults.html located in the root of the workspace just as body of the message.

5
votes

Easy way to include the html file to email content is to add below line in the default content = ${FILE, path="yourfilename.html"}

this works for me in jenkins email ext plugin

0
votes

I try it using


def reportPath = build.getWorkspace().child("HealthTestResults.html")
msg.setContent(reportPath.readToString(), "text/html");

But the email sent out is like this:


Frame Alert This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.


Do you know the reason? Mike Chaliy

0
votes

If you use groovy template, then you can do something like this

stage("Notifications") {
            steps {
                script {
                    env.ForEmailPlugin = env.WORKSPACE

                    emailext mimeType: "text/html",
                        body: '''${SCRIPT, template="notification.template"}''',
                        subject: env.JENKINS_PROJECT + " " + currentBuild.currentResult + " : " + env.JOB_NAME + "/" + env.GIT_COMMIT,
                        recipientProviders: [requestor(), developers()],
                        from: env.JENKINS_EMAIL,
                        attachLog: true
                }
            }
        }

and slice of /var/lib/jenkins/email-templates/notification.template

<!-- ARGOCD SYNC OUTPUT -->
<h3>ArgoCD<h3/>
<hr size="1" />
<tt>
${new File("/tmp/sync.txt").text.replaceAll('\n','<br>').replaceAll(' ', '&nbsp;')}
</tt>