Sie müssen jede Stunde einen Job in Jenkins einplanen

16

Ich bin neu in Jenkins. Ich habe einen Job, den ich alle 1 Stunde einplanen muss.

ich benutze

* */1 * * * 

aber es funktioniert nicht effektiv.

Bitte geben Sie eine andere Lösung an.

Ajay
quelle
3
Sie sollten erklären, was "aber es funktioniert nicht effektiv." meint. Und fügen Sie in Ihrer Distribution & Cronttab-Einträge
Sathyajith Bhat
Verwenden Sie @hourlyoder0 * * * *
Renju Chandran Chingath
Vielen Dank. Bitte erwähne die Syntax, wenn ich alle 3 Stunden planen möchte.
Ajay
Benutzen: H / 60 * * * *
Eyal Sooliman

Antworten:

31

Jenkins verwendet den hier erläuterten Cron-Ausdruck

Um jede Stunde einzuplanen, können Sie dann setzen

0 * * * *

Dann wird Ihr Auftrag stündlich ausgeführt (07:00, 08:00, 09:00 usw.)

AKTUALISIEREN

Als Erklärung für Ihre ursprüngliche Konfiguration die Syntax

* */1 * * *

Job wird alle Minuten ausgeführt.

UPDATE 2

Wie im Kommentar angefordert, wird hier die Syntax für den Zeitplan alle 3 Stunden angegeben

0 */3 * * *

Die Syntax */nbedeutet , dass die Arbeitsplätze werden alle geplanten nStunden

masegaloeh
quelle
Vielen Dank für die Antwort. Es funktioniert gut. Aber meine Arbeit dauert mehr als eine Stunde. Zum Beispiel, wenn ich diesen Job für alle 3 Stunden einplanen möchte, was wäre die syntax.please-Freigabe.
Ajay
Überprüfen Sie meine aktualisierte Antwort :)
Masegaloeh
@ Ajay Wenn diese Antwort für Ihr Problem
geeignet ist
14

Jenkins schlägt diesen Weg vor:

H * * * *
Ruby232
quelle
2
Gleiche Antwort wie bei anderen Antworten auf eine Frage, die älter als 1 Jahr ist.
JakeGould
Dies dupliziert eine andere Antwort und fügt keinen neuen Inhalt hinzu. Bitte posten Sie keine Antwort, es sei denn, Sie haben tatsächlich etwas Neues beizutragen.
DavidPostill
4
Der Vorteil dieses Ansatzes ist, dass Jenkins die Aufgaben in einer Warteschlange verwalten. Vielleicht hatte schon jemand anderes die Antwort, aber sie ist immer noch nützlich. Warum so hart sein, wenn es nützlich ist? die antwort mit 20 likes ist NICHT so gut .... bah
juan Isaza
Ich muss mit @juanIsaza gehen. Dies ist kein Duplikat, sondern eine bessere Antwort. Jenkins schlägt eindeutig vor, die Verwendung von Hanstelle von fest
codierten
9

Ich weiß, dass dies ein alter Thread ist, aber ich antworte, weil anscheinend immer noch Leute hier landen.

Die Top-Antwort sollte nicht mehr verwendet werden.

Jenkins führte einen Wert ein H.

Dieses Feld folgt der Syntax von cron (mit geringfügigen Unterschieden). Insbesondere besteht jede Zeile aus 5 Feldern, die durch TAB oder Leerzeichen getrennt sind:

MINUTE HOUR DOM MONTH DOW

  • MINUTE Minuten innerhalb einer Stunde (0–59)
  • STUNDE Die Stunde des Tages (0–23)
  • DOM Der Tag des Monats (1–31)
  • MONAT Der Monat (1–12)
  • DOW Der Wochentag (0–7), an dem 0 und 7 Sonntag sind.

Um mehrere Werte für ein Feld anzugeben, stehen die folgenden Operatoren zur Verfügung. In der Rangfolge

  • * gibt alle gültigen Werte an
  • M-N Gibt einen Wertebereich an
  • M-N/Xoder */Xschrittweise in X-Intervallen durch den angegebenen Bereich oder den gesamten gültigen Bereich
  • A,B,...,Z listet mehrere Werte auf

Damit in regelmäßigen Abständen geplante Aufgaben eine gleichmäßige Auslastung des Systems bewirken, sollte nach Möglichkeit das Symbol H (für „Hash“) verwendet werden. Wenn Sie beispielsweise 0 0 * * * für ein Dutzend tägliche Jobs verwenden, wird um Mitternacht eine große Spitze ausgelöst. Im Gegensatz dazu würde die Verwendung von HH * * * immer noch jeden Job einmal am Tag ausführen, jedoch nicht alle gleichzeitig. Dies wäre besser, wenn nur begrenzte Ressourcen verwendet würden.

Das H-Symbol kann für einen Bereich verwendet werden. Zum Beispiel bedeutet HH (0-7) * * * eine Zeit zwischen 00:00 Uhr (Mitternacht) und 07:59 Uhr. Sie können auch Schrittintervalle mit H, mit oder ohne Bereiche verwenden.

Das H-Symbol kann als zufälliger Wert über einen Bereich betrachtet werden, es ist jedoch tatsächlich ein Hash des Auftragsnamens und keine zufällige Funktion, sodass der Wert für ein bestimmtes Projekt stabil bleibt.

Beachten Sie, dass für das Feld Tag des Monats kurze Zyklen wie * / 3 oder H / 3 gegen Ende der meisten Monate aufgrund variabler Monatslängen nicht konsistent funktionieren. Beispiel: * / 3 wird am 1., 4., ... 31. eines langen Monats ausgeführt, dann wieder am nächsten Tag des nächsten Monats. Hashes werden immer im Bereich von 1 bis 28 ausgewählt, sodass H / 3 am Ende eines Monats eine Lücke zwischen Läufen von 3 und 6 Tagen erzeugt. (Längere Zyklen weisen ebenfalls inkonsistente Längen auf, der Effekt ist jedoch möglicherweise weniger spürbar.)

Die richtige Antwort für das Bauen im Stundentakt lautet also

H * * * *

für alle 3 Stunden

H H/3 * * *

Der Unterschied zwischen *und Hkönnte auch als erklärt werden

  • *übersetzt EVERY
  • Hübersetzt zu JEDEM

Also zB

* * * * *

übersetzt in: Bauen Sie jede Minute, jede Stunde, jeden Tag im Monat, jeden Monat, egal an welchem ​​Wochentag.

H * * * *

übersetzt in: Build einmal pro Stunde (x), unabhängig von der genauen Minute (kann jede Minute zwischen x: 00 und x: 59 sein)

H H * * *

übersetzt in: Jeden Tag einmal bauen , egal wie spät es ist (kann jede Minute und jede Stunde zwischen 00:00 und 23:59 sein)


Der Grund, warum Sie Hanstelle von fest codierten Zeitwerten lieber verwenden sollten , wird ebenfalls wie zuvor erläutert

Wenn Sie 100 Jobs mit konfiguriert haben

0 0 * * *

Sie alle werden versuchen, zur gleichen Zeit zu starten, was beispielsweise um Mitternacht eine Menge Umfragen und Zugriffe verursacht.

Wenn Sie sie stattdessen alle mit konfiguriert haben

H H * * *

Sie werden alle einmal am Tag gebaut, aber nicht alle zur gleichen Zeit, sondern über den Tag verteilt.


Zeitbereich planen

Sie können den Stundenplan besser planen, indem Sie die Zeitbereiche verwenden, z

H H(18-23) * * *

Alle Jobs werden täglich zwischen 18:00 und 23:59 Uhr gebaut.


Planen Sie Zeitspanne, die Mitternacht kreuzt

Es ist sogar möglich, Aufträge über Mitternacht zu planen, um beispielsweise zwischen 19:00 und 5:00 Uhr zu bauen.

Aber da cron dies normalerweise nicht zulässt, können Sie einen Trick mit einer Shiftet-Zeitzone anwenden.

Ich lebe beispielsweise in der Zeitzone MEZ (GMT + 1) und möchte alle Jobs zwischen 19:00 und 5:00 Uhr aufbauen. Dazu verschiebe ich meine komplette Zeitzone mit um 5 Stunden

TZ=Etc/GMT+6

Dann benutze ich einen Schichtbereich für die Stunden ab 14:00 (-> +5 = 19:00 Uhr) bis 23:59 (-> +5 = 4:59 Uhr)

H H(14-23) * * *
derHugo
quelle
-1
* */1 * * *

ist richtig, es läuft jede Stunde

Versuchen Sie, die H-Funktion zu verwenden, damit nicht alle Aufträge gleichzeitig an svn gesendet werden

H H/1 * * *

Es sollte zaubern. Wenn der Abschluss des Auftrags länger dauert oder Sie eine Build-Trigger-Funktion ausführen. Erhöhen Sie entweder die Zeit oder verwenden Sie jenkins pluggin, um den Build zu stoppen, bis der vorherige Build abgeschlossen ist.

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

jin T
quelle
Der erste fährt jede Minute zwischen 1 und 2 Uhr morgens, oder?
Eric Wang
@EricWang: Nein. Es ist dasselbe wie * * * * *=> jede Minute laufen. Um zwischen einem bestimmten Bereich zu laufen, benutze man es wie * 1-2 * * *<- das läuft jede Minute zwischen 1:00 Uhr und 1:59 Uhr
derHugo
@derHugo Du meinst * * 1-2 * *?
Eric Wang
1
@EricWang Nein, ich meine * 1-2 * * *. Die erste Position ist für Minute of our, die zweite für hour of day, die dritte day of month, vierte month of yearund fünfte day of week(in besonderen Fällen erlaubt sie auch eine sechste year). So * * 1-2 * *übersetzt Ihre Zeile "Jede Minute, jede Stunde, der erste und zweite Tag eines jeden Monats und jeden Wochentag.
derHugo
1
Der Unterschied, den der Autor dieser Antwort übersehen hat, ist, dass *übersetzt wird, everywährend Hübersetzt wird any. Also während * * * * *bedeutet jede Minute, H * * * *bedeutet einmal pro Stunde bauen, aber es ist mir egal, die genaue Minute (kann irgendwo zwischen 0-59 liegen, wenn nicht durch einen Bereich definiert) und H H * * *bedeutet einmal pro Tag bauen, aber es ist mir egal, zu welcher Zeit.
derHugo
-5

Die Syntax lautet:


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.

Wenn Sie alle 3 Stunden planen möchten, sollte die Syntax folgendermaßen aussehen:

* 3 * * * *
Narasimha Rao
quelle
4
Dies wird für 3 Uhr morgens jeden Tag und nicht alle 3 Stunden geplant
lony