如何检索Jenkins构建的SVN Changeset注释?

我的过程是Jenkins每隔三分钟轮询SVN一次构建,在发生更改时执行构建,然后创建一个部署包,然后将其推送到Octopus.部署完成后,它会通过电子邮件向所涉及的每个人发送部署报告.

现在,报告中的构建注释只是典型的样板文件,即Jenkins Build 35.如果我可以为触发构建的变更集提取注释并从中构建发行说明,那将会是多么美妙.

如果我能得到评论,那么将它们放入发行说明非常简单.如果有人对此有任何想法,我将不胜感激.

更新:有关如何使用email-ext插件执行此操作的相关问题,但我没有使用该插件,据我所知,答案是使用该插件的语法表达的,我可以’弄清楚如何适应它.我很感激答案直接关系到我在这里的用法.

最佳答案
您可以通过3种方式获得SCM更改

Groovy的

Groovy与Java类似,是Jenkins的原生,因此您可以直接使用Groovy引用Jenkins对象模型和数据.您仍然需要插件来执行Groovy代码,例如Groovy Plugin.以下是从这个答案中采用的一些示例代码:
How to get the list of changed file in SVN from Jenkins

import hudson.model.*
import hudson.util.*
import hudson.scm.*
import hudson.scm.SubversionChangeLogSet.LogEntry

// work with current build
def build = Thread.currentThread()?.executable

// for testing, use last build or specific build number
//def item = hudson.model.Hudson.instance.getItem("Update_SRC_Branch") 
//def build = item.getLastBuild()   
//def build = item.getBuildByNumber(35)   

// get ChangesSets with all changed items
def changeSet= build.getChangeSet()
List<LogEntry> items = changeSet.getItems()

从那里,项目列表现在包含更改集.根据需要使用.这就是我要使用Groovy,因为坦率地说我不使用它.

文件系统

Jenkins在$JENKINS_HOME / jobs / $JOB_NAME / builds / $BUILD_ID下存储文件系统.在版本1.597之前,$BUILD_ID是2015-03-16_00-13-19之类的格式的时间戳. After version 1.597,$BUILD_ID现在是一个内部编号$BUILD_NUMBER,如123(与您在构建历史记录日志中看到的内容相同).

那里有一个文件:$JENKINS_HOME / jobs / $JOB_NAME / builds / $BUILD_ID / changelog.xml.它包含您在UI中看到的所有相同的SCM更改集,从SCM中提取,所有这些都在XML文件中.解析文件,并且每个< msg> …< / msg>元素包含注释.可能不止一个.

但是,尽管在构建期间运行时可以使用所有变量(如果在Windows上将$VAR更改为%VAR%),则在构建完成之前不会创建特定的构建位置,因此您无法在构建期间访问它.目前的建设.但是,您可以将所有这些变量传递给下游构建(例如,您的部署作业,如果它是独立的),并且下游构建可以提取changelog文件.您需要Parameterized Trigger Plugin将变量传递给另一个构建.

电子邮件

Jenkins附带的邮件程序操作除了“样板”消息之外几乎什么都不做.如果你想要与电子邮件有任何关系,你需要Email-ext (Extended Email) Plugin.在这里有关于email-ext的大量问题/答案,甚至是标签,但我建议搜索文本email-ext而不是使用标签,因为很多问题没有完全标记.

您的第一个起点是“内容令牌参考”页面帮助(单击该文本旁边的?图标.它列出了可以在电子邮件标题/正文中使用的所有可能的标记

你想要“SCM评论”.这些是通过%{$CHANGES_SINCE_LAST_SUCCESS}标记引用的.要获得评论,请使用以下内容:

${CHANGES_SINCE_LAST_SUCCESS,changesFormat =“%m< br>”}

只需将上面的行放入电子邮件正文配置即可.您可以使用任何所需的纯文本将其包围.

要获得更好的格式化输出,请使用

${CHANGES_SINCE_LAST_SUCCESS,reverse = true,format =“< b> Build#%n< / b>< br>%c< br>”的更改,changesFormat =“< br> [< a href =' ${JENKINS_URL} / user /%a / builds'>%a< / a>] – (%r)%p< br>%m< br>“}

在我提供的密切重复问题中引用:
How can I get the SVN log entry in Jenkins when sending email

附:

如果您的要求是“无插件”,那么您需要找到一个与Jenkins不同的构建系统. Jenkins是一个开源项目,为开放社区维护的几乎所有其他内容提供核心和插件. Jenkins中的所有内容都是“插件”,即使是Subversion SCM步骤,Freestyle和Maven项目也是“插件”.有些与安装捆绑在一起,大多数需要在安装后添加.

转载注明原文:如何检索Jenkins构建的SVN Changeset注释? - 代码日志