[解決済み] Gitのポストコミット・フックの設定方法
質問
Jenkinsからリモートでビルドを起動する方法は?
Gitのポストコミットフックを設定する方法は?
私の要件は、特定のプロジェクトのGitリポジトリに変更が加えられるたびに、そのプロジェクトのJenkinsビルドを自動的に開始することです。
Jenkins trigger build セクションで、trigger build remotely を選択しました。
で
.git
ディレクトリにある hooks ディレクトリで、ポストコミットファイルを設定する必要があります。
私はそこからビルドをトリガする方法を混乱させています(私たちはcurlコマンドを使用すべき部分があることを知っています)。
curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con
このコマンドは、git server hooks ディレクトリに置いています(post commit hook)。
リポジトリに変更があるたびに、automate buildが実行されます。
少なくとも1つのjavaファイルがあるかどうかを変更セットでチェックしたいのですが、ビルドが開始されるはずです。
もし開発者が xml ファイルやプロパティファイルだけを変更したとしたら、ビルドは開始されないはずです。
と共に
xml
は、仮に
.java
ファイルがあればビルドが開始されるはずです。
どのように解決するのですか?
で述べたように、" ポーリングは死ななければならない: git フックから Jenkins ビルドをトリガーする "で述べたように、新しいコミットをJenkinsに通知することができます。
最新の Git プラグイン 1.1.14 (では、以下のコマンドを実行するだけで、より簡単にこの作業を行うことができるようになりました。
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
これは指定されたURLをチェックアウトするように設定されたすべてのジョブをスキャンし、もしそれらもポーリングで設定されていれば、すぐにポーリングを開始します(そしてもしそれがビルドに値する変更を見つけた場合、ビルドが順番に開始されます)。
これは、Jenkinsでジョブが行ったり来たりしても、スクリプトが同じままであることを可能にします。
あるいは、単一のリポジトリホストアプリケーション(Gitosisなど)の下に複数のリポジトリがある場合、単一の受信後フックスクリプトをすべてのリポジトリで共有することができます。 最後に、この URL はセキュリティで保護された Jenkins でも認証を必要としません。なぜなら、サーバーはクライアントが送信した内容を直接利用しないからです。実際にビルドを開始する前に、変更があることを確認するためにポーリングを実行します。
として に記載されている のように、Jenkinsサーバーの正しいアドレスを使用していることを確認してください。
Jenkinsをポート8080のスタンドアロンウェブサーバーとして実行しているので、URLには
/jenkins
を取り除いたものであるべきで、このようになります。http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
最後のポイントを補強するために ptha は をコメントとして追加します。 :
当たり前のことかもしれませんが、私は問題がありました。
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
この url パラメータは リポジトリURL で指定したものと一致する必要があります。
例をコピーする際、プロトコルを省きましたが、私たちの場合はssh://
で、うまくいきませんでした。
"のようなシンプルな受信後フックを使用することもできます。 JenkinsとGITを使用したプッシュベースのビルド といった具合です。
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Jenkinsのジョブを「リモートでビルドをトリガー」できるように設定し、認証トークンを使用する(
1qaz2wsx
を使用します)。
しかし、これはプロジェクト固有のスクリプトであり、著者はこれを一般化する方法について言及しています。
最初の解決策は、認証や特定のプロジェクトに依存しないので、より簡単です。
ビルドを開始するために、少なくとも1つのjavaファイルがあるかどうかを変更セットでチェックしたいです。
例えば、開発者がXMLファイルやプロパティファイルだけを変更したとすると、ビルドは開始されないはずです。
基本的にはビルドスクリプトで可能です。
-
build' ノートを置く (
git notes
を参照) を最初の呼び出しに追加します。 -
の間のコミット一覧を取得します。
HEAD
で参照されるコミットと、ビルド候補のブランチのgit notes
'build' (git show refs/notes/build
):git diff --name-only SHA_build HEAD
. - のスクリプトはそのリストを解析し、ビルドを続行する必要があるかどうかを決定することができます。
-
いずれにせよ
git notes
'build
' からHEAD
.
2016年5月 cwhsu ポイント コメントで を指摘し、次のような可能性のあるURLを指定します。
<ブロッククオート
を使用することができます。
curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
で済むのですが、トリガーを設定すると
シェルスクリプトを少し使うだけで、特に共通のディレクトリの下に多くのリポジトリがある場合、手動での URL 設定を回避できることを付け加えたいと思います。
たとえば、私は以下のパラメータ拡張を使用して、リポジトリ名を取得しました。
repository=${PWD%/hooks}; repository=${repository##*/}
といった感じで使います。
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push some refs to .......
-
gitアップロードの共通エラー処理
-
[解決済み】gitの「not something we can merge」エラーの解決方法
-
[解決済み] [Solved] originにプッシュしようとすると、Gitが「No such remote 'origin'」と言うのはなぜですか?
-
[解決済み] git が「Pull is not possible because you have unmerged files」と表示するのはなぜですか?
-
[解決済み] git stashを元に戻す
-
[解決済み] SourceTree error:1407742E:SSLルーチン:SSL23_GET_SERVER_HELLO:tlsv1警告プロトコルバージョン
-
[解決済み] ブラウンアウトの一環として、パスワード認証が一時的に無効になっています。代わりに個人用アクセストークンを使用してください[重複]。
-
[解決済み] Gitのエラー「object file ... is empty」はどうすれば直せますか?
-
[解決済み] Gitのプッシュエラーです。Unable to unlink old (Permission denied)です。