web-dev-qa-db-fra.com

Jenkins Pipeline Jenkinsfile: directives 'noeud' et 'pipeline'

Je commence à utiliser pipeline déclaratif Jenkins . Parmi les exemples que j'ai vus, j'ai remarqué que Jenkinsfile est configuré avec la directive Pipeline:

pipeline {
    agent any 

    stages {
        stage('Build') { 
            steps { 
                sh 'make' 
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml' 
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}

Dans d’autres exemples, je remarque que le fichier Jenkins est configuré avec une directive node:

node {
    stage 'Checkout'
        checkout scm

    stage 'Build'
        bat 'nuget restore SolutionName.sln'
        bat "\"${tool 'MSBuild'}\" SolutionName.sln /p:Configuration=Release /p:Platform=\"Any CPU\" /p:ProductVersion=1.0.0.${env.BUILD_NUMBER}"

    stage 'Archive'
        archive 'ProjectName/bin/Release/**'

}

Je n'ai pas été en mesure de trouver une documentation solide sur le moment/la raison d'utiliser chacun de ces éléments. Quelqu'un at-il des informations sur les raisons pour lesquelles ils diffèrent et quand il convient d'utiliser l'un ou l'autre?

Je ne suis pas sûr, mais je crois que la directive 'node' est utilisée dans un pipeline scripté par opposition à un pipeline déclaratif.

Merci d'avance pour toute orientation.

41
J0991

oui, un node de niveau supérieur implique un pipeline scripté, et un pipeline de niveau supérieur implique un pipeline déclaratif.

déclarative semble être l'option la plus durable et celle que les gens recommandent, comme dans ceci poste de la liste d'utilisateurs jenkins où un contributeur principal dit "allez déclaratif". c'est le seul que Visual Pipeline Editor peut prendre en charge. il supporte la validation. et il finit par avoir la plus grande partie de la puissance des scripts puisque vous pouvez y revenir dans la plupart des contextes. de temps en temps, quelqu'un propose un cas d'utilisation où il ne peut pas vraiment faire ce qu'il veut faire avec le déclaratif, mais ce sont généralement des personnes qui utilisent un script depuis un certain temps, et ces lacunes de fonctionnalités sont susceptibles de se fermer dans le temps. et enfin, si vous devez vraiment vous en tirer, écrire un traducteur programmatique de déclaratif en script serait plus facile que l'inverse (un peu par définition, car la grammaire est plus étroitement contrainte).

plus de contexte sur les avantages du déclaratif à partir du billet de blog sur la disponibilité générale: https://jenkins.io/blog/2017/02/03/declarative-pipeline-ga/

les documents les plus officiels que j'ai pu trouver mentionnent les deux (à compter du 21 juin 2017): https://jenkins.io/doc/book/pipeline/syntax/

47
burnettk