我正在使用 Jenkins 和 email-ext 发送构建通知。Build 生成小型自定义报告,以简单的 HTML 形式存储在out
目录中。现在我可以轻松地将此报告附加到电子邮件中,但我想要将此报告呈现到电子邮件正文本身。我知道我可以编写自己的果冻模板,但这需要访问构建服务器(安装果冻脚本),我也想避免这种情况。所以我的问题是:
- 我可以将任意文件的内容(在构建期间生成)包含到 Email-Ext 插件的内容字段中吗?
- 如果我不能,在詹金斯发送此类报告最简单的方法是什么?
看起来最简单的方法是使用电子邮件分机的“预发送脚本”
脚本如下所示:
def reportPath = build.getWorkspace().child("HealthTestResults.html")
msg.setContent(reportPath.readToString(), "text/html");
它将位于工作区根目录中的 HealthTestResults.html 的内容呈现为消息的正文。
将 html 文件包含到电子邮件内容的简单方法是在默认内容中添加以下行 = ${FILE, path="yourfilename.html"}
这在詹金斯电子邮件分机插件中对我有用
我尝试使用
def reportPath = build.getWorkspace().child("HealthTestResults.html")
msg.setContent(reportPath.readToString(), "text/html");
但是发出来的邮件是这样的:
框架警报 本文档旨在使用框架功能进行查看。如果您看到此消息,则说明您使用的是不支持框架的 Web 客户端。
你知道原因吗?迈克·查利
如果你使用 groovy 模板,那么你可以做这样的事情
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
}
}
}
和/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(' ', ' ')}
</tt>
经过一些阶段后,我正在管道中尝试以下脚本。它抛出以下错误。可能是什么原因?
post {
always {
emailext body: '', presendScript: '''def reportPath = build.getWorkspace().child("test-output/emailable-report.html")
msg.setContent(reportPath.readToString(), "text/html");''', subject: '', to: ‘someone@somewhere.com'
}
}
错误
[Pipeline] emailext
java.lang.NullPointerException: Cannot invoke method getWorkspace() on null object