2012-05-15 7 views
4

Nous avons beaucoup de tâches jenkins qui traitent certaines données dépendant de la date, par exemple , agrégations par heure, par jour.Jenkins trigger paramètres de temps plug-in

Tous sont configurés pour exécuter périodiquement mais jenkins natifs ne sont pas en mesure de déclencher l'emploi périodique automaticaly avec des paramètres dynamiques, et nous devons calculer les paramètres nécessaires à l'intérieur du script à temps d'exécution, par exemple dans le script bash Code:

PREVHOUR=$(date --date="-1 hour" "+%Y-%m-%d %H") 

Nous pouvons également utiliser variable d'environnement $ BUILD_ID pour obtenir le temps de construction de démarrage.

Le problème est: Lorsque toutes les fentes (travailleurs) sont occupés, jenkins met ce travail dans la file d'attente . Et les calculs des paramètres seront erronés lorsqu'une telle tâche est exécutée l'heure suivante après le déclenchement.

Donc, nous ne pouvons pas trouver le moyen d'obtenir temps TRIGGER, pas le temps de construction à partir.

Bien sûr, il y a peu de solutions peu pratiques comme:

  • course simple emploi périodique sur une machine réservée qui déclenche d'autres emplois par url avec params
  • fichier
  • que suivre la dernière exécution de scripts

Nous avons essayé de trouver des plug-ins qui correspondent à nos besoins, et nous avons trouvé this plugin, mais cela ne fonctionne qu'en mode manuel (UI "build now" click).

Existe-t-il un plug-in permettant à Jenkins de calculer les paramètres dinamic au déclenchement automatique?

Merci!

Répondre

4

Vous pouvez utiliser le plugin ScriptTrigger. Il évalue périodiquement le script Groovy et prend en charge les générations paramétrées.

  1. Ajoutez un paramètre TRIGGER_TIME à un projet.
  2. Utiliser un script Groovy:

    now = new Date(); 
    param = new File("trigger.time"); 
    param.write("TRIGGER_TIME="+now.toString()); 
    return true; 
    

    Il rédigera temps de déclenchement à un fichier de propriétés « trigger.time » sur tous les sondages et déclencher une nouvelle construction.

  3. Définissez Properties File Path (dans les paramètres avancés) sur "trigger.time" et chaque génération planifiée recevra le paramètre TRIGGER_TIME avec l'heure indiquée.
+1

Merci beaucoup! Ça a l'air génial, mais je m'inquiète au sujet des versions simultanées: si je comprends bien, quand quelques emplacements libres apparaissent, les nouvelles constructions vont lire un fichier de propriétés, n'est-ce pas? Je veux dire, ils vont probablement faire des calculs pour le dernier temps de déclenchement de ce genre de construction. Mais je vois le moyen de l'empêcher: ajouter la valeur du temps au fichier à chaque déclenchement et lire et supprimer la première valeur par le script. Peut-être, nous devrions faire attention à la fermeture de l'écriture du fichier/attente de la libération du verrou dans le script. –

+0

Si vous aimez une réponse, veuillez la montrer en cliquant sur la flèche haut au-dessus des points. – inger

+0

Comment 'TRIGGER_TIME' peut-il être utilisé pour interroger SCM? La réponse semble avoir dit comment créer 'TRIGGER_TIME'. – Heinz

2

Deux suggestions:

  1. emploi Trigger, mon humble avis, est une solution tout à fait raisonnable. Vous pouvez utiliser une méthode beaucoup plus pratique de déclencher les travaux si - Parameterized Trigger Plugin. Une autre approche consiste à utiliser le EnvInject Plugin. Par exemple, vous pouvez calculer vos paramètres dans un script, les enregistrer dans un fichier de propriétés, puis injecter les variables d'environnement à partir du fichier avec le plugin. See this answer.

+1

Merci pour votre réponse! Je pense que la deuxième suggestion est plus pratique avec quelques notes que j'ai commentées dans une autre réponse (mais assez similaire). –

+0

Ouais, bosse celui-ci aussi :) – inger

Questions connexes