Jenkinsのスクリプト型パイプラインまたは宣言型パイプライン
私は、古いスタイルのプロジェクトベースのワークフローを、Jenkinsに基づくパイプラインに変換しようとしています。docs]1を見ていると、scripted
とdeclarative
という2種類の構文があることがわかりました。そんなJenkinsのWebのdeclarative
シンタックスのリリースは最近(2016年末)です。新しいシンタックスのリリースがありましたが、Jenkinsはまだscriptedシンタックスもサポートしています。
さて、この2つのタイプはそれぞれどのような場面でベストマッチになるのか、よくわかりません。scripted構文はもうすぐ非推奨になる?では、
declarative`はJenkinsパイプラインの未来になるのでしょうか?
この2つの構文タイプについて、どなたかご意見をお聞かせください。
87
5
Scripted Pipelineは、完全なプログラミング環境であるため、Jenkinsユーザーに非常に多くの柔軟性と拡張性を提供します。Groovyの学習曲線は、あるチームのすべてのメンバーにとって望ましいものではないため、Jenkins Pipelineをオーサリングするための、よりシンプルで意見交換しやすい構文を提供するために、Declarative Pipelineが作られました。
しかし、両者が異なる点は、構文と柔軟性です。Declarativeは、より厳密であらかじめ定義された構造でユーザーが利用できるものを制限し、よりシンプルな継続的デリバリーパイプラインに最適な選択となります。Scriptedは、Pipelineに特化したシステムではなく、Groovy自体で定義された構造や構文の制限があるため、制限がほとんどなく、パワーユーザーやより複雑な要件を持つ人に最適な選択肢です。その名の通り、Declarative Pipelineは宣言的なプログラミングモデルを推奨しています。一方、Scripted Pipelineは、より命令的なプログラミングモデルに従います。
https://jenkins.io/doc/book/pipeline/syntax/#compare より転載
考慮すべきもう1つのことは、宣言パイプラインにscript()ステップがあることです。 これにより、スクリプト化されたパイプラインを実行できます。 したがって、私の推奨は宣言パイプラインを使用し、必要に応じてスクリプトパイプラインに「script()」を使用することです。 したがって、あなたは両方の世界の最高のものを手に入れます。
最近、kubernetesエージェントでスクリプト化されたものから宣言に切り替えました。 '18年7月まで、宣言パイプラインには、キュベルネテポッドを指定する完全な機能がありませんでした。 ただし、「yamlFile」ステップを追加すると、レポのyamlファイルからポッドテンプレートを読み取ることができます。
これにより、たとえば. vscodeの優れたkubernetesプラグインでポッドテンプレートを検証し、それをJenkinsfileに読み込み、必要に応じてコンテナーをステップで使用します。
上記のように、スクリプトブロックを追加できます。 カスタムjnlpとドッカーを備えたポッドテンプレートの例。
declarativeは、より将来性のある選択肢であり、人々が推奨するものです。Visual Pipeline Editorがサポートできる唯一のもので、検証をサポートします。そして、ほとんどのコンテキストでscriptedに戻ることができるので、結局scriptedのほとんどの力を持ちます。たまに誰かがdeclarativeでやりたいことができない使用例を思いつきますが、それはたいていscriptedを使ってきた人であり、これらの機能ギャップはそのうち解消すると思われます。
more context: https://jenkins.io/blog/2017/02/03/declarative-pipeline-ga/
Jenkinsのドキュメントでは、両タイプを適切に説明し、比較しています。
引用します: スクリプトPipelineは、Jenkinsユーザーに非常に多くの柔軟性と拡張性を提供します。Groovyの学習曲線は、あるチームのすべてのメンバーにとって一般的に望ましいものではないので、Jenkins Pipelineをオーサリングするための、よりシンプルで意見交換しやすい構文を提供するためにDeclarative Pipelineが作られました。
この2つは、どちらも根本的には同じパイプラインのサブシステムの下敷きです";
詳しくはこちら:https://jenkins.io/doc/book/pipeline/syntax/#compare