Come posso programmare i lavori in Jenkins?


285

Ho aggiunto un nuovo lavoro in Jenkins, che desidero programmare periodicamente.

Da Configura lavoro , sto spuntando la casella "Crea periodicamente" e nel campo di testo Pianifica ho aggiunto l'espressione:

15 13 * * *

Ma non viene eseguito all'ora pianificata.

È la procedura corretta per pianificare un lavoro?

Inserisci qui la descrizione dell'immagine

Il lavoro dovrebbe essere eseguito alle 04:20, ma non è in esecuzione.


Funziona o NON funziona? Il tuo cron dice "Ogni giorno alle 13:15" se ricordo bene. E sì: lo considero il modo corretto di pianificare build periodiche.
Fildor,

1
Forse questo ti aiuterà: en.wikipedia.org/wiki/Cron#CRON_expression - Vedo che Cedric l'ha già collegato ... Forse dovresti dirci, qual è il periodo previsto?
Fildor,

1
Per riferimento, il punto interrogativo blu sull'RHS rivela una buona spiegazione dei possibili valori
devstopfix,

Ecco una buona pagina web per autogenerare -> crontab-generator.org
Fabián Carrasco

Risposte:


507

Impostando il periodo di programmazione su di 15 13 * * *te, dici a Jenkins di pianificare la costruzione ogni giorno di ogni mese di ogni anno al 15 ° minuto della 13a ora del giorno.

Jenkins ha usato un'espressione cron e i diversi campi sono:

  1. MINUTI Minuti in un'ora (0-59)
  2. ORE Ore in un giorno (0-23)
  3. DAYMONTH Giorno in un mese (1-31)
  4. MESE Mese in un anno (1-12)
  5. DAYWEEK Giorno della settimana (0-7) in cui 0 e 7 sono domenica

Se vuoi pianificare la tua build ogni 5 minuti, questo farà il lavoro: */5 * * * *

Se vuoi pianificare la tua build ogni giorno alle 8h00, questo farà il lavoro: 0 8 * * *

Per le versioni precedenti (2014), Jenkins ha un nuovo parametro, H(estratto dalla documentazione del codice Jenkins ):

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 0 0 * * *per una dozzina di lavori giornalieri causerà un forte picco a mezzanotte. Al contrario, l'utilizzo H H * * *eseguirà comunque ogni lavoro una volta al giorno, ma non tutti allo stesso tempo, meglio utilizzando risorse limitate.

Si noti inoltre che:

Il Hsimbolo 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.

Altro esempio di utilizzo di "H"


5
Quindi, come costruire periodicamente ogni 6 ore. Funzionerà * */6 * * *?
ѕтƒ

1
@ ѕтƒ: sì, lancerà la build ogni 6 ore
Cédric Julien,

31
Distribuire uniformemente il carico utilizzando 'H / 5 * * * *' anziché '* / 5 * * * *'
friederbluemle

1
Se si desidera limitare l'intervallo di H, è possibile utilizzare H (1-3), ad esempio per scegliere un numero compreso tra 1 e 3. L'esempio sarebbe HH (1-3) * * * da eseguire una volta tra 1am e 3am
AndyClaw

16
Frustrantemente, sembra esserci qualcosa nel mio cervello che semplicemente non può cogliere queste espressioni senza dover costantemente fare riferimento ai documenti.
Abilità M2

34

Jenkins ti consente di impostare più volte, separati da interruzioni di riga.

Se ne hai bisogno per costruire ogni giorno alle 7 del mattino, insieme a ogni domenica alle 16:00, il seguito funziona bene.

H 7 * * *

H 16 * * 0

1
H (0-0) 6 * * 1 (per correre alle 6:00 ET di lunedì), H (0-0) 16 * * 0 (Alle 16:00 ET di domenica). Eseguendo H 16 (non funzionerà alle 1600 / 16:00), devi usare H (0-0) 16 ....
AKS

2
@ArunSangal invece di H(0-0)te può semplicemente usare 0il vantaggio dell'uso Hè che non tutti i lavori tenteranno di funzionare nello stesso momento esattamente, ma piuttosto tenteranno di ottenere "la prossima fascia oraria disponibile"
derHugo

28

*/5 * * * * significa ogni 5 minuti

5 * * * * indica il 5 ° minuto di ogni ora


26

Il formato è il seguente:

MINUTO (0-59), ORA (0-23), GIORNO (1-31), MESE (1-12), GIORNO DELLA SETTIMANA (0-6)

La lettera H, che rappresenta la parola hash, può essere inserita al posto di qualsiasi valore. Calcolerà il parametro in base al codice hash del nome del progetto.

Questo è così che se stai costruendo più progetti sulla tua macchina di costruzione contemporaneamente, diciamo mezzanotte ogni giorno, non tutti iniziano la loro esecuzione di costruzione allo stesso tempo. Ogni progetto inizia la sua esecuzione in un minuto diverso a seconda del suo codice hash.

Puoi anche specificare il valore tra i numeri, ovvero H (0,30) restituirà il codice hash del progetto dove i possibili hash sono 0-30.

Esempi:

  1. Inizia a costruire ogni giorno alle 08:30 del mattino, dal lunedì al venerdì: 30 08 * * 1-5

  2. Build giornaliero giornaliero due volte al giorno, a pranzo 12:00 e mezzanotte 00:00, da domenica a giovedì: 00 0,12 * * 0-4

  3. Inizia a costruire ogni giorno nel tardo pomeriggio dalle 16:00 alle 16:59 o dalle 16:00 alle 16:00: 59 a seconda dell'hash del progetto: H 16 * * 1-5

  4. Inizia a costruire a mezzanotte: @midnight o inizia a costruire a mezzanotte, ogni sabato: 59 23 * * 6

  5. Ogni primo di ogni mese dalle 2:00 alle 02:30: H (0,30) 02 01 * *


1
bella spiegazione.
vivek,

10

I passaggi per pianificare i lavori in Jenkins:

  1. fare clic su "Configura" del requisito del lavoro
  2. scorrere verso il basso fino a " Build Triggers " - sottotitoli
  3. Fai clic sulla casella di controllo di Build periodicamente
  4. Aggiungi la pianificazione temporale nel campo Pianificazione, ad esempio, @midnight

inserisci qui la descrizione dell'immagine

Nota : sotto il campo del programma, è possibile visualizzare l'ultima e la successiva esecuzione della data e dell'ora.

Jenkins supporta anche alias predefiniti per pianificare la compilazione:

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

@hourly -> Costruisci ogni ora all'inizio dell'ora -> 0 * * * *

@daily, @midnight -> Costruisci ogni giorno a mezzanotte -> 0 0 * * *

@weekly -> Build ogni settimana a mezzanotte di domenica mattina -> 0 0 * * 0

@monthly -> Crea ogni mese a mezzanotte del primo giorno del mese -> 0 0 1 * *


a mezzanotte è abbastanza bello :) Jenkins sembra riconoscere alcuni valori speciali a partire da @ incluso @daily. Puoi pubblicare un link all'elenco definitivo?
chrisinmtown,

@chrisinmtown, elenco di alias predefiniti aggiunto, si spera, ti sia utile :)
Gavriel Cohen

7

Per pianificare un processo cron ogni 5 minuti, è necessario definire le impostazioni cron in questo modo:

*/5 * * * *

Voglio eseguire il lavoro esattamente @ 8:00 AM EST quindi l'espressione cron che ho costruito è - 00 08 * * * va bene?
Sangram Anand,

Sfortunatamente non funziona, allegando la schermata del post, tra cui lo sto testando con l'ora EST attuale cioè, 4:20 AM qualcosa ..
Sangram Anand

che ora EST è lo stesso fuso orario sul server di build?
fduff,

sì, il tempo è lo stesso, tra il * / 5 * * * * (ogni 5mts) funziona bene.
Sangram Anand,

Per eseguire il lavoro esattamente alle 8:00 EST, è necessario eseguire questa operazione: H (0-0) 8 * * *
AKS


2

Jenkins utilizza il formato Cron per la pianificazione. È possibile fare riferimento a questo link per maggiori dettaglihttps: //en.wikipedia.org/wiki/Cron. Un'altra cosa, Jenkins ci fornisce un'anteprima molto utile. Si prega di dare un'occhiata allo screenshot. inserisci qui la descrizione dell'immagine

Spero questo aiuto. Grazie


come applicare queste modifiche?
Balaji Boggaram Ramanarayan,


-1

Per tutti coloro che non vogliono aspettare l'ora intera per vedere se si innesca una particolare build:

Per ottenere l'hash, puoi scaricare l'hash qui . Usa il nome completo del progetto come scritto nella pagina di diramazione e stampalo in questo modo:

System.out.println(Hash.from("sub/microservices/master"));
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.