38

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

有没有人幸运地完成了这样的事情?

4

6 回答 6

34

看起来 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 插件对换行符进行编码,这样可能会导致问题。

于 2012-08-07T00:12:18.133 回答
8

鉴于 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 环境变量,应该存在于任何安装中。

于 2015-03-11T15:53:52.153 回答
4

我正在使用这里找到的这个:http: //jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html

${CHANGES, showPaths=true}

非常简单,它适用于 SVN。

于 2013-01-28T19:54:42.040 回答
2

我做了一些将 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
于 2014-10-21T05:56:07.647 回答
2

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

这是如果您不想使用 curl 和 XML。

于 2016-01-28T14:33:17.380 回答
0

Testflight 插件为此提供了一个选项。这是提交:

https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36

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

在此处输入图像描述

于 2013-01-24T17:03:48.340 回答