如何在 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;\"> &#8212; &#8220;<em>%m</em>&#8221;</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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Visual Studio中包含路径?

Jenkins的系统设置

删除 git 历史记录中包含合并的特定提交

如何在 Git 别名中包含 --no-pager?

如何在 Python 中从需求安装中包含 git 分支? [复制]

在 Netsuite 中,如何在从项目履行生成的电子邮件中包含跟踪号列表?