Jenkins からリモートでビルドをトリガーするにはどうすればいいですか?
Git のコミット後フックを設定するにはどうすればいいですか?
私の要件は、特定のプロジェクトの Git リポジトリに変更が加えられるたびに、そのプロジェクトの Jenkins ビルドが自動的に開始されることです。
Jenkins のトリガー ビルド セクションで、リモートでトリガー ビルドを選択しました。ディレクトリ
には.git
、コミット後のファイルを構成する必要があるフック ディレクトリがあります。
そこからビルドをトリガーする方法がわかりません (curl コマンドを使用する必要がある部分はわかっています)。
curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con
このコマンドを Git サーバーのフック ディレクトリ (コミット後のフック) に配置しました。
リポジトリに変更が発生するたびに、自動ビルドが実行されます。
変更セットで、少なくとも 1 つの Java ファイルにビルドを開始する必要があるかどうかを確認したいと思います。
開発者が XML ファイルまたはプロパティ ファイルのみを変更した場合、ビルドは開始されません。
またxml
、.java
ファイルが存在する場合、ビルドは開始されるはずです。
ベストアンサー1
「ポーリングは死ななければならない: Git フックから Jenkins ビルドをトリガーする" を使用すると、Jenkins に新しいコミットを通知できます。
最新のGit プラグイン 1.1.14(今リリースしたばかりですが)、次のコマンドを実行するだけで、これをより簡単に実行できるようになりました。
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
これにより、指定された URL をチェックアウトするように構成されているすべてのジョブがスキャンされ、ポーリングも構成されている場合は、すぐにポーリングがトリガーされます (ビルドに値する変更が見つかった場合は、ビルドがトリガーされます)。
これにより、Jenkins でジョブが送信されてもスクリプトは同じままになります。
または、単一のリポジトリ ホスト アプリケーション (Gitosis など) の下に複数のリポジトリがある場合は、すべてのリポジトリで単一の post-receive フック スクリプトを共有できます。最後に、この URL は、サーバーがクライアントが送信しているものを直接使用しないため、セキュリティ保護された Jenkins でも認証を必要としません。実際にビルドを開始する前に、変更があるかどうかを確認するためにポーリングを実行します。
としてここで言及されている、Jenkins サーバーの正しいアドレスを使用していることを確認してください:
Jenkins をポート 8080 でスタンドアロン Web サーバーとして実行しているため、URL は
/jenkins
次のように なしでなければなりません。http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
明らかなことかもしれませんが、次のような問題がありました:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
のURLパラメータは、リポジトリ URLJenkins ジョブの。
例をコピーするときに、プロトコルを省略しましたが、このケースではssh://
機能しませんでした。
「のような単純な受信後フックを使用することもできます。Jenkins と GIT を使用したプッシュベースのビルド「
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Jenkins ジョブを「リモートでビルドをトリガー」できるように構成し、認証トークン (
1qaz2wsx
この例では ) を使用します。
ただし、これはプロジェクト固有のスクリプトであり、著者はこれを一般化する方法について言及しています。
最初の解決策は、認証や特定のプロジェクトに依存しないため、より簡単です。
変更セットに、ビルドを開始するために必要な Java ファイルが少なくとも 1 つあるかどうかを確認したいと思います。
開発者が XML ファイルまたはプロパティ ファイルのみを変更した場合、ビルドは開始されません。
基本的に、ビルド スクリプトは次のことを行うことができます。
- 「ビルド」ノートを記入してください(
git notes
)最初の通話で HEAD
後続の呼び出しでは、ビルドの候補となるブランチとgit notes
'build' (git show refs/notes/build
)によって参照されるコミットの間のコミットのリストを取得しますgit diff --name-only SHA_build HEAD
。- スクリプトはそのリストを解析し、ビルドを続行する必要があるかどうかを判断できます。
git notes
いずれにしても、 'build
' を に作成/移動しますHEAD
。
2016年5月:中国語指摘しているコメント欄考えられる 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