在Jenkins流水线中将图片嵌入电子邮件正文

5

我需要在邮件正文中添加一张图片,而不是作为附件,通过Jenkins管道发送邮件。我正在使用Jenkins管道中的emailext插件,下面是我正在使用的代码。

emailext (
          subject: "test email",
          body: """
          <html>
          <body>
          <p>please find attached score: Job '${env.JOB_NAME}':</p>
          <p> The last commit was by ${last_commit_user} </p>
          <p>Please check jenkins console at "</p> 
          <p> For detailed report on this analysis, visit "</p>
          </body>
          </html>
          """,
          to: email_recipients,
          attachmentsPattern: '${BUILD_NUMBER}.jpg'
)

我不想使用作为附件的"attachmentsPattern",我尝试着使用:

body: """ 
<html>
<img src="image_name.jpg" >
</html>
"""

我在邮件中看到的只是一个蓝色的框,我已经按照我的Jenkins工作区相对路径给出了正确的图片路径,但是我尝试搜索相关的解决方案却没有成功。


你找到了在Jenkins email-ext中嵌入图片的方法吗? - Dinesh
你找到任何解决方案了吗?我也在我这边遇到类似的问题。 - PANDA MAN
1
@Dinesh,请查看下面的解决方案,我之前也遇到了同样的问题。 - np2807
4个回答

3

您可以按照之前正确描述的方式,使用图像的base64字符串进行操作,或者将图像作为附件添加到电子邮件正文中,然后在img src属性中引用该附件。

在流水线中创建HTML文件(这将成为电子邮件中的HTML正文)的简单方法。

 sh "echo '<b>Job Name: </b>${env.JOB_NAME}<br />' > mail.html"
 sh "echo '<b>Execution Result: </b>${currentBuild.currentResult}<br />' >> mail.html"
 sh "echo '<b>Build Number: </b> ${env.BUILD_NUMBER}<br />' >> mail.html"
 sh "echo '<b>Build URL: </b> ${env.BUILD_URL}<br />' >> mail.html"  
 sh "echo '<img src='cid:sample.jpg' alt='hello'>' >> mail.html"

1.) 将附件添加到电子邮件正文中

   emailext attachmentsPattern: 'sample.jpg', 
   body: '${FILE,path="mail.html"}',
   to: "${emailRecipientsList}",
   recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']],
   subject: "Jenkins Build ${currentBuild.currentResult}: Job ${env.JOB_NAME}",
   mimeType: 'text/html' 

2.) 在img src属性中引用附件中的图像

<img src='cid:sample.jpg' alt='hello'>

1

您需要将图像转换为Base64格式。我使用Python进行此操作。

import base64

base64Img = ''

with open("image.png", "rb") as imageFile:
    base64Img = base64.b64encode(imageFile.read())

with open("image.html", "wb+") as writer:
    writer.write('<img src="data:image/png;base64,'.encode())
    writer.write(base64Img)
    writer.write('">'.encode())

这会写入一个名为"image.html"的文件。然后,您可以将此文件附加到您的中。在我的流程管道中,我是这样做的:
${FILE,path="image.html"}

1
你不能添加.png格式的图片。相反,你可以在html数据中添加编码后的base64格式图片。
要将实际图片转换为base64,请使用LINK这里。需要更改源。
body:"""
<html>
<img src="data:image/png;base64<BASE64_ENCODED_IMAGE>" >
</html>
"""

在上述代码中,“BASE64_ENCODED_IMAGE”是从上面链接获取的base64转换代码。
请访问在HTML中内嵌Base64编码的图像了解更多信息。

-2

将图像文件推送到Jenkins任务的工作区目录。
转到工作区并单击图像以获取URL。
在电子邮件模板中放置img src="IMAGE_URL"


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