8

私のセットアップは、cURL が有効で、Git と Hudson がインストールされた Windows XAMPP サーバーです。Hudson は Git を毎分ポーリングして変更を探し、見つかった場合はビルドを作成します。このビルドをテスト サーバーとして使用します。これはうまくいきます。

Hudson の強制ビルド機能を実行する中央リモート リポジトリに post-receive フックを設定したいと考えています。

開発者のローカル ブランチからプッシュされる中央の Git リポジトリのフック ディレクトリに、"post-receive" という post-receive ファイルを作成しました。それぞれが中央リポジトリの独自のブランチにプッシュします。Hudson が Git を毎分ポーリングするのではなく、すべてのプッシュの直後に post-receive ビルドを実行したいと考えています。

リモートサーバーへのシェルを開いてフックフォルダーで「post-receive」を実行すると、実行されます。人々がローカルリポジトリのコピーから中央のリポジトリにプッシュしたときに呼び出されていないだけです。

正しく説明していないかもしれませんが、これが私が Git を理解している方法です。

受信後コードは 2 行です。

#!/bin/sh
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken

繰り返しますが、シェルを開いてこれを実行すると動作しますが、誰かがシェルにプッシュしても何も起こらず、1 分も経たないうちに Hudson が Git が変更されたことに気づき、ビルドします。

必要に応じて明確にさせていただきます。どんな助けでも大歓迎です。

編集:それをいじった後、参照が何かの更新されていないため、受信後が実行されていないように感じますか? gitのドキュメントによると

すべての参照が更新された後、リモート リポジトリで 1 回実行されます。

これは、何も更新しないと実行されないということですか? もしそうなら、とにかく物事が更新されていると確信しているので、それは適用されるべきではありません.

これが私のプロセスです: ローカルで編集を行います。編集をコミットします。HEAD から「mybranch」と呼ばれるリモート ブランチ (チェックアウトされているマスター ブランチではない) にプッシュします。これは、フックを実行するポイントです。

4

5 に答える 5

11

ファイルに実行権限があるかどうかを確認してください。そうしないと実行できません。のようなものrwxr-xr-xで十分です。

不足しているビットを追加できます

$ chmod +x /path/to/post-receive
于 2011-02-09T21:52:12.157 に答える
6

リポジトリにプッシュするためにどのトランスポート方法を使用していますか?

フックは、sshやhttpのcgi実装などの「スマート」トランスポートプロトコルを使用する場合にのみ実行されます。ftp、rsync、古いhttp実装など、他の「ダム」トランスポートプロトコルの場合、フックは実行されません。gitプロトコルはフックを実行すると思いますが、そのプロトコルをプッシュすることは決して良い考えとは見なされていません。

于 2011-02-10T03:25:12.833 に答える
3

これらの回答はすべて役に立ちますが、PATH 変数に git の「bin」ディレクトリが必要であることがわかりました。「cmd」ディレクトリしかありませんでした。c:\my_path_to_git\git\binPATH に追加され、正常に動作します。試行錯誤してApacheエラーログを見て、この答えを見つけました。ご協力ありがとうございました!

于 2011-02-17T00:08:27.637 に答える
1

簡単な答えは、クライアント側ではなくサーバー側の受信後フックの内容を移動する必要があるということだと思います

于 2016-10-13T14:33:39.073 に答える
1

手動でスクリプトを実行する場合とは PATH が異なる可能性があるため、受信後のファイルで curl にフル パスを使用してみてください。

post-receive スクリプトを実行する環境を確認したい場合:

#!/bin/sh
export > file

または単に(リポジトリにプッシュした後にenv.変数が表示されます)

#!/bin/sh
export

また、シェル スクリプトの実行が Windows でどのように機能するのかわからないため、 #!/bin/sh の代わりに #!/path/to/installed/sh が役立つ場合があります

于 2011-02-09T22:01:48.513 に答える