Jenkins Multibranch pipeline: jobs qui partent en même temps.

Répondre
Partager Rechercher
Salut,

J'ai un pipeline multibranch jenkins, il est lié à un webhook déclenché sur git push.
Si plusieurs push sont fait en même temps, les jobs démarrent en même temps.

Hors je ne peux pas me permettre ça (les branches sont différentes donc les tests sont invalides si les jobs se mélangent). Étonnamment je pensais que ça serait simple mais non.

On m'a suggéré de mettre ça dans mon jenkins file:

Citation :
def propertiesList = []
propertiesList << disableConcurrentBuilds()
properties(propertiesList)
Mais ça n'a pas l'air de marcher.
Avoir un seul exécuteur sur l'agent n'est pas suffisant (car mon pipeline exécute des jobs free style, donc rien ne garanti l'ordre quand des jobs concurents sont lancés).

Est-ce qu'il y a une solution à ce problème ?
J'ai pas de réponse à t'offrir, mais j'ai jamais vu de problématiques d'intégration continue & co abordées ici. Je te conseille de poster sur d'autres forums du type StackOverflow. Sur HFR tu trouveras peut-être plus facilement une réponse aussi.
Message supprimé par son auteur.
Citation :
Publié par Aorewen
J'ai pas la réponse à ta problématique mais je trouve ça bizarre un pipeline multi branch, pourquoi tu need ça ?
Normalement t'as un pipeline de dev/Q&A etc avec chacun sa branche/release spé.
Chaque branche trig un build & test pour vérifier que le produit n'est pas brisé. Je ne vais pas créer un pipeline pour chaque branche donc un multibranch sert à ça, il est aussi trigé par les merges requests donc dès que quelqu'un demande un merge vers la prod on peut voir direct si quelque chose est brisé ou non.

L'autre avantage c'est qu'un multibranch peut avoir un fichier de configuration différent par branche ça rend les choses flexibles.

Par contre certains éléments me posent des soucis à configurer ... par exemple je n'ai pas envie qu'il y ai un déclenchement à chaque push, c'est lourd. Je voudrais que le pipeline attende patiemment 10pm, regarde toutes les branches qui ont eu un push, et fasse sa job entre 10pm et 6am. Ça me semblait évident que ce genre de comportement devait être prévu mais en fait non.
Et le fait que mon pipeline soit un agrégat de jobs indépendants les uns des autres n'aide pas pour la concurrence, même si c'est très très pratique pour les développeurs pour les épauler durant leurs développements.

En fait on peut voir mon multibranch de la façon suivante:

stage 1
- lock node
- build freestyle job
stage 2
- lock node
- build freestyle job
stage 3
- lock node
- build freestyle job

J'ai vérifé que le disableConcurrentBuilds() fonctionnait, mais pour une raison que j'ignore Jenkins a l'air de le considérer terminé très rapidement car il ne lock pas de node. Du coup je me retrouve vite dans la situation suivante:

- Pipeline branch 1 - stage 1
- Pipeline branch 2 - stage 1 pending

Ça ne bloque pas l'agent mais ça se mélange.

J'ai essayé avec deux exécuteur sur l'agent et en faisant bloquer le node par le pipeline mais c'est pire:

lock node
+ stage 1
- lock node
- build freestyle job
+ stage 2
- lock node
- build freestyle job
+ stage 3
- lock node
- build freestyle job

Dans ce cas de figure, il va se passer la chose suivante:

- Pipeline branch 1 lock
- Pipeline branch 1 stage 1
- Pipeline branch 2 pending

Quand le stage 1 du premier pipeline termine:

- Pipeline branch 2 lock

Et là on se retrouve dans un cas de deadlock.

J'ai essayé throttle concurent builds aussi mais sans succès également.

J'ai crée un sujet sur SO mais j'ai pas trop de succès à date:

https://stackoverflow.com/questions/...ranch-pipeline

Dans le fond je voudrais juste que mon Jenkins attende que tous les stages de mon pipeline soit terminés en série mais visiblement c'est compliquer à demander.

Dernière modification par Zangdar MortPartout ; 15/04/2018 à 03h13.
Message supprimé par son auteur.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés