访问Jenkins中的Build Changelog

Jim*_*art 37 svn jenkins testflight

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

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

Chr*_*Orr 34

看起来TestFlight插件扩展了置于"构建注释"字段中的变量,因此问题是:我们如何将当前构建的更改转换为环境变量?

据我所知,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"
Run Code Online (Sandbox Code Playgroud)

您将获得与此类似的XML文档:

<changes>
  <comment>First commit.</comment>
  <comment>Second commit.</comment>
</changes>
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据需要格式化此信息并将其放入环境变量中,然后可以在TestFlight"构建注释"部分中引用该变量.

但是,默认情况下,在构建步骤中设置环境变量不是持久的 - 要这样做,需要使用EnvInject插件.

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

CHANGELOG="New in this build:\n- First commit.\n- Second commit."
Run Code Online (Sandbox Code Playgroud)

然后,通过使用带有" 环境属性文件路径"选项的构建步骤来加载此文件,该$CHANGELOG变量将存在于您的环境中并持续到构建结束,允许您在"构建注释"字段中使用它.


注意:我自己没有使用过TestFlight插件(虽然我快速查看了代码),并且我只使用Git存储库测试了更改API.同样,我没有测试如何使用EnvInject插件编码换行符,因此可能会导致问题.

  • 顺便说一下,"你可以根据自己的喜好格式化这些信息" - 我使用过:`sed -e"s/<\/*comment> // g"| sed'/ ^ $/d; G'`删除XML` <comment>`标签并清理换行符. (6认同)
  • 当然,如果没有这种解决方法,必须有一种更简单的方法来访问这些信息吗? (2认同)

And*_*vic 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
Run Code Online (Sandbox Code Playgroud)

注意编辑:BuildDestinationPath和Changelog是我的本地变量.大写字母中的变量是Jenkins环境变量,应该存在于任何安装中.