3

メインのgitリポジトリで更新時にgitフックを作成しようとしています。テストを中断するプッシュを防止したい。更新後にプロジェクトのベアリポジトリコードを取得してテストを実行するにはどうすればよいですか?

PS: もちろん、更新の代わりに pre-commit フックを使用することも可能です。その場合、フックはコミッター PC にある必要がありますが、それはサーバーで検証を行う方法であるべきだと思います。

4

2 に答える 2

4

CIサーバーがそれを実行できますが、単純なスクリプトでもそのトリックを実行できます。David Gageotは、しばらく前に彼のブログでgitを使用したプライベートビルドの非常に簡単なソリューションを紹介しました(リモートサーバーにプッシュする前に、セカンダリローカルリポジトリでテストを使用してビルドするというアイデアです):

http://blog.javabien.net/tag/git/page/2/

残念ながら、それはフランス語で書かれていますが、それを行うために使用されるスクリプトを見ることができます:

#!/bin/bash
if [ 0 -eq `git remote -v | grep -c push` ]; then
    REMOTE_REPO=`git remote -v | sed 's/origin//'`
else
    REMOTE_REPO=`git remote -v | grep "(push)" | sed 's/origin//' | sed 's/(push)//'`
fi

if [ ! -z "$1" ]; then
    git add .
    git commit -a -m "$1"
fi

git pull

if [ ! -d ".privatebuild" ]; then
    git clone . .privatebuild
fi

cd .privatebuild
git clean -df
git pull

if [ -e "pom.xml" ]; then
    mvn clean install

    if [ $? -eq 0 ]; then
        echo "Publishing to: $REMOTE_REPO"
        git push $REMOTE_REPO master
    else
        echo "Unable to build"
        exit $?
    fi
fi

Java以外のユーザー向けに編集

上記のスクリプトでmvn clean install、プロジェクトをビルドできるようにするコマンドラインに置き換えます(そして、maven pom.xmlファイルの存在をテストするifステートメントを削除します)。

于 2012-08-08T15:33:49.223 に答える
4

このアプローチを使用してください: 開発者によるメイン リポジトリへのプッシュを無効にします。代わりに、人々にビルド リポジトリへのプッシュを強制します。CI サーバーをそのビルド リポジトリにポイントします。ビルドが成功したら、そのビルド サーバーをメイン リポジトリにプッシュします。

于 2012-08-08T15:11:52.540 に答える