访问Jenkins中的Build Changelog

时间:2012-08-06 07:04:06

标签: svn jenkins testflight

我一直在努力寻找一种方法,将Jenkins(从SVN拉动)生成的更改列表包含在我们的Testflight笔记中。我正在使用Testflight插件,它有一个笔记字段 - 但似乎没有jenkins创建的任何参数/令牌来嵌入这些信息。

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

6 个答案:

答案 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构建了插件,它有这个选项。

enter image description here