2017-01-17 9 views
0

私は、Jenkinsのジョブとソースリポジトリとの間に1対1のマッピングを持つ、Jenkinsによって構築されたさまざまなコードのビットを含むいくつかのソースコードリポジトリを持っています。これらとは別に、リポジトリには、他のreposを構築するJenkinsジョブを作成/更新するためのJob DSLスクリプトが含まれています。状況は次のようになります。最後に実行してから変更されたDSLスクリプトだけを実行するJenkinsのシードジョブ?

enter image description here

私は、右のコードと一緒に、個々のソースリポジトリ内のジョブDSLスクリプトを保存する方法を見つけると、トリガーされる単一のシード仕事をしていることを望んでいた

他のリポジトリのにへのプッシュ通知によって。残念ながら、現在のところ、これは十分サポートされていないようです(this questionへの受け入れられた回答を参照)。それで、すべてのDSLを単一の別個のリポジトリに残し、そのリポジトリへのプッシュ通知がGroovyスクリプトの再処理をトリガーするようにするのが最も簡単なようです。そして、すべてがうまく機能します。

つまり、実際に変更されたジョブだけでなく、起動されたシードジョブがDSLスクリプトのすべてを再実行することに少し気になります。 (私は正直なところ、これが「問題」なのかどうかは確かではありませんが、後で驚くべき動作につながることが心配です)

シードジョブを再構成できる方法はありますかビルドをトリガしたコミットによって変更されたスクリプトを再実行しますか?または...これは心配する価値がないのですか?

答えて

2

ジョブDSLは、生成された設定が変更された場合にのみジョブを更新します。生成されたXMLと既存の設定を比較して、更新が必要かどうかを確認します。 JenkinsJobManagement.javaを参照してください。したがって、手動でジョブを変更したり、バックグラウンドでジョブの設定を変更する悪質なプラグインを実行したりしない場合は、スクリプトを再実行するときに問題はありません。

そして、ジョブDSLは複数のスクリプトを実行しているときにGroovyスクリプトエンジンを再利用するので、パフォーマンスに与える影響は小さくなければなりません。 DslScriptLoader.groovyを参照してください。

スクリプトに副作用(REST呼び出しやファイルシステムの変更など)がない場合は、不要であってもスクリプトを再実行する必要はありません。

+0

変更されていないDSLスクリプトを再実行することを心配する必要はないことを確認してくれてありがとう、特にそれを証明するためのソースコードリンクを提供してくれてありがとう。 – evadeflow

関連する問題