web-dev-qa-db-ja.com

プッシュされたGitブランチのみをビルドします

GitHubリポジトリのmasterブランチを構築するJenkinsの仕事があります。 masterへのコミットをプッシュするとうまくトリガーし、とても満足しています。

また、このリポジトリに他のブランチを構築する単一のJenkinsジョブが欲しいです。つまり(masterではない)ブランチにコミットをプッシュするたびに、このJenkinsジョブでそのブランチを構築し、そのブランチのみを構築したいと考えています。

GitHubプルリクエストプラグインを使用するには、プルリクエストを作成する必要があり、コミットをmasterとマージします。プルリクエストを作成することなくこれを実行し、masterとマージせずにコミットのみをビルドしたいと思います。

すべてのブランチをビルドするようにGitプラグインをセットアップすると、マスターにプッシュするたびにすべてのブランチがビルドされます。変更された1つのブランチのみを構築したいと思います。

ジェンキンスでこれを行うことは可能ですか?

24

私は同じ問題を抱えていたので、実験するためのダミープロジェクトをセットアップして解決策を見つけました。そして、そうであることがわかりました。プッシュされたブランチのみをできます

短い答えは"Branch Specifier"を使用することです。たとえば、Origin/feature**です。

GitFlow を使用していて、すべての機能ブランチにfeature/接頭辞が付いている場合、これが解決策です。

そして、もしあなたが興味があるなら、ここに私がそれを理解した方法があります。

リポジトリの設定から、サービス“ Github plugin”をJenkinsフックhttps://<jenkin server>/github-webhook/で設定しました。少なくとも私にとって何が起こったかは、何らかの理由で "test"を押した後、送信されるペイロードのメッセージが確認のために変更されなかったことに注意してくださいそれは受け取られた/認められたまたは何か。返事がないかもしれません。混乱しますが、とにかく...

新しいJenkinsジョブを作成し、branch specifierblankに設定しました= -Jenkinsは自動的に**に設定します。

機能ブランチfeature/fooを作成し、それにプッシュしました。

  • ビルド1が起動されましたが、masterブランチにあります。
  • ビルド2はfeature/fooブランチでも起動されました。

したがって、**または空白の指定子を使用すると、プラグインは、anyへのプッシュがあるたびに、リポジトリのすべてのブランチでビルドを起動します。

次に、パターンrefs/heads/feature/fooを試し、別の変更をfeature/fooブランチにプッシュしました。

  • ビルド3はfeature/fooブランチで実行されました。
  • 他のビルドは発生しませんでした。

ちょっと大丈夫ですが、これはあまりにも厳格です。機能ブランチごとに1つのビルドジョブが必要になります。 all機能ブランチの1つのビルドジョブが必要でした。

次に、パターンrefs/heads/feature\*\*でワイルドカードを試し、変更をfeature/fooにプッシュしました。

  • ビルドは発生しませんでした。

次に、ブランチ指定子refs/heads/feature/\*\*を試してプッシュしました。

  • ビルドは発生しませんでした

次に、 "Branch Specifier"フィールドのヘルプが「ワイルドカード」セクションでこれを読み取るのを見ました。

構文はREPOSITORYNAME/BRANCHの形式です。さらに、BRANCH*/BRANCHの短縮形として認識され、*はワイルドカードとして認識され、**は区切り文字を含むワイルドカードとして認識されます/。したがって、Origin/branches*Origin/branches-fooと一致しますが、Origin/branches/fooとは一致しませんが、Origin/branches**Origin/branches-fooOrigin/branches/fooの両方と一致します。

Origin/feature**を試してみました

  • ビルド4はOrigin/feature/fooに起動されました。

ユーレカ! (refs/で始まる)参照ではワイルドカードを使用できないようですが、実際のブランチの名前(Origin/で始まる)はできます )。

次に、ブランチfeature/barを作成して、そこにプッシュしました。これだけがビルドされ、他のブランチもビルドされないことを確認するために、feature/で始まります。

  • ビルド5はOrigin/feature/barに起動されました。

ほとんどそこに見えた。あと少しテストが必要だった。

次に、Origin/masterに別の変更をプッシュしました

  • ビルドは発生しませんでした。すごい!

次に、feature/barに別の変更をプッシュして、このブランチのみがビルドされることをテストしました。 Origin/masterもプッシュされたという事実にもかかわらず。

  • ビルド6がfeature/barに起動されました。
  • 他のビルドは発生しませんでした。

は、私にはよく見えますよ。

11
Mig82

Jenkinsで構成する複数のブランチのプラグインが表示されます。このメソッドを使用すると、Jenkinsからのブランチのフィードバックを取得できます。

https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin

お役に立てば幸いです。

4
thatway_3

Build Triggerセクションにwhitelist構成がリストされていることがわかりました:

click advanced to expand all options

whitelist

そこで、PRがマージされるブランチをビルド/テストするように指定できます。

1
Robert

実際、Jenkins GitHubプラグインページにこの質問への回答があるようです。

変更がGitHubにプッシュされたときにビルドをトリガーする

0
LeGEC

@ thatway_3 言及 のように、これはプラグインで可能です。リンク先のMulti-Branch Projectプラグインは非推奨ですが、代わりに Pipeline Multibranch Plugin を使用できます。

そのプラグインをインストールしてから、タイプ「Pipeline Multibranch」の新しいジョブを作成する場合、特定のリポジトリーを追跡するように構成できます。その後、(正しく!)そこからすべてのブランチを構築します。

参照: https://jenkins.io/blog/2015/12/03/pipeline-as-code-with-multibranch-workflows-in-jenkins/

お役に立てれば。

0
Sam