10

我正在使用 Phing 在 Hudson 进行后期构建任务。

我想生成包含自上次成功构建 Hudson 以来的所有提交的更改日志。但看起来 Hudson 和 Hudson 的 Git 插件都没有提供%last_build_time%变量。

这将是令人满意的解决方案,(但如何获得时间?):

git log --pretty="%s" --since="%last_build_time%"

我现在看到的唯一方法是从作业 xml 文件中提取它,但我不知道是否可以使用 Phing。

您如何生成更改日志?

4

2 回答 2

14

如果您可以访问 build.xml 文件,@takeshin 的答案很好,但这可能会中断,特别是如果您在从节点上构建(因为从节点没有引用的 build.xml)。

不要害怕,因为您可以使用 Jenkins 的远程访问 API 直接通过 Jenkins 访问这些信息:

https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API

例如:

http://<host>/jenkins/job/<job_name>/lastSuccessfulBuild/api/xml

(将为您提供 xml 内容...例如,您可以将 xml 替换为 json 以获取 json 内容而不是 XML)。

请注意,如果您已将 Jenkins 实例设置为需要身份验证,则可能需要使用身份验证。同样,不要害怕:https ://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients

然后,将 XML 解析为您想要的内容就很简单了。像这样的东西,也许:

curl --silent --user $USER:$API_TOKEN $URL | grep "<lastBuiltRevision>" | sed 's|.*<lastBuiltRevision>.*<SHA1>\(.*\)</SHA1>.*<branch>.*|\1|'

因此,将它们放在一起,您最终可以得到一个(相对)简单的 shell 脚本来从 Jenkins 检索最后一个良好的修订哈希:

#!/bin/sh
GIT_LOG_FORMAT="%ai %an: %s"
USER=<username>
API_TOKEN=<api_token>

LAST_SUCCESS_URL_SUFFIX="lastSuccessfulBuild/api/xml"
#JOB_URL gets populated by Jenkins as part of the build environment
URL="$JOB_URL$LAST_SUCCESS_URL_SUFFIX"

LAST_SUCCESS_REV=$(curl --silent --user $USER:$API_TOKEN $URL | grep "<lastBuiltRevision>" | sed 's|.*<lastBuiltRevision>.*<SHA1>\(.*\)</SHA1>.*<branch>.*|\1|')
# Pulls all commit comments since the last successfully built revision
LOG=$(git log --pretty="$GIT_LOG_FORMAT" $LAST_SUCCESS_REV..HEAD)
echo $LOG

干杯,

列维

于 2011-10-05T22:56:18.373 回答
7

我已经使用 bash 提取了上次成功的构建日期:

git log --pretty="%s" --since="`date -r ./../lastSuccessful/build.xml "+%F %T"`"

(在 xml 文件中我必须"&quote;实体替换)。

于 2010-05-09T19:55:28.227 回答