获取访问Jenkins中的构建变更日志

问题描述:

我一直在努力寻找一种方法将Jenkins(从SVN拉)生成的变更列表包含到我们的Testflight笔记中。我使用Testflight插件,它有一个注释字段 - 但似乎没有任何jenkins创建嵌入该信息的参数/标记。获取访问Jenkins中的构建变更日志

有没有人有过这样的事情?

+0

我需要完全一样的东西。谢谢你提出这个问题,我更感激你的答案。 – makdad 2012-09-06 02:43:49

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

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

即使构建正在进行中,也可以通过Jenkins API访问此信息。

举例来说,如果你加入,你运行该命令的 “执行shell” 构建步骤:

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> 

然后,您可以将这些信息格式化,然后将其放入一个环境变量中,然后可以在TestFlight“构建注释”部分中引用它。

但是,在构建步骤中设置环境变量默认情况下不会持久—要这样做需要使用EnvInject Plugin

在这种情况下,你可以用喜欢的内容写你的changelog文本到一个临时文件:

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

然后,通过使用与Environment Properties File Path选项生成步骤加载该文件时,$CHANGELOG变量将存在在您的环境中并持续到构建结束,允许您在“构建注释”字段中使用它。


注:我没有用过TestFlight插件自己(虽然我参加了一个快速浏览一下代码),而我只用一个Git仓库测试的更改API。同样,我没有测试应如何使用EnvInject插件对新行进行编码,因此可能会导致问题。

+0

非常感谢你,克里斯托弗! – 2012-08-08 01:54:24

+6

顺便说一句,“然后你可以格式化这个信息,但你喜欢” - 我用:'sed -e“s/ // g”| sed'/^$/d; G'去掉XML''标签并清理换行符。 – makdad 2012-09-06 03:03:47

+0

为了得到多个变化消息的干净的输出,我用@ makdad的这种变化: '的sed -e“S/ //克; S//\吨* /克; S/ //克“| sed'/^$/d; G'' – 2014-02-22 17:01:05

Testflight插件为此提供了一个选项。这里的承诺:

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

我没有看到它在最近testflight-插件的发行,所以我从建git的插件,并有这个选项。

enter image description here

+0

如果testflight作为下游项目运行,这不会对您有所帮助。 – 2013-11-13 09:24:13

我用这一个在这里找到:http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html

${CHANGES, showPaths=true} 

很简单,它为SVN。

+2

这似乎是email-ext插件的一个功能,所以它可以用于在电子邮件中发送更改日志,但不能在其他地方发送。 – 2015-07-11 13:47:52

我做这覆羽XML来更新日志一些Python的例子

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 

鉴于詹金斯日志改变了形式,我更新原始帖子中的XML内容。此外,由于原始TestFlight死亡,并且插件现在已经过时,我将内容放入HTML文件以供HockeyKit使用。它确实是一个带有换行符的文本文件。制作sed插入线断裂是挑战性的,并且字符串乍看起来看起来很混乱(至少对我来说)。

#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是我的本地变量。大写中的变量是Jenkins环境变量,应该存在于任何安装中。

+0

对于jenkins服务器的认证,curl部分应该是不同的 – 2015-11-12 17:19:14

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

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