62 votes

Quelle est la différence entre un nœud, une étape et une étape dans les pipelines Jenkins?

J'essaie de comprendre comment la structure de mon Jenkins 2.7 pipeline script groovy. J'ai lu à travers le pipeline tutoriel, mais nous pensons qu'il pourrait s'étendre davantage sur ces sujets.

Je peux comprendre qu'un pipeline peut avoir de nombreux stages et chaque stage peut avoir de nombreux steps. Mais quelle est la différence entre un step(); et un appel de méthode à l'intérieur d'un stage, disons sh([script: "echo hello"]);. Devrait - nodes être à l'intérieur ou à l'extérieur de l' stages? Si l'ensemble des propriétés d'un travail être à l'intérieur ou à l'extérieur d'un node?

Voici ma structure actuelle sur une ubuntu nœud maître:

#!/usr/bin/env groovy

node('master') {
    properties([
        [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']]
    ]);

    stage 'Checkout'
        checkout scm

    stage 'Build'
        sh([script: "make build"]);

    archive("bin/*");
}

56voto

chris_f Points 539

Les concepts de l' node, stage et step sont différentes:

  • node spécifie quelque chose doit arriver. Vous donnez un nom ou une étiquette, et Jenkins exécute le bloc-là.

  • stage des structures de votre script dans un de haut niveau de la séquence. Étapes apparaissent comme des colonnes dans le Pipeline de vue de la Scène avec une moyenne des durées des étapes et des couleurs pour le résultat de l'étape.

  • step est un moyen de préciser ce qui doit arriver. sh est d'une qualité similaire, il est un autre type d'action. (Vous pouvez également utiliser build pour les choses qui sont déjà définis comme des projets.)

Donc, steps peut résider dans nodes, (si elles ne le font pas, ils sont exécutés sur le maître), et nodes et steps peuvent être structurés en une séquence globale avec stages.

15voto

StephenKing Points 4379

Il dépend. Tout node déclaration alloue un exécuteur testamentaire (Jenkins maître ou esclave). Cela exige que vous stash et unstash de l'espace de travail, comme un autre exécuteur testamentaire n'a pas le vérifié les sources disponibles.

Plusieurs étapes du Pipeline DSL exécuter dans une mouche exécuteur testamentaire et donc ne nécessite pas d'être à l'intérieur d'un nodebloc. Cela peut être utile pour un exemple comme le suivant, où vous avez besoin d'allouer plusieurs nœuds de toute façon:

stage("Checkout") {
  checkout scm
}

stage("Build") {
  node('linux') {
    sh "make"
  }
  node('windows') {
    bat "whatever"
  }
}

stage("Upload") {
  ...

Un autre (peut-être plus réaliste exemple) serait d'allouer plusieurs nœuds parallel. Ensuite, il n'y a pas besoin de laisser l' stage appel être exécuté dans un autre alloué exécuteur testamentaire (aka dans node).

Votre exemple me semble bon. Il n'y a pas besoin d'allouer plusieurs nodes au sein de la stages, que ce serait seulement une charge supplémentaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X