我一直在努力寻找一种方法,将 Jenkins 生成的更改列表(来自 SVN 拉取)包含到我们的 Testflight 笔记中。我正在使用 Testflight 插件,它有一个注释字段 - 但詹金斯似乎没有创建任何参数/令牌来嵌入该信息。
有没有人幸运地完成了这样的事情?
我一直在努力寻找一种方法,将 Jenkins 生成的更改列表(来自 SVN 拉取)包含到我们的 Testflight 笔记中。我正在使用 Testflight 插件,它有一个注释字段 - 但詹金斯似乎没有创建任何参数/令牌来嵌入该信息。
有没有人幸运地完成了这样的事情?
看起来 TestFlight 插件扩展了放置在“构建注释”字段中的变量,所以问题是:我们如何才能将当前构建的更改放入环境变量中?
据我所知,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 插件。
在这种情况下,您可以将更改日志文本写入临时文件,其内容如下:
CHANGELOG="New in this build:\n- First commit.\n- Second commit."
然后,通过使用带有环境属性文件路径选项的构建步骤来加载此文件,该$CHANGELOG
变量将存在于您的环境中并持续到构建结束,从而允许您在“构建说明”字段中使用它。
注意:我自己没有使用过 TestFlight 插件(尽管我快速查看了代码),我只使用 Git 存储库测试了更改 API。同样,我没有测试应该如何使用 EnvInject 插件对换行符进行编码,这样可能会导致问题。
鉴于 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 是我的局部变量。caps 中的变量是 Jenkins 环境变量,应该存在于任何安装中。
我正在使用这里找到的这个:http: //jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html
${CHANGES, showPaths=true}
非常简单,它适用于 SVN。
我做了一些将 xml 转换为 CHANGELOGS 的 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
事实上,您可以在构建阶段完成之前通过读取/解析构建文件夹中的 ../builds/$BUILD_NUMBER/changelog.xml 文件来访问该信息。该文件是使用 SVN/GIT 提交触发创建的,而不是在构建或 post_build 阶段结束时创建的。这意味着,您可以在同一作业的构建阶段开始时使用脚本对其进行解析,并将数据插入环境变量中。
这是如果您不想使用 curl 和 XML。
Testflight 插件为此提供了一个选项。这是提交:
https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36
我在最近的 testflight-plugin 版本中没有看到它,所以我从 git 构建了插件,它有这个选项。