Svn 在Jenkins中获取构建变更日志的访问权限

Svn 在Jenkins中获取构建变更日志的访问权限,svn,jenkins,testflight,Svn,Jenkins,Testflight,我一直在想方设法将Jenkins(来自SVN pull)生成的更改列表包含到我们的测试飞行记录中。我正在使用Testflight插件,它有一个用于注释的字段,但是jenkins似乎没有创建任何参数/令牌来嵌入这些信息 有人有幸完成了类似的任务吗?看起来TestFlight插件扩展了放置在“构建注释”字段中的变量,所以问题是:我们如何将当前构建的更改获取到环境变量中 据我所知,Subversion插件没有通过环境变量提供这些信息。但是,所有Jenkins SCM插件都集成了changelog信息,

我一直在想方设法将Jenkins(来自SVN pull)生成的更改列表包含到我们的测试飞行记录中。我正在使用Testflight插件,它有一个用于注释的字段,但是jenkins似乎没有创建任何参数/令牌来嵌入这些信息


有人有幸完成了类似的任务吗?

看起来TestFlight插件扩展了放置在“构建注释”字段中的变量,所以问题是:我们如何将当前构建的更改获取到环境变量中

据我所知,Subversion插件没有通过环境变量提供这些信息。但是,所有Jenkins SCM插件都集成了changelog信息,正如您可以通过web UI中的“Changes”链接看到的,每个构建都包含这些信息

即使在构建过程中,也可以通过Jenkins API获得此信息

例如,如果在运行此命令时添加“执行shell”生成步骤:

您将获得类似以下内容的XML文档:

然后,通过使用带有加载此文件选项的构建步骤,
$CHANGELOG
变量将存在于您的环境中,并一直保持到构建结束,从而允许您在“构建注释”字段中使用它



注意:我自己没有使用TestFlight插件(尽管我快速查看了代码),我只使用Git存储库测试了changes API。类似地,我没有测试如何使用EnvInject插件对换行符进行编码,这样可能会导致问题。

Testflight插件对此有一个选项。以下是提交:

我在最近的testflight插件版本中没有看到它,所以我从git构建了这个插件,它有这个选项


我正在使用这里找到的这个:


非常简单,适用于SVN。

我制作了一些python示例,将xml转换为变更日志

note.xml应该是

<changes>
      <msg>First commit.</msg>
      <msg>Second commit.</msg>
</changes>

鉴于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
#用于在项目中分发
Changelog=$(curl“${BUILD\u URL}api/xml?wrapper=changes&xpath=///changeSet//item//msg“| sed-e”s/////g;s//\`echo-e'\r'`/g;s///g”)
#将结果写入属性文件
echo-e“$Changelog”>“${BuildDestinationPath}/”${BUILD\u NUMBER}.html

注意:BuildDestinationPath和Changelog是我的局部变量。caps中的变量是Jenkins环境变量,应存在于任何装置上

事实上,您可以在构建阶段完成之前通过读取/解析构建文件夹中的../builds/$build\u NUMBER/changelog.xml文件来访问该信息。 此文件是在SVN/GIT提交触发时创建的,而不是在构建或后期构建阶段结束时创建的。这意味着,您可以在同一作业的构建阶段开始时使用脚本对其进行解析,并将数据插入env变量中


如果您不想使用curl和XML,就可以使用它。

非常感谢您,克里斯托弗!顺便说一句,“您可以随意格式化此信息”——我使用了:
sed-e“s///g”| sed'//^$/d;G'
去掉XML
标记并清理换行符。为了获得多条更改消息的清晰输出,我在@makdad上使用了这个变体:
sed-e“s///G;s//\t*/G;s///G”| sed'//^$/d;G'
如何将此日志保存到局部变量中?当然现在必须有一种更简单的方法来访问此信息,而无需此解决方法?我需要完全相同的方法。感谢您提出这个问题,我更感谢您的回答。如果testflight作为下游项目运行,这对您没有帮助。这似乎是email ext插件的一个功能,因此它可以在电子邮件中发送更改日志,但不能在其他地方发送。对于具有身份验证的jenkins服务器,curl部分应该有所不同
CHANGELOG="New in this build:\n- First commit.\n- Second commit."
${CHANGES, showPaths=true}
<changes>
      <msg>First commit.</msg>
      <msg>Second commit.</msg>
</changes>
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
#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