Jak zaplanować pracę w Jenkins?


284

Dodałem nową pracę w Jenkins, którą chcę okresowo planować.

Z Konfiguruj zadanie zaznaczam pole wyboru „Kompiluj okresowo” iw polu tekstowym Harmonogram dodałem wyrażenie:

15 13 * * *

Ale nie działa w zaplanowanym czasie.

Czy to właściwa procedura, aby zaplanować pracę?

Wpisz opis zdjęcia tutaj

Zadanie powinno zostać uruchomione o 04:20, ale nie jest uruchomione.


To działa, czy NIE działa? Twój cron mówi „Codziennie o 13:15”, jeśli dobrze pamiętam. I tak: uważam to za właściwy sposób planowania okresowych kompilacji.
Fildor

1
Może to ci pomoże: en.wikipedia.org/wiki/Cron#CRON_expression - Widzę, że Cedric już go powiązał ... Może powinieneś nam powiedzieć, jaki jest zamierzony okres?
Fildor

1
Dla porównania, niebieski znak zapytania na RHS pokazuje dobre wyjaśnienie możliwych wartości
devstopfix,

Oto dobra strona do automatycznego generowania -> crontab-generator.org
Fabián Carrasco

Odpowiedzi:


506

Ustawiając dla 15 13 * * *ciebie okres harmonogramu , powiedz Jenkinsowi, aby planował kompilację każdego dnia każdego miesiąca każdego roku, w 15 minucie 13 godziny dnia.

Jenkins użył wyrażenia cron , a różne pola to:

  1. MINUTY Minuty w ciągu godziny (0–59)
  2. GODZINY Godziny w ciągu jednego dnia (0–23)
  3. DZIEŃ DZIEŃ w miesiącu (1-31)
  4. MIESIĄC Miesiąc w roku (1-12)
  5. DZIEŃ TYGODNIA Dzień tygodnia (0–7), w którym 0 i 7 to niedziela

Jeśli chcesz zaplanować kompilację co 5 minut, spełni to zadanie: */5 * * * *

Jeśli chcesz zaplanować kompilację codziennie o 8.00, wykona to zadanie: 0 8 * * *

W ostatnich kilku wersjach (2014) Jenkins ma nowy parametr H(wyciąg z dokumentacji kodu Jenkins ):

Aby umożliwić okresowo zaplanowanym zadaniom równomierne obciążenie systemu, w Hmiarę możliwości należy używać symbolu („skrótu”).

Na przykład korzystanie 0 0 * * *z kilkunastu codziennych zadań spowoduje duży skok o północy. W przeciwieństwie do tego, użycie H H * * *będzie nadal wykonywać każde zadanie raz dziennie, ale nie wszystkie w tym samym czasie, lepiej używając ograniczonych zasobów.

Uwaga:

HSymbol mogą być traktowane jako losowej wartości w przedziale, ale w rzeczywistości jest to skrót od nazwy zadania, a nie przypadkowy funkcji, tak że wartość pozostaje stabilna dla danego projektu.

Więcej przykładów użycia „H”


5
Jak budować okresowo co 6 godzin. Czy * */6 * * *zadziała?
Novтƒ

1
@ ѕтƒ: tak, uruchamia kompilację co 6 godzin
Cédric Julien

31
Rozłóż obciążenie równomiernie, używając „H / 5 * * * *” zamiast „* / 5 * * * *”
friederbluemle

1
Jeśli chcesz ograniczyć zasięg H, możesz na przykład użyć H (1-3), aby wybrać liczbę od 1 do 3. Przykładem może być HH (1-3) * * *, aby uruchomić raz między 1 a 3 rano
AndyClaw,

16
Frustrujące wydaje się, że w moim mózgu jest coś, co po prostu nie może zrozumieć tych wyrażeń bez ciągłego odwoływania się do dokumentów.
Umiejętność M2

34

Jenkins pozwala na wielokrotne konfigurowanie, oddzielone podziałami linii.

Jeśli potrzebujesz, aby budować codziennie o 7 rano, w każdą niedzielę o 16:00, poniżej działa dobrze.

H 7 * * *

H 16 * * 0

1
H (0-0) 6 * * 1 (do pracy o 6 rano ET w poniedziałek), H (0-0) 16 * * 0 (o 16:00 ET w niedzielę). Przy zwykłym H 16 (nie będzie działać o 1600/16), musisz użyć H (0-0) 16 ....
AKS

2
@ArunSangal zamiast tego H(0-0)możesz po prostu skorzystać 0z zalet korzystania z Htego, że nie wszystkie zadania będą próbowały uruchomić się dokładnie w tym samym czasie, ale raczej postarają się uzyskać „następny dostępny przedział czasowy”
derHugo


26

Format jest następujący:

MINUTA (0-59), GODZINA (0-23), DZIEŃ (1-31), MIESIĄC (1-12), DZIEŃ TYGODNIA (0-6)

Zamiast dowolnej wartości można wstawić literę H reprezentującą słowo Hash . Obliczy parametr na podstawie kodu skrótu nazwy twojego projektu.

Dzieje się tak, ponieważ jeśli budujesz kilka projektów na komputerze kompilacji w tym samym czasie, powiedzmy, że o północy każdego dnia, nie wszystkie rozpoczynają wykonywanie kompilacji w tym samym czasie. Każdy projekt rozpoczyna się od innej minuty, w zależności od kodu skrótu.

Możesz także podać wartość między liczbami, tj. H (0,30) zwróci kod skrótu projektu, w którym możliwe skróty to 0-30.

Przykłady:

  1. Zacznij budować codziennie o 08:30 rano, od poniedziałku do piątku: 30 08 * * 1-5

  2. Codziennie buduj codziennie dwa razy dziennie, w porze lunchu 12:00 i północy 00:00, od niedzieli do czwartku: 00 0,12 * * 0-4

  3. Rozpocznij kompilację codziennie późnym popołudniem w godzinach 16: 00–16: 59 lub 16: 00–16: 59 w zależności od skrótu projektu: H 16 * * 1-5

  4. Rozpocznij kompilację o północy: @ midnight lub rozpocznij kompilację o północy, w każdą sobotę: 59 23 * * 6

  5. Każdy pierwszy dzień każdego miesiąca między 2:00 a 02:30: H (0,30) 02 01 * *


1
ładne wyjaśnienie.
vivek

10

Kroki dotyczące harmonogramu zadań w Jenkins:

  1. kliknij „Konfiguruj” wymagania zadania
  2. przewiń w dół do „ Build Triggers ” - podtytuł
  3. Okresowo kliknij pole wyboru Kompiluj
  4. Dodaj harmonogram w polu Harmonogram, na przykład @midnight

wprowadź opis zdjęcia tutaj

Uwaga : w polu harmonogramu można zobaczyć ostatnie i następne uruchomienie daty i godziny.

Jenkins obsługuje również predefiniowane aliasy do planowania kompilacji:

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

@hourly -> Buduj co godzinę na początku godziny -> 0 * * * *

@daily, @midnight -> Buduj codziennie o północy -> 0 0 * * *

@weekly -> Buduj co tydzień o północy w niedzielę rano -> 0 0 * * 0

@monthly -> Buduj co miesiąc o północy pierwszego dnia miesiąca -> 0 0 1 * *


o północy jest całkiem fajna :) Jenkins wydaje się rozpoznawać całkiem sporo specjalnych wartości zaczynając od @, w tym @daily. Czy możesz opublikować link do ostatecznej listy?
chrisinmtown

@chrisinmtown, dodana lista predefiniowanych aliasów, mam nadzieję, że jest dla ciebie pomocna :)
Gavriel Cohen

7

Aby zaplanować zadanie cron co 5 minut, musisz zdefiniować ustawienia cron w następujący sposób:

*/5 * * * *

Chcę uruchomić zadanie dokładnie o 8:00 EST, więc skonstruowane przeze mnie wyrażenie cron to - 00 08 * * * czy wszystko w porządku?
Sangram Anand,

Niestety nie działa, dołączyłem zrzut ekranu do postu, testuję go z bieżącym czasem EST, czyli o 4:20 coś ..
Sangram Anand

czy czas EST jest tą samą strefą czasową na serwerze kompilacji?
fduff

tak, czas jest taki sam, przy okazji * / 5 * * * * (co 5 metrów) działa dobrze.
Sangram Anand,

Aby uruchomić zadanie dokładnie o 8 rano EST, musisz wykonać następujące czynności: H (0-0) 8 * * *
AKS


2

Jenkins używa formatu Cron do planowania. Możesz zapoznać się z tym linkiem, aby uzyskać więcej szczegółów https://en.wikipedia.org/wiki/Cron. Jeszcze jedno, Jenkins zapewnia nam bardzo przydatny podgląd. Spójrz na zrzut ekranu. wprowadź opis zdjęcia tutaj

Mam nadzieję, że ta pomoc. Dzięki


jak zastosować te zmiany?
Balaji Boggaram Ramanarayan


-1

Dla każdego, kto nie chce czekać całą godzinę, aby sprawdzić, czy uruchomi się konkretna kompilacja:

Aby uzyskać skrót, możesz pobrać skrót tutaj . Użyj pełnej nazwy projektu podanej na stronie oddziału i wydrukuj ją w następujący sposób:

System.out.println(Hash.from("sub/microservices/master"));
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.