如何在TeamCity中编写有关挂起更改的git日志

12

我已经配置了一个 TeamCity 代理来构建我的 XCode 项目,并且我使用 GitHub。我想要自动将来自 TeamCity 中所有未完成提交的描述包含在我的发布说明中。

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

3个回答

22

这是我最终使用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 获取自上次构建以来所有更改,并按任何您想要的方式格式化它们。我只想获取提交描述。

你如何在TeamCity中使用$NOTES的值? - Steve
有没有办法从TeamCity获取有关版本的任何信息? - Sam
谢谢分享!我在使用与默认分支不同的分支时遇到了一些麻烦,但我需要添加:builds/status:SUCCESS,branch:other_branch - apouche

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 Build Step中使用git命令

  7. 更改现在在changes.txt文件中。在我的应用程序(编辑器改进问题)中,我使用此文件提交到crashlytics进行iOS beta分发。


2

谢谢,我所有的更改已经推送到Github了,所以git log origin/master..master将不起作用,但我仍然可以看到这些更改,而TeamCity必须以某种方式跟踪它们,只是不确定如何。 - mishod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接