2017-10-19 15 views
1

J'essaye d'écrire un Jenkinsfile scripté en utilisant le DSL groovy qui aura des étapes parallèles dans un ensemble d'étapes.Etape parallèle jenkinsfile scriptée

Voici mon jenkinsfile:

node { 
stage('Build') { 
    sh 'echo "Build stage"' 
} 

stage('API Integration Tests') { 
    parallel Database1APIIntegrationTest: { 
     try { 
      sh 'echo "Build Database1APIIntegrationTest parallel stage"' 
     } 
     finally { 
      sh 'echo "Finished this stage"' 
     }    

    }, Database2APIIntegrationTest: { 
     try { 
      sh 'echo "Build Database2APIIntegrationTest parallel stage"' 
     } 
     finally { 
      sh 'echo "Finished this stage"' 
     } 

    }, Database3APIIntegrationTest: { 
     try { 
      sh 'echo "Build Database3APIIntegrationTest parallel stage"' 
     } 
     finally { 
      sh 'echo "Finished this stage"' 
     } 
    } 
} 

stage('System Tests') { 
    parallel Database1APIIntegrationTest: { 
     try { 
      sh 'echo "Build Database1APIIntegrationTest parallel stage"' 
     } 
     finally { 
      sh 'echo "Finished this stage"' 
     }    

    }, Database2APIIntegrationTest: { 
     try { 
      sh 'echo "Build Database2APIIntegrationTest parallel stage"' 
     } 
     finally { 
      sh 'echo "Finished this stage"' 
     } 

    }, Database3APIIntegrationTest: { 
     try { 
      sh 'echo "Build Database3APIIntegrationTest parallel stage"' 
     } 
     finally { 
      sh 'echo "Finished this stage"' 
     } 
    } 
} 
} 

Je veux avoir 3 étapes: construire; Tests d'intégration et tests système. Au cours des deux phases de test, je souhaite que 3 ensembles de tests soient exécutés en parallèle, chacun par rapport à une base de données différente.

J'ai 3 exécuteurs disponibles. Un sur le maître, et 2 agents et je veux que chaque étape parallèle à exécuter sur n'importe quel exécuteur disponible. Ce que j'ai remarqué, c'est qu'après avoir exécuté mon pipeline, je ne vois que les 3 étapes, chacune étant marquée en vert. Je ne veux pas avoir à consulter les journaux pour cette étape afin de déterminer si l'une des étapes parallèles de cette étape a été réussie/instable/a échoué.

Je veux voir les 3 étapes dans mes étapes de test - marquées comme vert, jaune ou rouge (succès, instable ou échoué). J'ai envisagé d'étendre les tests à leurs propres étapes, mais j'ai réalisé que les étapes parallèles ne sont pas supportées (Est-ce que quelqu'un sait si cela sera supporté?), Donc je ne peux pas le faire car le pipeline prendrait beaucoup de temps trop long pour terminer.

Toute idée serait très apprécié, merci

Répondre

0

J'ai utilisé stage{} dans des blocs parallèles plusieurs fois. Ensuite, chaque étape apparaît dans la vue Stage. L'étape parent qui contient parallel n'inclut pas le minutage pour toutes les étapes parallèles, mais chaque étape parallèle apparaît dans la vue de scène.

Dans l'océan bleu, les étages parallèles apparaissent séparément à la place des étages. S'il y a une étape parent, elle apparaît comme parent des étapes parallèles.

Si vous n'avez pas la même expérience, une mise à jour du plugin est peut-être nécessaire.

+1

Pouvez-vous donner un exemple de l'endroit où vous avez utilisé une étape dans des blocs parallèles? Je me bats pour trouver toute la documentation sur ce –

0

Voici un exemple de leur docs:

exécution parallèle

L'exemple dans la section passe au-dessus des tests sur deux plates-formes différentes dans une série linéaire. En pratique, si l'exécution de la vérification du make prend 30 minutes, l'étape "Test" prendrait 60 minutes à compléter! Heureusement, Pipeline a une fonctionnalité intégrée pour exécuter des portions de Scripted Pipeline en parallèle, implémentées dans l'étape parallèle bien nommée.

refactorisation l'exemple ci-dessus pour utiliser l'étape parallèle:

// Jenkinsfile (Scripted Pipeline) 


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 .. */ 
     } 
    } 
}