「ポーリングは死ぬ必要があります: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をスタンドアロンのWebサーバーとしてポート8080で実行しているので/jenkins
、次のようにURLにはがないはずです。
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ファイルまたはプロパティファイルのみを変更したとすると、ビルドは開始されません。
基本的に、ビルドスクリプトは次のことができます。
- 「ビルド」ノートを置く(
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
あなたのアイテムにトリガー設定を設定した場合に使用できます
2016年6月、ポラレットはコメントで指摘しています:
シェルスクリプトを少し追加するだけで、手動でのURL設定を回避できることを追加したいと思います。特に、共通のディレクトリの下に多数のリポジトリがある場合はそうです。
たとえば、これらのパラメーター展開を使用してレポ名を取得しました
repository=${PWD%/hooks};
repository=${repository##*/}
そしてそれを次のように使用します:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository