获取访问Jenkins中的构建变更日志
我一直在努力寻找一种方法将Jenkins(从SVN拉)生成的变更列表包含到我们的Testflight笔记中。我使用Testflight插件,它有一个注释字段 - 但似乎没有任何jenkins创建嵌入该信息的参数/标记。获取访问Jenkins中的构建变更日志
有没有人有过这样的事情?
看起来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插件对新行进行编码,因此可能会导致问题。
非常感谢你,克里斯托弗! – 2012-08-08 01:54:24
顺便说一句,“然后你可以格式化这个信息,但你喜欢” - 我用:'sed -e“s/ // g”| sed'/^$/d; G'去掉XML'
为了得到多个变化消息的干净的输出,我用@ makdad的这种变化: '的sed -e“S/ //克; S/
Testflight插件为此提供了一个选项。这里的承诺:
https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36
我没有看到它在最近testflight-插件的发行,所以我从建git的插件,并有这个选项。
如果testflight作为下游项目运行,这不会对您有所帮助。 – 2013-11-13 09:24:13
我用这一个在这里找到:http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html
${CHANGES, showPaths=true}
很简单,它为SVN。
这似乎是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环境变量,应该存在于任何安装中。
对于jenkins服务器的认证,curl部分应该是不同的 – 2015-11-12 17:19:14
实际上,通过读取/解析生成文件夹中的../builds/$BUILD_NUMBER/changelog.xml文件,您可以在生成阶段完成之前访问该信息。 这个文件是在SVN/GIT提交触发的情况下创建的,而不是在build或post_build阶段结束时创建的。这意味着,您可以使用脚本在同一作业的构建阶段开始时解析它,并将数据插入到env变量中。
这是如果你不想使用curl和XML。
我需要完全一样的东西。谢谢你提出这个问题,我更感激你的答案。 – makdad 2012-09-06 02:43:49