12

我有一个配置为构建我的 XCode 项目的 TeamCity 代理,并且我使用 github。我想在我的发行说明中自动包含 TeamCity 中所有待处理提交的描述。

如何从 github 获取它们并将它们存储在 teamcity 中?一旦我将它们放入 teamcity 变量中,我就可以轻松地将它们添加到我的构建脚本中。

4

3 回答 3

21

这就是我最终使用 bash 脚本执行此操作的方式:

#!/bin/bash 

curl -o lastBuild.tmp "http://localhost:8111/app/rest/buildTypes/id:bt2/builds/status:SUCCESS" --user rest:rest
last_commit=`xpath lastBuild.tmp  '/build/revisions/revision/@version'| awk -F"\"" '{print $2}'`

echo "##Last commit = $last_commit"
# prepare build notes
NOTES=`git log --pretty=format:"- %s" $last_commit..origin/master`

echo "this is it:$NOTES"

一些解释:

  1. 用于curl从您的构建配置中获取最后一个成功的构建。在我的示例中,这是 bt2,请确保将其替换为您的
  2. 使用 XPath/AWK 解析 XML 响应并获取最后一个 git 版本
  3. 用于git log从上次构建中获取所有更改并根据需要格式化它们。我只想获取提交描述。
于 2012-05-31T20:56:37.130 回答
2

您可以使用“从构建步骤添加或更改构建参数”功能,以便直接从构建步骤更新一些构建参数。

从 GitHub 获取之后,您需要一个调用步骤git log origin/master..master(参见“ git: list commits not push to the origin yet ”)。
(有关使用 GitHub 的 TeamCity 配置,请参阅“通过 Git 使用 Team City ”,并确保您的TeamCity 使用正确的帐户运行

于 2012-05-29T08:02:19.183 回答
2

当我实现上述答案时,我发现了几个问题,这些问题在这里更新:

#!/bin/bash 

curl -o lastBuild.tmp "http://localhost:8111/app/rest/buildTypes/id:%system.teamcity.buildType.id%/builds/status:SUCCESS" --user rest:rest
last_commit=`xpath lastBuild.tmp '/build/revisions/revision/@version'| awk -F"\"" '{print $2}'`

git log --pretty=format:"- %%s" $last_commit..origin/master > changes.txt

一些更详细的事情:

  1. 用于curl从您的构建配置中获取最后一个成功的构建。您可以使用 teamcity 的替换来输入构建 ID。
  2. 请注意,curl 命令依赖于名为 rest 的 TeamCity 用户,密码为“rest”。建议修改密码。

  3. 使用 XPath/AWK 解析 XML 响应并获取最后一个 git 版本

  4. 用于git log从上次构建中获取所有更改并根据需要格式化它们。我只想获取提交描述并将它们写入文件。您需要通过将 git 设置为在构建之间进行清理,以确保文件在构建之间消失。注意:如果您要构建除 master 以外的任何东西,则需要在此处使用正确的分支规范。

  5. 请注意,git log格式选项使用 %,它是 teamcity 替换标记,因此需要转义为 %%。

  6. 您需要配置 TeamCity 以使 .git 目录可访问。请参阅在 TeamCity 构建步骤中使用 git 命令

  7. 更改现在位于 changes.txt 文件中。在我的应用程序(编辑改进问题)中,我使用此文件提交给 crashlytics 以获取 iOS 测试版分发。

于 2015-11-21T00:11:37.653 回答