54 votes

Comment construire conditionnellement d'autres projets?

J'ai une assez compliqué Jenkins travail qui construit, des tests unitaires et des packages d'une application web. Selon la situation, je voudrais faire des choses différentes, une fois ce travail terminé. Je n'ai pas trouvé une ré-utilisable/maintenable façon de le faire. Est-ce vraiment le cas ou j'ai loupé quelque chose?

Les options je voudrais avoir une fois mon travail compliqué complète:

  1. Ne rien faire

  2. Commencer mon faible risque de changement de build pipeline:

    • copie mon fichier WAR à mon artefact référentiel
    • déploie à la production
  3. Commencer mon haut risque de changement de build pipeline:

    • copie mon fichier WAR à mon artefact référentiel
    • déploie pour tester
    • exécuter des tests d'acceptation
    • de déployer en production

Je n'ai pas trouvé un moyen facile de le faire. Le plus simple, mais pas très facile à gérer approche serait de faire trois emplois différents, chacun de qui débute un peu en aval de construire. Cette approche me fait peur pour plusieurs raisons, notamment le fait que des modifications devraient être apportées à trois endroits au lieu d'un. En outre, beaucoup de l'aval de l'emploi sont également presque identique. La seule différence réside en aval des emplois qu'ils appellent. La prolifération des emplois semble qu'il conduirait une liste non-maintenable mess.

J'ai regardé à l'aide de plusieurs approches de garder cela comme un travail, mais aucun n'a travaillé jusqu'à présent:

  1. Faire le travail d'un multi-configuration du projet (https://wiki.jenkins-ci.org/display/JENKINS/Building+une+matrix+projet). Cela fournit un moyen d'injecter de l'emploi avec un paramètre. Je n'ai pas trouvé une façon de faire de la "construction d'autres projets" étape de répondre à un paramètre.

  2. Utiliser le Paramétrable-Déclencheur plugin (https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin). Ce plugin vous permet de déclencher en aval-les travaux basés sur certains déclencheurs. Les déclencheurs apparaît trop restrictive si. Ils sont tous basés sur l'état de la construction, et non pas arbitraire de variables. Je ne vois pas d'option fournie ici qui travaillent pour mon cas d'utilisation.

  3. Utiliser le Flexible de Publier le pluginhttps://wiki.jenkins-ci.org/display/JENKINS/Flexible+Publier+Plugin). Ce plugin a le problème inverse que l'paramétrable-déclencheur plugin. Il contient de nombreuses conditions elle peut vérifier, mais il ne regarde pas comme il peut commencer à construire un autre projet. Ses actions sont limitées à la publication des activités de type.

  4. Utilisation Flexible Publier + n'Importe quelle Étape de génération plugin (https://wiki.jenkins-ci.org/display/JENKINS/Any+Construire+Step+Plugin). La Toute Étape de génération plugin permet de prendre toute action de génération disponible à la flexibilité de Publier le plugin. Alors que plus d'actions ont été mis à disposition une fois ce plugin est activé, ces actions ne comprennent pas "construire d'autres projets."

Il n'y a vraiment pas un moyen facile de faire cela? Je suis surpris que je n'ai pas trouvé et encore plus surpris que je n'ai pas vraiment vu de toute autre personne essaie de faire cela? Suis-je en train de faire quelque chose d'inhabituel? Il est évident que je suis absent?

32voto

jadephantom Points 336

Si j'ai bien compris il correct, vous devez être en mesure de le faire en suivant ces Étapes:

  1. La Première Étape De Génération:
    1. Le travail régulier. Dans votre cas: la construction, les tests unitaires et d'emballage de l'application web
    2. Selon le résultat le laisser créer un fichier avec un nom spécifique.
    3. Cela signifie que si vous voulez que le faible risque de changement d'exécuter par la suite de créer un fichier à faible risque.prop
  2. Deuxième Étape De Génération:
    1. Créer un Déclencheur d'appel s'appuie sur d'autres projets à l'Étape de la Paramétrable-Déclencheur plugin.
    2. Entery le nom de votre faible risque de travail dans les Projets de construction de terrain
    3. Cliquez sur: Ajouter un Paramètre
    4. Choisir: les Paramètres depuis un Fichier de propriétés
    5. Entrée à faible risque.prop dans l' Utilisation des propriétés à partir d'un fichier de Champ
    6. Permettre de Ne pas déclencher si des fichiers sont manquants
  3. Troisième Étape De Génération:
    1. Vérifier si un risque faible.prop fichier existe
    2. Supprimer le Fichier

Faites de même pour le risque élevé d'emploi

Maintenant, vous devriez avoir la Configuration suivante:

  • si un fichier appelé à faible risque.prop se produit au cours de la première Étape de génération à faible risque de travail sera lancé
  • si un fichier appelé à haut risque.prop se produit au cours de la première Étape de génération à haut risque de l'emploi sera lancé
  • si il n'y a pas .prop Fichier rien ne se passe

Et c'est ce que tu voulais faire. N'est-ce pas?

8voto

Dennis S. Points 961

Avez-vous regardé le plugin de construction conditionnelle? ( https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin )

Je pense qu'il peut faire ce que vous cherchez.

4voto

Slav Points 6322

Si vous voulez un conditionnel étape de post-construction, il y a un plugin pour ça:
https://wiki.jenkins-ci.org/display/JENKINS/Post+construire+tâche

Il va chercher le journal de la console pour une RegEx que vous spécifiez, et le cas échéant, sera exécution d'un script personnalisé. Vous pouvez configurer assez complexe critères, et vous pouvez configurer plusieurs ensembles de critères chaque exécution de poste différents, construire des tâches.

Il ne vous fournit pas avec l'habituel "étape de génération" des actions, de sorte que vous avez à écrire votre propre script il. Vous pouvez déclencher l'exécution d'un même travail avec des paramètres différents, ou un autre emploi avec certains paramètres, de façon classique que jenkins prend en charge (par exemple à l'aide de curl)

Encore une autre alternative est de Jenkins de la recherche de texte plugin:
https://wiki.jenkins-ci.org/display/JENKINS/Text-finder+Plugin

C'est une étape de post-construction qui permet à la force de marquer un build comme "instable" si une expression régulière est trouvé dans la console texte (ou même un fichier d'espace de travail). Donc, dans vos étapes de génération, en fonction de vos conditions, l'écho d'une unique ligne dans le journal de la console, et puis faire une RegEx pour cette ligne. Vous pouvez ensuite utiliser "Déclenchement paramétrable buids" et définir la condition comme "instable". Cela a un avantage supplémentaire de visuellement marquant le construire différents (avec une boule jaune), mais vous avez seulement 1 conditionnel option avec cette méthode, et à partir de votre OP, on dirait que vous avez besoin de 2.

Essayez une combinaison de ces 2 méthodes:

1voto

Mohamed Nuur Points 2189

Utilisez-vous Ant pour vos builds?

Si tel est le cas, il est possible d'effectuer une construction conditionnelle dans ant en disposant d'un ensemble de variables d'environnement que vos scripts de génération peuvent utiliser pour générer de manière conditionnelle. Dans Jenkins, votre construction construira alors tous les projets, mais votre construction réelle décidera si elle construit ou simplement des circuits courts.

1voto

Igor Points 1

Je pense que la meilleure façon de le faire est d’ajouter un travail intermédiaire à l’étape post-construction et de lui transmettre tous les paramètres dont vos travaux en aval pourraient éventuellement avoir besoin, puis des constructions conditionnelles pour les emplois en aval réels à cet emplacement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X