Comment planifier des emplois à Jenkins?

285

J'ai ajouté un nouveau travail à Jenkins, que je veux planifier périodiquement.

Dans Configure job , je vérifie la case "Build Periodically" et dans le champ de texte Schedule , j'ai ajouté l'expression:

15 13 * * *

Mais il ne s'exécute pas à l'heure prévue.

Est-ce la bonne procédure pour planifier un travail?

Entrez la description de l'image ici

Le travail doit s'exécuter à 04h20, mais il n'est pas en cours d'exécution.

Sangram Anand
la source
Il fonctionne ou ne fonctionne PAS? Votre cron dit "Tous les jours à 13h15" si je me souviens bien. Et oui: je considère que c'est la bonne façon de planifier des builds périodiques.
Fildor du
1
Peut-être que cela vous aidera: en.wikipedia.org/wiki/Cron#CRON_expression - Je vois que Cedric l'a déjà lié ... Peut-être que vous devriez nous dire quelle est la période prévue?
Fildor
1
Pour référence, le point d'interrogation bleu sur le RHS révèle une bonne explication des valeurs possibles
devstopfix
Voici une bonne page Web pour générer automatiquement -> crontab-generator.org
Fabián Carrasco

Réponses:

508

En définissant la période de planification pour 15 13 * * *vous, dites à Jenkins de planifier la construction tous les jours de chaque mois de chaque année à la 15e minute de la 13e heure de la journée.

Jenkins a utilisé une expression cron , et les différents champs sont:

  1. MINUTES Minutes en une heure (0-59)
  2. HEURES Heures en une journée (0-23)
  3. DAYMONTH Jour dans un mois (1-31)
  4. MOIS Mois dans une année (1-12)
  5. DAYWEEK Jour de la semaine (0-7) où 0 et 7 sont le dimanche

Si vous souhaitez planifier votre build toutes les 5 minutes, cela fera l'affaire: */5 * * * *

Si vous souhaitez planifier votre build tous les jours à 8h00, cela fera l'affaire: 0 8 * * *

Pour les dernières versions (2014), Jenkins a un nouveau paramètre, H(extrait de la documentation du code Jenkins ):

Pour permettre aux tâches planifiées périodiquement de produire une charge uniforme sur le système, le symbole H(pour «hachage») doit être utilisé dans la mesure du possible.

Par exemple, l'utilisation 0 0 * * *d'une douzaine de tâches quotidiennes entraînera une forte augmentation à minuit. En revanche, l'utilisation H H * * *exécuterait toujours chaque tâche une fois par jour, mais pas toutes en même temps, mieux en utilisant des ressources limitées.

Notez également que:

Le Hsymbole peut être considéré comme une valeur aléatoire sur une plage, mais il s'agit en fait d'un hachage du nom du travail, et non d'une fonction aléatoire, de sorte que la valeur reste stable pour un projet donné.

Plus d'exemples d'utilisation de «H»

Cédric Julien
la source
5
Alors, comment construire périodiquement toutes les 6 heures. Ça * */6 * * *va marcher?
ѕтƒ
1
@ ѕтƒ: oui, il lancera la build toutes les 6 heures
Cédric Julien
31
Répartissez la charge uniformément en utilisant 'H / 5 * * * *' plutôt que '* / 5 * * * *'
friederbluemle
1
Si vous voulez limiter la plage du H, vous pouvez utiliser H (1-3) par exemple pour choisir un nombre entre 1 et 3. L'exemple serait HH (1-3) * * * pour s'exécuter une fois entre 1h et 3h du matin
AndyClaw
16
Frustrant, il semble y avoir quelque chose dans mon cerveau qui ne peut tout simplement pas saisir ces expressions sans avoir à se référer constamment à des documents.
Skill M2
34

Jenkins vous permet de configurer plusieurs fois, séparés par des sauts de ligne.

Si vous en avez besoin pour construire tous les jours à 7 h, ainsi que tous les dimanches à 16 h, ce qui suit fonctionne bien.

H 7 * * *

H 16 * * 0
Pawan Gaitonde
la source
1
H (0-0) 6 * * 1 (pour courir à 6 h HE le lundi), H (0-0) 16 * * 0 (à 16 h HE le dimanche). En cours d'exécution ordinaire H 16 (ne fonctionnera pas à 16h00 / 16h00), vous devez utiliser H (0-0) 16 ....
AKS
2
@ArunSangal au lieu de H(0-0)vous peut simplement utiliser 0l'avantage de l'utilisation, Hcar tous les Jobs ne tenteront pas de s'exécuter en même temps exactement, mais tenteront plutôt d'obtenir "le prochain créneau horaire disponible"
derHugo
28

*/5 * * * * signifie toutes les 5 minutes

5 * * * * signifie la 5e minute de chaque heure

Nikul Padhya
la source
27

Le format est le suivant:

MINUTE (0-59), HEURE (0-23), JOUR (1-31), MOIS (1-12), JOUR DE LA SEMAINE (0-6)

La lettre H, représentant le mot Hash, peut être insérée à la place de n'importe quelle valeur. Il calculera le paramètre en fonction du code de hachage du nom de votre projet.

C'est ainsi que si vous construisez plusieurs projets sur votre machine de build en même temps, disons minuit chaque jour, ils ne démarrent pas tous leur exécution de build en même temps. Chaque projet commence son exécution à une minute différente selon son code de hachage.

Vous pouvez également spécifier la valeur entre les nombres, c'est-à-dire que H (0,30) renverra le code de hachage du projet où les hachages possibles sont 0-30.

Exemples:

  1. Début de construction tous les jours à 08h30 du matin, du lundi au vendredi: 30 08 * * 1-5

  2. En semaine, construction quotidienne deux fois par jour, à midi 12h00 et minuit 00h00, du dimanche au jeudi: 00 0,12 * * 0-4

  3. Commencez à construire tous les jours en fin d'après-midi entre 16h00 - 16h59 ou 16h00 -16h59 selon le hachage du projet: H 16 * * 1-5

  4. Commencez la construction à minuit: @midnight ou commencez à minuit, tous les samedis: 59 23 * * 6

  5. Tous les premiers de chaque mois entre 2h00 et 02h30: H (0,30) 02 01 * *

Nagarjuna Yalamanchili
la source
1
belle explication.
vivek
10

Les étapes pour planifier des travaux à Jenkins:

  1. cliquez sur "Configurer" de l'exigence du poste
  2. faites défiler jusqu'à " Build Triggers " - sous-titre
  3. Cliquez sur la case à cocher de Build périodiquement
  4. Ajoutez un calendrier dans le champ Calendrier, par exemple, @midnight

entrez la description de l'image ici

Remarque : sous le champ de planification, vous pouvez voir la dernière et la prochaine exécution date-heure.

Jenkins prend également en charge les alias prédéfinis pour planifier la génération:

@hourly, @daily , @weekly, @monthly,@midnight

@hourly -> Construire toutes les heures au début de l'heure -> 0 * * * *

@daily, @midnight -> Construisez tous les jours à minuit -> 0 0 * * *

@weekly -> Construire chaque semaine à minuit le dimanche matin -> 0 0 * * 0

@monthly -> Construire tous les mois à minuit le premier jour du mois -> 0 0 1 * *

Gavriel Cohen
la source
à minuit, c'est plutôt cool :) Jenkins semble reconnaître un certain nombre de valeurs spéciales à partir de @ y compris @daily. Pouvez-vous publier un lien vers la liste définitive?
chrisinmtown du
@chrisinmtown, liste d'alias prédéfinis ajoutée, j'espère que cela vous sera utile :)
Gavriel Cohen
7

Pour planifier un travail cron toutes les 5 minutes, vous devez définir les paramètres cron comme ceci:

*/5 * * * *
fduff
la source
Je veux exécuter le travail exactement à 08h00 HNE donc l'expression cron que j'ai construite est - 00 08 * * * est-ce bien?
Sangram Anand
Malheureusement, cela ne fonctionne pas, a joint la capture d'écran de celui-ci dans le message, au fait que je le teste avec l'heure actuelle, c'est-à-dire 04h20 quelque chose ..
Sangram Anand
que l'heure EST est le même fuseau horaire sur le serveur de génération?
fduff
oui le temps est le même, btw le * / 5 * * * * (tous les 5 mètres) fonctionne bien.
Sangram Anand,
Pour exécuter le travail exactement à 8 h HNE, vous devez procéder comme suit: H (0-0) 8 * * *
AKS
3

Essayez d'utiliser 0 8 * * *. Ça devrait marcher

user1815823
la source
2

Jenkins utilise le format Cron pour la planification. Vous pouvez vous référer à ce lien pour plus de détailshttps: //en.wikipedia.org/wiki/Cron. Encore une chose, Jenkins nous offre un aperçu très utile. Veuillez regarder la capture d'écran. entrez la description de l'image ici

J'espère que cette aide. Merci

Thuong Vo
la source
comment appliquer ces changements?
Balaji Boggaram Ramanarayan
-1

Pour tous ceux qui ne veulent pas attendre une heure pour voir si une génération particulière se déclenche:

Pour obtenir le hachage, vous pouvez télécharger le hachage ici . Utilisez le nom complet du projet tel que tapé sur la page de la branche et imprimez-le comme ceci:

System.out.println(Hash.from("sub/microservices/master"));
thoredge
la source