访问Jenkins中的Build Changelog

我一直拉着我的头发试图find一种方法,包括jenkins(从SVN拉)产生的变化列表到我们的Testflight笔记。 我正在使用Testflight插件,它有一个注释字段 – 但似乎没有任何jenkins创buildembedded该信息的参数/标记。

有没有人有幸能完成这样的事情?

看起来TestFlight插件扩展了放置在“Build Notes”字段中的variables,所以问题是:我们如何才能将当前构build的变化变成一个环境variables?

据我所知,Subversion插件不通过环境variables提供这些信息。 但是,Jenkins所有的SCM插件都集成了更新日志信息,您可以通过Web UI中的“更改”链接查看每个构build的信息。

这些信息也可以通过Jenkins API获得,即使在构build过程中也是如此。

例如,如果您在运行此命令的位置添加“Execute shell”构build步骤:

curl -s "http://jenkins/job/my-job/$BUILD_NUMBER/api/xml?wrapper=changes&xpath=//changeSet//comment" 

你会得到一个类似于这样的XML文档:

 <changes> <comment>First commit.</comment> <comment>Second commit.</comment> </changes> 

然后,您可以将这些信息进行格式化,然后将其放入一个环境variables,然后可以在TestFlight“Build Notes”部分中引用它。

但是,在构build步骤中设置环境variables默认情况下不是永久性的 – 要这样做需要使用EnvInject插件 。

在这种情况下,您可以将更改日志文本写入临时文件,其内容如下所示:

 CHANGELOG="New in this build:\n- First commit.\n- Second commit." 

然后,通过使用“ 环境属性文件path”选项的构build步骤来加载该文件, $CHANGELOGvariables将存在于您的环境中,并持续到构build结束,允许您在“构build注释”字段中使用它。


注意:我自己并没有使用TestFlight插件(尽pipe我快速浏览了代码),而且我只用Git仓库来testing更改API。 同样,我没有testingEnvInject插件应该如何编码新行,这可能会导致问题。

鉴于jenkinslogin更改格式,我更新了原始post的XML内容。 此外,由于原始TestFlight死亡,并且插件现在已经过时,我将内容推送到HockeyKit使用的HTML文件。 这是一个真正的文本文件与换行符。 制作sed插入线断裂是挑战性的,并且string看起来非常混乱(至less对我来说)乍一看。

 #for distribution in projects Changelog=$(curl "${BUILD_URL}api/xml?wrapper=changes&xpath=//changeSet//item//msg" | sed -e "s/<\/msg>//g; s/<msg>/\\`echo -e '\r'`/g; s/<\/*changes>//g" ) # Write result to properties file echo -e "$Changelog" > "${BuildDestinationPath}/"${BUILD_NUMBER}.html 

注意编辑:BuildDestinationPath和Changelog是我的本地variables。 上限中的variables是Jenkins环境variables,应该存在于任何安装中。

我正在使用这个在这里find: http : //jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html

 ${CHANGES, showPaths=true} 

非常简单,它适用于SVN。

实际上,通过读取/parsingbuild文件夹中的../builds/$BUILD_NUMBER/changelog.xml文件,您可以在构build阶段完成之前访问该信息。 这个文件是在SVN / GIT提交触发的情况下创build的,而不是在build或post_build阶段结束时创build的。 这意味着,您可以在脚本的相同作业的构build阶段开始时parsing它,并将数据插入到envvariables中。

这是如果你不想使用curl和XML。

我做了一些Python的例子,将XML转化为CHANGELOGS

note.xml应该是

 <changes> <msg>First commit.</msg> <msg>Second commit.</msg> </changes> 

实际的python代码如下

 from xml.etree.ElementTree import parse tree = parse("note.xml") root = tree.getroot() sentence = 'CHANGELOG =\"' cnt = 1 for element in root.findall('msg'): tempstring = element.text tempstring =str(cnt)+'. '+'\\n'.join(tempstring.splitlines()) sentence =sentence +tempstring +'\\n' cnt = cnt +1 sentence = sentence + '\"' print sentence 

Testflight插件有一个选项。 这是提交:

https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36

我没有在最新的testflight-plugin发行版中看到它,所以我从git构build了插件,并且它有这个选项。

在这里输入图像说明