私は Jenkins Perforce プラグインを使用しており、ワークスペースで変更をポーリングしています。その後、キャッチされた変更リストでビルドが実行されています。
問題: 複数の変更リストが同じポーリングに含まれている場合、ビルドは最後の変更リストでのみ実行されます (すべての変更リストでは実行されません)。
P4_CHANGELIST には、最後のチェンジリストが含まれています。
キャッチされた各チェンジリストでビルドを実行するにはどうすればよいですか?
私は Jenkins Perforce プラグインを使用しており、ワークスペースで変更をポーリングしています。その後、キャッチされた変更リストでビルドが実行されています。
問題: 複数の変更リストが同じポーリングに含まれている場合、ビルドは最後の変更リストでのみ実行されます (すべての変更リストでは実行されません)。
P4_CHANGELIST には、最後のチェンジリストが含まれています。
キャッチされた各チェンジリストでビルドを実行するにはどうすればよいですか?
これを実装するより正しい方法は、特定の変更セットで実行するようにジョブをパラメータ化してから、CLI を使用するか、curl のような単純なものを使用して Jenkins ジョブをリモートで開始するコミット後のトリガーを perforce サーバーに書き込むことです。これには、ポーリング間隔が発生するたびにバッチでではなく、コミットされるたびにすべての変更セットを構築できるという利点があります。
前述のとおり、この機能は Jenkins コアにはまだ存在しません。幸いなことに、この機能を Perforce プラグインに直接追加するためのチケットが公開されています。これにより、基本的に、実行されるたびに次の変更のみがビルドされ、実装は非常に簡単になるはずですが、ポーリング期間ごとに 1 つのビルドしか実行されないという欠点があります。
各変更リストのビルドの実行に関しては、それはまだ対応していない機能要求です (この質問で最初に回答されました)。
特定の変更リスト情報は、ジョブのメタデータにあります。ビルド段階でアクセスできるかどうかはわかりませんが、後で確実に見ることができます。このSummary of Changes
セクションには、最後のビルド以降の変更リストのみが表示されます。
builds
各ジョブのディレクトリには、changelog.xml
個々の「変更ログ エントリ」 (Perforce の場合は変更リスト) のエントリを含むファイルがあります。それぞれのchangenumber
要素はentry
、perforce からの変更リスト番号を示します。
最後に、Jenkins サーバーの外部にある自動化されたプロセスの情報をスクレイピングする場合は、次を取得することで最後のビルドの XML データを取得できます。
http://{sereveraddress}/job/{jobname}/lastSuccessfulBuild/api/xml
これは、それぞれに が含まれる のchangeSet
リストを含む XML 構造を返します (および eachとともに)。このデータはjsonでも利用できます。item
changeNumber
msg
affectedPath
解決策が見つかりました!
問題は、複数のチェンジリスト情報を提供しないポーリングにありました。Jenkins\Perforce プラグインでブランチをポーリングする代わりに、Perforce クエリを使用して、前回のビルド以降に送信されたすべてのクエリを見つけました。
問題を解決するために私がしたことは次のとおりです。
次に、見つかった各変更リストを作成し、LATEST_CHANGELIST_NUMBER を更新します (たとえば、ファイル内)。
それはうまくいきます!アイデアをありがとう!