web-dev-qa-db-fra.com

Job DSL Plugin Vs Pipeline Plugin

Quelle est la principale différence entre plugin Job DSL et plug-in Pipeline

  1. les deux fournissent un moyen de création d'emplois par programme
  2. quel est le meilleur pour avancer et pourquoi?
  3. si les deux ont des fonctionnalités similaires, ont-ils des cas d'utilisation différents?
  4. Puisque Jenkins 2.0 se concentre sur les pipelines en tant que code, cela signifie-t-il que job-dsl n’a pas d’avenir, ou que le plug-in Pipeline est la prochaine étape du plug-in Job DSL?
55

J'ai une vaste expérience avec les deux. Une réponse concise est que Job DSL existe depuis beaucoup plus longtemps et constituait la solution open source de Netflix pour le "codage" Jenkins. Cela vous permettait d'introduire de la logique et des variables dans la création de scripts pour vos tâches Jenkins. Généralement, ces tâches étaient utilisées pour créer une sorte de "pipeline" pour un projet particulier. Ce plugin a reçu pas mal de traction en tant que moyen courant d'activer la création de modèles de tâches et la création de scripts.

Jenkins Pipeline (2.0) est une nouvelle incarnation d'un travail Jenkins entièrement basé sur un DSL et tente d'éliminer le besoin d'assembler plusieurs travaux pour remplir un seul pipeline, qui était de loin l'utilisation la plus courante de Job DSL. À l'origine, Pipeline DSL n'offrait pas beaucoup des fonctionnalités proposées par Job DSL et, comme indiqué ci-dessus, Job DSL vous permettait de créer des travaux de pipeline. Ils pourraient être utilisés ensemble pour définir un pipeline.

Aujourd'hui, IMO a peu de raisons d'utiliser Job DSL car Pipeline est le mécanisme pris en charge par Jenkins pour la création de scripts de pipelines Jenkins et il a atteint ou même surpassé une grande partie des fonctionnalités de Job DSL. De nouveaux plugins sont développés en mode natif pour Pipeline et ceux qui ne le sont pas sont encouragés par les développeurs Jenkins à s'intégrer à Pipeline. Et Pipeline présente plusieurs avantages:

  • Il n'est pas nécessaire de "créer" des travaux à l'aide de Pipeline comme avec Job DSL, car Pipeline est le travail lui-même . Avec Job DSL, c'est simplement un script qui crée d'autres tâches .
  • Avec Pipeline, vous disposez de fonctionnalités telles qu'une étape de saisie manuelle paramétrée, vous permettant de spécifier une logique intermédiaire dans le pipeline.
  • La logique qui peut être incluse dans un Job DSL se limite à créer les travaux eux-mêmes; alors qu'avec Pipeline, vous pouvez inclure une logique directement dans le travail.
  • Job DSL est tout simplement beaucoup plus difficile à créer un pipeline de livraison de base en utilisant, par exemple, le Build Pipeline Plugin ; en utilisant Pipeline, votre fichier sera plus petit et votre syntaxe plus courte. Et si vous utilisez Job DSL pour créer des travaux Pipeline, je n’ai plus constaté d’intérêt majeur à cet égard, compte tenu des fonctionnalités de modélisation disponibles immédiatement avec Jenkins Pipeline.

Enfin, Jenkins Pipeline est de loin la fonctionnalité la plus répandue de Jenkins à l’heure actuelle. Consultez le agenda Jenkins World 2016 et vous verrez env. 50% des sessions impliquent un pipeline. Aucune pour Job DSL.

62
Neil

Mon sentiment est que l'approche idéale consiste à utiliser les deux. Pipeline est la nouvelle fonctionnalité native de Jenkins permettant d’avoir des travaux en tant que code. Cependant, si vous construisez Jenkins à partir de zéro, ces emplois doivent encore être créés. Cela signifie que Jenkins ne peut pas être 100% véritablement scripté et construit à partir de code.

Vous pouvez utiliser JOB DSL pour créer la structure squelette de tous les travaux, puis utiliser un pipeline pour la mise en œuvre des travaux. Cela vous permettra d'utiliser le script Jenkins à 100%, moins le travail de départ initial à créer.

Peut-être que nous pourrons éventuellement utiliser pipeline pour contrôler totalement Jenkins (sécurité, configuration et même plugins). Mais jusque-là, je pense que l’utilisation de DSL et Pipeline est une bonne approche.

21
CodyK

Il y a une distinction importante qui n'a pas été mentionnée jusqu'ici: les tests. Avec le job-dsl, il est possible de tester le code DSL avant de le valider auprès de SCM: https://github.com/sheehan/job-dsl-gradle-example - permet une suite de tests locale à exécuter sur le code DSL, ainsi que dans Jenkins, avant que le code ne soit exécuté. Autant que je sache, il n'y a pas d'équivalent dans l'approche par pipeline.

2
Andrew

Ma réponse préliminaire basée sur une expérience très limitée:

  • Chacun utilise un DSL Groovy différent.
  • Job DSL vous permet de créer d'autres tâches en fonction d'un script Groovy. Donc, si vous voulez un ensemble de travaux liés à X (par exemple un pipeline), vous créerez un travail Job DSL, écrirez le script, exécuterez ce travail, puis vous obtiendrez ces travaux X, plus celui qui créera ces travaux. . À ce stade, seul le travail que vous avez créé directement a été exécuté, mais pas ceux créés par ce travail. OOTB, ces travaux ne sont pas cachés de la même manière que les modules Maven dans un travail Maven multi-modules sont masqués, mais je comprends qu'il existe au moins un moyen de créer une vue et coller les emplois là-bas.
  • Pipeline DSL se bloque indéfiniment dans les 2 environnements très différents où je l’ai essayé. : '(C’est un bogue connu de ShowStopper, si je comprends bien - recherchez et vous trouverez quelques tickets de bogues ouverts. Quoi qu’il en soit, l’exécution du travail Pipeline que vous créez exécute en réalité le pipeline et ne génère pas un tas d’emplois comme le Job DSL Ainsi, les déclencheurs pour exécuter le travail de pipeline sont des déclencheurs pour exécuter le pipeline, pas simplement pour mettre à jour les travaux qu'il définit.
  • Pipeline semble être plus largement utilisé, à en juger par les numéros de téléchargement. Bien sûr, Pipeline est une fonctionnalité par défaut de Jenkins 2.0, qui pourrait expliquer l’augmentation récente du nombre de téléchargements. Les responsables de Jenkins veulent bien que vous l’utilisiez .

Donc, pour récapituler: le DSL de Job DSL sert à créer des travaux formant un pipeline, le DSL de Pipeline Plugin définit le pipeline lui-même.

Et pour répondre à votre (vos) question (s): Pipeline devrait être plus largement pris en charge à l’avenir, me semble plus simple (le travail est un travail, pas une méta -obob) et semble avoir plus de fonctionnalités (y compris le flux de travail). Je l’utiliserais à moins que vous ne rencontriez le bogue Showstopper susmentionné de Doom et ne trouviez pas de solution/solution de contournement.

2
Jason Young