10

Hudson でビルド後のタスクを実行するために Phing を使用しています。

最後に成功した Hudson ビルド以降のすべてのコミットを含む変更ログを生成したいと考えています。しかし、ハドソンもハドソン用のGitプラグインも%last_build_time%変数を提供していないようです。

これは満足のいく解決策になります (ただし、時間を取得するにはどうすればよいでしょうか?):

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

今のところ唯一の方法は、ジョブの xml ファイルから抽出することですが、Phing で可能かどうかはわかりません。

変更ログをどのように生成しますか?

4

2 に答える 2

14

@takeshin の回答は、build.xml ファイルにアクセスできる場合は問題ありませんが、特にスレーブ ノードでビルドしている場合 (スレーブには参照された build.xml がないため)、これは壊れる可能性があります。

リモート アクセス API を使用して、Jenkins 経由で直接この情報にアクセスできるため、恐れることはありません。

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

例えば:

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

(xmlコンテンツを提供します...たとえば、xmlをjsonに置き換えて、XMLの代わりにjsonコンテンツを取得できます)。

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|'

したがって、すべてをまとめると、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 に答える