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?
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"
}
}
}
}
}
}
}