web-dev-qa-db-fra.com

Comment empêcher l'exécution simultanée de deux projets / builds Jenkins?

J'ai deux projets Jenkins qui partagent une base de données. Ils ne doivent pas être exécutés simultanément. A strictement parler, il n'y a pas de dépendance particulière entre eux au-delà de la non simultanéité, mais pour l'instant je gère partiellement cette contrainte en exécutant l'un "en aval" de l'autre. Cela fonctionne la plupart du temps, mais pas toujours. Si un changement de contrôle de source se produit pendant que le second est en cours d'exécution, le premier redémarrera et ils s'exécuteront simultanément et probablement les deux échoueront lamentablement.

Ceci est similaire, mais pas identique, à Comment empêcher certains travaux Jenkins de s'exécuter simultanément? La différence est que je n'ai pas de problème de "nombre de threads" - je suis déjà en cours d'exécution au plus un thread d'un projet donné à un moment donné, même dans le cas où deux builds (différents projets) se piétinent. Cela semble exclure toutes les suggestions de ce fil.

31
jackr

Le plugin Locks and Latches devrait résoudre votre problème. Créez un verrou et demandez aux deux travaux d'utiliser le même verrou. Cela empêchera les travaux de s'exécuter simultanément.

  1. Installez le plugin dans "Gérer Jenkins: Gérer les plugins".
  2. Définissez (donnez un nom à) vos verrous dans "Gérer Jenkins: Configurer le système".
  3. Pour chaque emploi pour lequel vous souhaitez participer à l'exclusion,
    1. dans ": Configurer: Build Environment", cochez "Locks",
    2. et choisissez votre nom de verrou dans la liste déroulante.
23
Jason Swager

Plugin de ressources verrouillables . Simple et fonctionne bien pour moi mai 2016.

Installez le plugin. Dans Gérer Jenkins> Configurer le système, accédez au Gestionnaire de ressources verrouillables.
Sélectionnez Ajouter une ressource verrouillable. Entrez des valeurs pour le champ: nom et appuyez sur Enregistrer. Avertissement: n'entrez pas d'espaces dans le champ Nom.

Dans Jenkins> nom_travail > Configurer> Général, cochez la case: Cette version nécessite des ressources verrouillables. Entrez un ou plusieurs noms dans la valeur du champ: Ressources.

Commencez une construction. Sous le numéro de build # , sélectionnez Ressources verrouillées. Vous devriez voir quelque chose comme: Cette version a verrouillé les ressources suivantes: nom_ressource - description_ressource .

Démarrez une version différente qui utilise la même ressource. Vous verrez Build Queue in Jenkins status/menu montrant le nom du travail. Le texte en survol montre Démarré par , En attente de ressources liste_ressources , En attente de heure .

(des étiquettes/étiquettes de ressources peuvent également être utilisées)

Ajout d'une capture d'écran de la page de configuration des travaux car il semble y avoir un problème pour certains utilisateurs où "Cette version nécessite des ressources verrouillables" n'est pas visible: ** lorsque la case n'est pas cochée, vous ne devriez voir que "[_] Cette version nécessite des ressources verrouillables" enter image description here

7
gaoithe

EDIT: Les informations ci-dessous sont en vigueur au 04/10/2014

Plugin d'exclusion, https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin Très utile si peu de build utilisent la même ressource - par ex. une base de données de test. Tout ce que vous devez faire est de mettre à jour la configuration de tous les travaux utilisant cette ressource et, par conséquent, ils ne s'exécuteront jamais en parallèle, mais attendront que les autres se terminent.

Tiré de: http://www.kaczanowscy.pl/tomek/2012-07/jenkins-plugins-part-iii-towards-continuous-delivery

Ce plugin empêche deux ou plusieurs travaux de s'exécuter en parallèle.
Pour tester, faites ceci pour job1

  1. Configurer
  2. Sous Build Environment, cochez "Add resource to manage exclusion".
  3. Ajouter ensuite -> Nouvelle ressource -> Nom -> verrouiller
  4. Sous Build -> Add build step
  5. Démarrage de bloc critique
  6. Ajouter une étape de construction -> Ajoutez ce que vous voulez ajouter (ajoutez sleep 15 pour vous assurer que cela dure plus longtemps pour vérifier la simultanéité).
  7. Ajouter une étape de construction -> Fin de bloc critique
  8. Répétez les étapes ci-dessus pour job2, assurez-vous d'utiliser le même nom de verrou "lock".
  9. créer manuellement les deux travaux simultanément.
  10. Surveillez la progression de l'exécution sous jenkins -> Administration d'exclusion.
4
2.8a8a_G