如何在 Jenkins 电子邮件中包含 git changelog?
Posted
技术标签:
【中文标题】如何在 Jenkins 电子邮件中包含 git changelog?【英文标题】:How to include git changelog in Jenkins emails? 【发布时间】:2011-12-08 01:12:39 【问题描述】:有没有办法将 Jenkins 生成的变更日志导入到电子邮件的主题中(通过默认电子邮件或 email-ext plugin)?
我是 Jenkins 配置的新手,如果这是一个简单的问题,我深表歉意,但我无法在 email-ext 文档中找到任何内容。
【问题讨论】:
【参考方案1】:我将我的 Email-ext 插件配置为使用 CHANGES 令牌 (official documentation here):
Changes:
$CHANGES, showPaths=true, format="%a: %r %p \n--\"%m\"", pathFormat="\n\t- %p"
这会在我的构建通知中打印以下内容:
Changes:
Username: 123
- Project/Filename1.m
- Project/Filename2.m
-- "My log message"
对于 html 消息,我将相同的代码放在一个 div 中并添加了格式:
<div style="padding-left: 30px; padding-bottom: 15px;">
$CHANGES, showPaths=true, format="<div><b>%a</b>: %r %p </div><div style=\"padding-left:30px;\"> — “<em>%m</em>”</div>", pathFormat="</div><div style=\"padding-left:30px;\">%p"
</div>
这是 Jenkins 现在发送的电子邮件中的示例截图(这个特定的提交来自 Subversion,但它在 Git 和其他版本控制系统中的工作方式完全相同):
【讨论】:
你怎么知道要这样做?我查看了该官方文档页面,但没有看到:1)可用令牌列表以及如何使用它们,2)将它们放在哪里(Jenkins的“配置系统”页面中的“默认内容”? )。 看起来github.com/hudson-plugins/email-ext-plugin/tree/master/src/main/… 中的每个Java 类都是一个令牌。 我怎么知道该怎么做?老实说,我不知道,花了很多时间搜索示例、阅读文档、实验和逆向工程。 @SteveHHH 在哪里添加这个东西?,我将它添加到内容中,但结果是空白 如果有多行提交信息,这会显示吗?我试过这个。它只显示提交消息的第一行。如果提交消息为 4 行,则仅显示第一行。这个问题有什么解决办法吗?【参考方案2】:来自原始文档: 要查看所有可用电子邮件令牌的列表及其显示的内容,您可以单击“?” (问号)与项目配置屏幕上 email-ext 部分底部的 Content Token Reference 相关联。
结果如下:
$CHANGES
Displays the changes since the last build.
showDependencies
If true, changes to projects this build depends on are shown. Defaults to false
showPaths
If true, the paths, modifued by a commit are shown. Defaults to false
format
For each commit listed, a string containing %X, where %x is one of:
%a
author
%d
date
%m
message
%p
path
%r
revision
Not all revision systems support %d and %r. If specified showPaths argument is ignored. Defaults to "[%a] %m\\n"
pathFormat
A string containing %p to indicate how to print paths. Defaults to "\\t%p\\n"
【讨论】:
【参考方案3】:不在电子邮件主题中,但您可以使用Git Changelog Plugin 作为Jenkins
Job 中的后期构建操作,将更改日志作为邮件附件发送给收件人。选中 Create a file
复选框,为文件命名(我为CHANGELOG.md
),如下图所示:
确保您已在 Jenkins JOB 中将 Source Code Management 配置为 GIT。
然后创建Editable Email Notification post build action,并将git更改日志文件的名称复制为Attachments
的值,如下图:
【讨论】:
【参考方案4】:从Git Changelog Plugin 的2.0 及更高版本开始,您可以在管道中以字符串形式获取更改日志。然后在邮件中使用该变量。
node
deleteDir()
sh """
git clone git@github.com:jenkinsci/git-changelog-plugin.git .
"""
def changelogString = gitChangelog returnType: 'STRING',
from: [type: 'REF', value: 'git-changelog-1.50'],
to: [type: 'REF', value: 'master'],
template: """
<h1> Git Changelog changelog </h1>
<p>
Changelog of Git Changelog.
</p>
#tags
<h2> name </h2>
#issues
#hasIssue
#hasLink
<h2> name <a href="link">issue</a> title </h2>
/hasLink
^hasLink
<h2> name issue title </h2>
/hasLink
/hasIssue
^hasIssue
<h2> name </h2>
/hasIssue
#commits
<a href="https://github.com/tomasbjerre/git-changelog-lib/commit/hash">hash</a> authorName <i>commitTime</i>
<p>
<h3>messageTitle</h3>
#messageBodyItems
<li> .</li>
/messageBodyItems
</p>
/commits
/issues
/tags
"""
mail bcc: '', body: """Here is the changelog:
$changelogString
""", cc: '', from: '', replyTo: '', subject: 'The Changelog', to: 'the@email'
【讨论】:
以上是关于如何在 Jenkins 电子邮件中包含 git changelog?的主要内容,如果未能解决你的问题,请参考以下文章