web-dev-qa-db-ja.com

ジョブDSLプラグインとパイプラインプラグイン

ジョブDSLプラグインパイプラインプラグイン の主な違いは何ですか

  1. どちらもプログラムによるジョブ作成の方法を提供します
  2. 前進として使用するのに最適なのはなぜですか?
  3. 両方に同様の機能がある場合、異なるユースケースがありますか?
  4. Jenkins 2.0はコードとしてパイプラインに焦点を合わせているため、これはjob-dslに将来がないことを意味しますか、それともPipelineプラグインがJob DSLプラグインの次のステップであることを意味しますか?
55

私は両方の経験が豊富です。簡潔な回答は、Job DSLはずっと長く存在しており、Jenkinsを「コーディング」するためのNetflixのオープンソースソリューションであったということです。 Jenkinsジョブのスクリプトにロジックと変数を導入でき、通常、これらのジョブを使用して特定のプロジェクトのある種の「パイプライン」を形成します。このプラグインは、ジョブのテンプレート化とスクリプト作成を可能にする一般的な方法として、かなりの注目を集めました。

Jenkins Pipeline(2.0)は、完全にDSLに基づくJenkinsジョブの新しい化身であり、Job DSLの最も一般的な使用である単一のパイプラインを満たすために複数のジョブをつなぎ合わせる必要性を排除しようとします。元々、Pipeline DSLはJob DSLが提供した機能の多くを提供していなかったため、前述のようにJob DSLを使用するとPipelineジョブを作成でき、それらを一緒に使用してパイプラインを定義できます。

今日、パイプラインはJenkinsパイプラインのスクリプトを作成するためのJenkinsがサポートするメカニズムであり、Job DSLの機能の多くを満たしているか、それを上回るため、IMOはJob DSLを使用する理由がほとんどありません。新しいプラグインはPipeline向けにネイティブに開発されており、Jenkins開発者によって推奨されていないプラグインはPipelineと統合するよう奨励されています。また、パイプラインにはいくつかの利点があります。

  • パイプラインはジョブそのものなので、ジョブDSLのようにPipelineを使用してジョブを「シード」する必要はありません。 Job DSLでは、他のジョブを作成するスクリプトにすぎません。
  • Pipelineには、パラメータ化された手動入力ステップなどの機能があり、パイプライン内のロジックを途中で指定できます。
  • Job DSLに含めることができるロジックは、ジョブ自体の作成に限定されています。一方、Pipelineを使用すると、ジョブ内にロジックを直接含めることができます。
  • Job DSLは、たとえば、 Build Pipeline Plugin ;を使用して基本的な配信パイプラインを作成するのがはるかに困難です。 Pipelineを使用すると、ファイルが小さくなり、構文が短くなります。また、Job DSLを使用してPipelineジョブを作成している場合、Jenkins Pipelineですぐに使用できるテンプレート機能を考えると、その大きな価値は見当たりません。

最後に、Jenkins Pipelineは、今のところJenkinsの最も一般的な機能です。 Jenkins World 2016のアジェンダ をご覧ください。セッションの50%はパイプラインに関係しています。 Job DSLの場合はありません。

62
Neil

私の感覚では、両方を使用することが理想的なアプローチです。パイプラインは、ジョブをコードとして持つための新しいネイティブJenkins機能です。ただし、Jenkinsをゼロから構築する場合、それらのジョブを作成する必要があります。これは、Jenkinsを100%真にスクリプト化し、コードから構築することはできないことを意味します。

できることは、JOB DSLを使用してすべてのジョブのスケルトン構造を構築し、パイプラインを使用してジョブを実装することです。これにより、作成される最初のシードジョブを差し引いたジェンキンスを100%スクリプト化できます。

たぶん、最終的にはパイプラインを使用してJenkins(セキュリティ、構成、プラグインさえ)を完全に制御できるようになるでしょう。しかし、それまでは、DSLとパイプラインを使用するのが良い方法だと思います。

21
CodyK

ここで言及されていない重要な違いが1つあります。テストです。 job-dslには、SCMにコミットする前にDSLコードをテストする手段があります。 https://github.com/sheehan/job-dsl-gradle-example -これにより、ローカルテストスイートが可能Jenkinsと同様に、コードが実行される前にDSLコードで実行されます。私が知る限り、ネイティブのPipelineアプローチには同等のものはありません。

2
Andrew

非常に限られた経験に基づく私の予備的な回答:

  • それぞれが異なるGroovy DSLを使用します。
  • Job DSLを使用すると、Groovyスクリプトに従って他のジョブを作成できます。したがって、X関連のジョブセット(パイプラインなど)が必要な場合は、1つのJob DSLジョブを作成し、スクリプトを作成して、そのジョブを実行すると、それらのXジョブに加えて、それらのジョブを作成します。その時点では、直接作成したジョブのみが実行され、そのジョブによって作成されたジョブは実行されていません。 OOTB、これらのジョブはnotマルチモジュールMavenジョブのMavenモジュールが隠されている方法で隠されていますが、少なくとも作成する方法があることを理解していますビューとそこにジョブを貼り付けます。
  • Pipeline DSLは、私が試した2つのまったく異なる環境で無期限にハングします。 : '(私が理解しているように、これは既知のショートップバグです。検索すると、これに関するいくつかの未解決のバグチケットが見つかります。作成したPipelineジョブを実行すると、Job DSLのようなジョブ。したがって、パイプラインジョブを実行するトリガーは、パイプラインを定義するジョブを更新するだけでなく、パイプラインを実行するトリガーです。
  • ダウンロード数から判断すると、パイプラインはより広く使用されているようです。もちろん、PipelineはJenkins 2.0のデフォルトの機能であり、最近のダウンロードの急増に対応する可能性があります。 Jenkinsのメンテナー 必ず使用してください

つまり、ジョブDSLのDSLはパイプラインを形成するジョブを作成するためのものであり、パイプラインプラグインのDSLはパイプライン自体を定義します。

そして、あなたの質問に答えるために:パイプラインは将来より広くサポートされるべきであり、私にとってはもっとわかりやすく(仕事はメタジョブではなく仕事です)、より多くの機能(ワークフローを含む)があるようです。前述のDoomの最高のバグを見つけて、修正/回避策を見つけられない限り、私はそれを使用します。

2
Jason Young