我一直在努力寻找一种方法,将Jenkins(从SVN拉动)生成的更改列表包含在我们的Testflight笔记中。我正在使用Testflight插件,它有一个笔记字段 - 但似乎没有jenkins创建的任何参数/令牌来嵌入这些信息。
有没有人有幸做过这样的事情?
答案 0 :(得分:34)
看起来TestFlight插件扩展了“Build Notes”字段中的变量,所以问题是:我们如何才能将当前构建的变化变为环境变量?
据我所知,Subversion插件不通过环境变量提供此信息。但是,所有Jenkins SCM插件都集成了更改日志信息,您可以通过Web UI中的“更改”链接查看每个版本。
即使在构建过程中,也可以通过Jenkins API获取此信息。
例如,如果添加“Execute 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="New in this build:\n- First commit.\n- Second commit."
然后,通过使用带有Environment Properties File Path选项的构建步骤来加载此文件,$CHANGELOG
变量将存在于您的环境中并持续到构建结束,允许您在“构建备注”字段。
注意:我自己没有使用过TestFlight插件(虽然我快速查看了代码),并且我只使用Git存储库测试了更改API。同样,我没有测试如何使用EnvInject插件对换行进行编码,因此可能会导致问题。
答案 1 :(得分:7)
鉴于Jenkins日志更改了格式,我更新了原始帖子中的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环境变量,应该存在于任何安装中。
答案 2 :(得分:4)
我正在使用此处找到的:http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html
${CHANGES, showPaths=true}
非常简单,适用于SVN。
答案 3 :(得分:2)
我做了一些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
答案 4 :(得分:2)
实际上,您可以在构建阶段完成之前通过读取/解析构建文件夹中的../builds/$BUILD_NUMBER/changelog.xml文件来访问该信息。 此文件是使用SVN / GIT提交触发创建的,而不是在构建或post_build阶段结束时创建的。这意味着,您可以使用脚本在同一作业的构建阶段开始时解析它,并将数据插入到env变量中。
如果你不想使用curl和XML,那就是这样。
答案 5 :(得分:0)
Testflight插件有一个选项。这是提交:
https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36
我在最近的testflight-plugin版本中没有看到它,所以我从git构建了插件,它有这个选项。