0

環境:

  • Git リポジトリの「マスター」ブランチのみを構築する Jenkings プロジェクト。
  • Jenkins に新しい変更を通知する post-receive フックを備えた Git リポジトリ (Git 1.7.10 を使用)。スクリプトは Jenkins に新しい変更があることを伝えますが、Jenkins がリポジトリをスキャンすると、変更が「マスター」ブランチにない場合、ビルドはトリガーされません。

問題

開発者が 10 日前にコミットをリモート マスターにプッシュしました。Jenkins プロジェクトは 5 日前にセットアップされました。昨日、変更は 2 番目の開発者によってプルされ、新しいブランチが作成され、リモートにプッシュされました。つまり、master は何も変更されていません。しかし、Jenkins プロジェクトが開始されました。Jenkins によって検出された変更を見ると、ビルドをトリガーしたのは、10 日前に最初の開発者によって行われた最後のコミットでした。

4

1 に答える 1

2

この問題が解決されていないことに気付きました..これが私が当時修正した方法です..

理由

Jenkins のビルドは、Git リポジトリの "post-receive" フック スクリプトからトリガーされます。

#!/bin/bash
while read oldrev newrev refname
do
    true
done

curl http://jenkins/git/notifyCommit?url=ssh://git@devserver/repos/particualr_repo.git

ご覧のとおり、スクリプトは stdin を読み取り、それを無視します。したがって、コミットが任意のブランチからプッシュされると、ビルドが開始されます。しかし、ビルド プロジェクトはマスターをビルドするように構成されており、マスターへの最後のコミットが 10 日前であるため、ビルドの原因となった変更としてそれを登録します。

解決策 (マスターがプッシュされたときにのみビルドをキューに入れる)

マスターのみがプッシュされるようにフック スクリプトを変更します。

#!/bin/bash

if ! [ -t 0 ]; then
   read -a ref
fi

IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"

if [ "master" == "$branch" ]; then
   curl http://jenkins/git/notifyCommit?url=ssh://git@devserver/repos/particualr_repo.git
fi
于 2013-04-17T20:53:52.760 に答える