È necessario pianificare un lavoro ogni ora in jenkins


16

Sono nuovo di Jenkins. Ho un lavoro che devo programmare ogni 1 ora.

sto usando

* */1 * * * 

ma non funziona in modo efficace.

Fornisci qualsiasi altra soluzione.


3
dovresti spiegare cosa "ma non funziona in modo efficace". si intende. E aggiungi le voci distro e cronttab
Sathyajith Bhat

usare @hourlyo0 * * * *
Renju Chandran chingath

Grazie. Per favore, menziona la sintassi, se voglio programmare ogni 3 ore.
Ajay,

Usa: H / 60 * * * *
Eyal Sooliman

Risposte:


31

Jenkins usa l'espressione cron come spiegato qui

Per programmare ogni ora, quindi puoi mettere

0 * * * *

Quindi il tuo lavoro verrà eseguito ogni ora (07:00, 08:00, 09:00 e così via)

AGGIORNARE

Come spiegazione sulla configurazione originale, sintassi

* */1 * * *

eseguirà il lavoro ogni minuto.

AGGIORNAMENTO 2

Come richiesto nel commento, qui sintassi per programmarlo ogni 3 ore

0 */3 * * *

La sintassi */nindica che i lavori verranno programmati ogni nora


Grazie per la risposta. Funziona bene. Ma il mio lavoro sta impiegando più di un'ora per essere eseguito. Ad esempio, se voglio pianificare questo lavoro per ogni 3 ore quale sarebbe la condivisione syntax.please.
Ajay,

Controlla la mia risposta aggiornata :)
masegaloeh

@Ajay Se questa risposta funziona per il tuo problema, considera di accettare questa risposta :)
masegaloeh,

14

Jenkins suggerisce in questo modo:

H * * * *

2
Stessa risposta di altre risposte a una domanda di almeno 1 anno.
Jake Gould,

Questo duplica un'altra risposta e non aggiunge nuovi contenuti. Per favore non pubblicare una risposta a meno che tu non abbia effettivamente qualcosa di nuovo da contribuire.
DavidPostill

4
Il vantaggio di questo approccio è che jenkins gestirà le attività in una coda. Forse qualcun altro ha già avuto la risposta ma è ancora utile. Perché essere così duro se è utile? la risposta con 20 Mi piace NON è così buona .... bah
juan Isaza,

Devo andare con @juanIsaza. Questo non è un duplicato ma in realtà una risposta migliore. Jenkins suggerisce chiaramente di preferire l'uso di Hvalori non codificati
derHugo,

9

So che questo è un vecchio thread, ma sto rispondendo perché apparentemente la gente atterra ancora qui.

La risposta migliore non dovrebbe più essere utilizzata.

Jenkins ha introdotto un valore H.

Questo campo segue la sintassi di cron (con differenze minori). In particolare, ogni riga è composta da 5 campi separati da TAB o spazi bianchi:

DUE ORE DOM MESE DOW

  • MINUTI Minuti entro l'ora (0–59)
  • HOUR L'ora del giorno (0–23)
  • DOM Il giorno del mese (1–31)
  • MESE Il mese (1–12)
  • DOW Il giorno della settimana (0–7) in cui 0 e 7 sono domenica.

Per specificare più valori per un campo, sono disponibili i seguenti operatori. Nell'ordine di precedenza,

  • * specifica tutti i valori validi
  • M-N specifica un intervallo di valori
  • M-N/Xo */Xpassi da intervalli di X attraverso l'intervallo specificato o l'intero intervallo valido
  • A,B,...,Z enumera più valori

Per consentire alle attività programmate periodicamente di produrre un carico uniforme sul sistema, il simbolo H (per "hash") dovrebbe essere usato ove possibile. Ad esempio, l'utilizzo di 0 0 * * * per una dozzina di lavori giornalieri provocherà un forte picco a mezzanotte. Al contrario, l'utilizzo di HH * * * eseguirà comunque ogni lavoro una volta al giorno, ma non tutti contemporaneamente, utilizzando meglio risorse limitate.

Il simbolo H può essere utilizzato con un intervallo. Ad esempio, HH (0-7) * * * indica un periodo di tempo compreso tra le 12:00 (mezzanotte) e le 7:59. Puoi anche usare gli intervalli di passi con H, con o senza intervalli.

Il simbolo H può essere considerato come un valore casuale su un intervallo, ma in realtà è un hash del nome del lavoro, non una funzione casuale, in modo che il valore rimanga stabile per un determinato progetto.

Attenzione, per il campo del giorno del mese, i cicli brevi come * / 3 o H / 3 non funzioneranno in modo coerente verso la fine della maggior parte dei mesi, a causa della lunghezza variabile dei mesi. Ad esempio, * / 3 verrà eseguito il 1 °, 4 °, ... 31 ° giorno di un lungo mese, quindi di nuovo il giorno successivo del mese successivo. Gli hash vengono sempre scelti nell'intervallo 1-28, quindi H / 3 produrrà un intervallo tra le corse tra 3 e 6 giorni alla fine di un mese. (Cicli più lunghi avranno anche lunghezze incoerenti, ma l'effetto potrebbe essere relativamente meno evidente.)

Quindi la risposta corretta per costruire una volta ogni ora è

H * * * *

per ogni 3 ore

H H/3 * * *

La differenza tra *e Hpotrebbe anche essere spiegata come

  • *si traduce in OGNI
  • Hsi traduce in QUALSIASI

Quindi ad es

* * * * *

si traduce in: Costruisci ogni minuto, ogni ora, ogni giorno del mese, ogni mese, non importa che giorno della settimana sia.

H * * * *

si traduce in: Build una volta ogni ora (x), non importa quale minuto esatto sia (può essere qualsiasi minuto tra x: 00 e x: 59)

H H * * *

si traduce in: Build una volta al giorno, non importa che ore sono (può essere qualsiasi minuto e ogni ora tra le 00:00 e le 23:59)


Il motivo per cui dovresti preferire l'utilizzo Hinvece di valori temporali hardcoded è anche spiegato come prima

Se hai 100 lavori configurati con

0 0 * * *

cercheranno tutti di iniziare contemporaneamente causando ad esempio un sacco di sondaggi e attirando il traffico a mezzanotte.

Se li hai invece tutti configurati con

H H * * *

saranno tutti costruiti una volta al giorno ma non tutti contemporaneamente, ma distribuiti nel corso della giornata.


Pianificare l'intervallo di tempo

Puoi piuttosto pianificare la schdedule meglio usando gli intervalli di tempo, ad es

H H(18-23) * * *

Tutti i lavori verranno creati ogni giorno in qualsiasi momento tra le 18:00 e le 23:59.


Pianifica l'intervallo di tempo che attraversa la mezzanotte

È anche possibile programmare lavori che attraversano la mezzanotte, ad es. Per costruire tra le 19:00 e le 5:00.

Ma poiché cron di solito non lo consente, puoi usare un trucco usando un fuso orario a turni.

Ad esempio, sto vivendo nel fuso orario MEZ, che è GMT + 1 e voglio costruire tutti i lavori tra le 19:00 e le 5:00. Per fare ciò sposto il mio fuso orario completo di 5 ore usando

TZ=Etc/GMT+6

Quindi uso un intervallo di cambio per le ore che iniziano alle 14:00 (-> +5 = 19:00 pm) e terminano alle 23:59 (-> +5 = 4:59)

H H(14-23) * * *

-1
* */1 * * *

è corretto funziona ogni ora

Provare a utilizzare la funzione H in modo che tutti i lavori non eseguano il polling contemporaneamente a svn

H H/1 * * *

Dovrebbe fare magia. Se il completamento del processo richiede più tempo o si sta eseguendo la funzionalità di attivazione build. Aumenta il tempo o usa jenkins pluggin per interrompere la compilazione fino al completamento della build precedente.

https://wiki.jenkins-ci.org/display/JENKINS/Build+Blocker+Plugin


Il primo parte ogni minuto tra l'1: 00 e le 2:00, giusto?
Eric Wang,

@EricWang: No. È uguale a * * * * *=> in esecuzione ogni minuto. Per correre tra un certo intervallo lo usi come * 1-2 * * *<- questo passa ogni minuto tra l'1: 00 e l'
01

@derHugo Intendi * * 1-2 * *?
Eric Wang,

1
@EricWang No, intendo * 1-2 * * *. La prima posizione è per Minute of our, la seconda per hour of day, la terza day of month, la quarta month of yeare la quinta day of week(in casi speciali consente anche una sesta year). Quindi la tua linea * * 1-2 * *traduce "Ogni minuto, ogni ora, il primo e il secondo giorno di ogni mese e ogni giorno della settimana.
derHugo,

1
La differenza a cui l'autore di questa risposta è sfuggita è che si *traduce everymentre Htraduce any. Quindi mentre * * * * *significa ogni minuto, H * * * *significa costruire una volta ogni ora ma non mi interessa il minuto esatto (può essere ovunque tra 0-59 se non definito da un intervallo) e H H * * *significa costruire una volta al giorno ma non mi interessa a che ora.
derHugo,

-5

La sintassi è:


MINUTE  Minutes within the hour (0-59)
HOUR    The hour of the day (0-23)
DOM     The day of the month (1-31)
MONTH   The month (1-12)
DOW     The day of the week (0-7) where 0 and 7 are Sunday.

Se si desidera pianificare per ogni 3 ore, la sintassi dovrebbe apparire:

* 3 * * * *

4
Questo programmerà per le 3 del mattino ogni giorno, e non ogni 3 ore
lony
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.