web-dev-qa-db-fra.com

Directive «parallèle» Jenkinsfile

J'essaie d'écrire un Jenkinsfile qui exécute en parallèle une séquence d'étapes. Le but est d'avoir deux agents (aka. nodes). L'un devrait faire une construction Windows et l'autre une construction Linux. Cependant, je ne veux pas que cela se produise de manière séquentielle mais en parallèle. J'essaie de trouver de la documentation pour la directive parallel qui est décrite dans Pipeline - Exécution parallèle de tâches .

J'ai trouvé une occurrence de parallel une sur Jenkins, mais il semble que la documentation soit cassée: https://jenkins.io/doc/pipeline/steps/workflow-cps/

parallel: Execute in parallel

org.kohsuke.stapler.NoStaplerConstructorException: 
    There’s no @DataBoundConstructor on any constructor of class
    org.jenkinsci.plugins.workflow.cps.steps.ParallelStep

Comment dois-je configurer un fichier Jenkins qui peut exécuter une série d'étapes de construction sur deux agents différents (un linux, une fenêtres) en parallèle?

En particulier, dois-je plutôt utiliser le pipeline déclaratif ou basé sur un script DSL?

10
lanoxx

Vous pouvez utiliser une déclaration ou un script pour effectuer un travail parallèle. Les documents basés sur des scripts pour le parallèle peuvent être trouvés ici: https://jenkins.io/doc/book/pipeline/jenkinsfile/#advanced-scripted-pipeline

Ils donnent l'exemple suivant ...

stage('Build') {
    /* .. snip .. */
}

stage('Test') {
    parallel linux: {
        node('linux') {
            checkout scm
            try {
                unstash 'app'
                sh 'make check'
            }
            finally {
                junit '**/target/*.xml'
            }
        }
    },
    windows: {
        node('windows') {
            /* .. snip .. */
        }
    }
}

Pour déclaratif, je crois que vous ferez ceci:

stage('Build') {
    steps {
        parallel (
            "Windows" : {
                echo 'done'
            },
            "Linux" : {
                echo 'done'
            }
        )
     }
}

Depuis Pipeline déclaratif 1.2 , la syntaxe déclarative préférée est:

pipeline {
    agent none
    stages {
        stage('Run Tests') {
            parallel {
                stage('Test On Windows') {
                    agent {
                        label "windows"
                    }
                    steps {
                        bat "run-tests.bat"
                    }
                    post {
                        always {
                            junit "**/TEST-*.xml"
                        }
                    }
                }
                stage('Test On Linux') {
                    agent {
                        label "linux"
                    }
                    steps {
                        sh "run-tests.sh"
                    }
                    post {
                        always {
                            junit "**/TEST-*.xml"
                        }
                    }
                }
            }
        }
    }
}
12
Spencer Malone