Bagaimana cara saya menjadwalkan pekerjaan di Jenkins?

285

Saya menambahkan pekerjaan baru di Jenkins, yang ingin saya jadwalkan secara berkala.

Dari Mengkonfigurasi pekerjaan , saya memeriksa kotak centang "Bangun Berkala" dan di bidang teks Jadwal tambahkan ungkapan:

15 13 * * *

Tetapi itu tidak berjalan pada waktu yang dijadwalkan.

Apakah prosedur yang benar untuk menjadwalkan pekerjaan?

Masukkan deskripsi gambar di sini

Pekerjaan harus berjalan pada pukul 4:20 pagi, tetapi tidak berjalan.

Sangram Anand
sumber
Itu berjalan atau tidak berjalan? Cron Anda mengatakan "Setiap Hari pada 13:15" jika saya ingat dengan benar. Dan ya: Saya menganggap ini cara yang benar untuk menjadwalkan pembuatan berkala.
Fildor
1
Mungkin ini akan membantu Anda: en.wikipedia.org/wiki/Cron#CRON_expression - Saya melihat Cedric sudah menautkannya ... Mungkin Anda harus memberi tahu kami, periode apa yang dimaksud?
Fildor
1
Untuk referensi, tanda tanya biru pada RHS mengungkapkan penjelasan yang baik tentang nilai yang mungkin
devstopfix
Berikut adalah halaman web yang bagus untuk autogenerate -> crontab-generator.org
Fabián Carrasco

Jawaban:

507

Dengan mengatur periode jadwal kepada 15 13 * * *Anda, beri tahu Jenkins untuk menjadwalkan pembangunan setiap hari setiap bulan setiap tahun pada menit ke-15 dari jam ke-13 hari itu.

Jenkins menggunakan ekspresi cron , dan bidang yang berbeda adalah:

  1. MENIT Menit dalam satu jam (0-59)
  2. JAM Jam dalam satu hari (0-23)
  3. DAYMONTH Day dalam sebulan (1-31)
  4. BULAN Bulan dalam setahun (1-12)
  5. DAYWEEK Hari dalam seminggu (0-7) di mana 0 dan 7 adalah minggu

Jika Anda ingin menjadwalkan pembangunan Anda setiap 5 menit, ini akan berfungsi: */5 * * * *

Jika Anda ingin menjadwalkan pembangunan Anda setiap hari pada 8h00, ini akan melakukan pekerjaan: 0 8 * * *

Untuk beberapa versi terakhir (2014), Jenkins memiliki parameter baru, H(ekstrak dari dokumentasi kode Jenkins ):

Untuk memungkinkan tugas yang dijadwalkan secara berkala untuk menghasilkan beban yang merata pada sistem, simbol H(untuk "hash") harus digunakan sedapat mungkin.

Misalnya, menggunakan 0 0 * * *selusin pekerjaan harian akan menyebabkan lonjakan besar di tengah malam. Sebaliknya, menggunakan H H * * *masih akan melaksanakan setiap pekerjaan sekali sehari, tetapi tidak semua pada saat yang sama, lebih baik menggunakan sumber daya yang terbatas.

Perhatikan juga bahwa:

The Hsimbol dapat dianggap sebagai nilai acak selama rentang, tapi itu benar-benar adalah hash dari nama pekerjaan, bukan fungsi acak, sehingga nilai tetap stabil untuk setiap proyek yang diberikan.

Contoh lainnya menggunakan 'H'

Cédric Julien
sumber
5
Jadi bagaimana membangun secara berkala setelah setiap 6 jam. Apakah * */6 * * *akan bekerja
sejak
1
@ ѕтƒ: ya, itu akan meluncurkan build setiap 6 jam
Cédric Julien
31
Sebarkan muatan secara merata dengan menggunakan 'H / 5 * * * *' daripada '* / 5 * * * *'
friederbluemle
1
Jika Anda ingin membatasi rentang H, Anda dapat menggunakan H (1-3) misalnya untuk memilih angka antara 1 dan 3. Contohnya adalah HH (1-3) * * * untuk dijalankan sekali antara pukul 01.00 dan 03.00
AndyClaw
16
Dengan frustrasi, sepertinya ada sesuatu di otak saya yang tidak dapat memahami ungkapan-ungkapan ini tanpa harus terus-menerus merujuk kembali ke dokumen.
Skill M2
34

Jenkins memungkinkan Anda mengatur beberapa kali, dipisahkan oleh jeda baris.

Jika Anda membutuhkannya untuk membangun setiap hari pada jam 7 pagi, bersama dengan setiap hari Minggu jam 4 sore, di bawah ini berfungsi dengan baik.

H 7 * * *

H 16 * * 0
Pawan Gaitonde
sumber
1
H (0-0) 6 * * 1 (untuk berlari pada pukul 6 pagi ET pada hari Senin), H (0-0) 16 * * 0 (Pada pukul 16:00 ET pada hari Minggu). Menjalankan plain H 16 (tidak akan berjalan pada 1600 / 4pm), Anda harus menggunakan H (0-0) 16 ....
AKS
2
@ArunSangal bukan H(0-0)Anda hanya dapat menggunakan 0keuntungan dari menggunakan Hadalah bahwa tidak semua Jobs akan berusaha untuk berjalan pada waktu yang sama tetapi mencoba untuk mendapatkan "slot waktu berikutnya yang tersedia"
derHugo
28

*/5 * * * * berarti setiap 5 menit

5 * * * * berarti menit ke-5 setiap jam

Nikul Padhya
sumber
26

Formatnya adalah sebagai berikut:

MENIT (0-59), JAM (0-23), HARI (1-31), BULAN (1-12), HARI MINGGU INI (0-6)

Huruf H, mewakili kata Hash dapat dimasukkan sebagai ganti nilai apa pun. Ini akan menghitung parameter berdasarkan kode hash nama proyek Anda.

Ini agar jika Anda membangun beberapa proyek di mesin build Anda secara bersamaan, katakanlah tengah malam setiap hari, mereka tidak semua memulai eksekusi build mereka pada waktu yang sama. Setiap proyek memulai pelaksanaannya pada menit yang berbeda tergantung pada kode hashnya.

Anda juga dapat menentukan nilai antara angka, yaitu H (0,30) akan mengembalikan kode hash proyek di mana hash yang mungkin adalah 0-30.

Contoh:

  1. Mulai bangun setiap hari pukul 08:30 pagi, Senin - Jumat: 30 08 * * 1-5

  2. Hari kerja harian dibangun dua kali sehari, pada jam makan siang 12:00 dan tengah malam 00:00, hari Minggu sampai Kamis: 00 0,12 * * 0-4

  3. Mulai membangun setiap hari di sore hari antara pukul 16:00 - 16:59 atau 16:00 -16: 59 tergantung pada hash proyek: H 16 * * 1-5

  4. Mulai membangun pada tengah malam: @midnight atau mulai membangun pada tengah malam, setiap Sabtu: 59 23 * * 6

  5. Setiap bulan pertama antara pukul 02:00 - 02:30: H (0,30) 02 01 * *

Nagarjuna Yalamanchili
sumber
1
penjelasan yang bagus.
vivek
10

Langkah-langkah untuk menjadwalkan pekerjaan di Jenkins:

  1. klik pada "Konfigurasi" dari persyaratan pekerjaan
  2. gulir ke bawah ke " Build Triggers " - subtitle
  3. Klik pada kotak centang Build secara berkala
  4. Tambahkan jadwal waktu di bidang Jadwal, misalnya, @midnight

masukkan deskripsi gambar di sini

Catatan : di bawah bidang jadwal, dapat melihat tanggal-waktu terakhir dan berikutnya dijalankan.

Jenkins juga mendukung alias yang telah ditentukan sebelumnya untuk menjadwalkan pembuatan:

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

@hourly -> Bangun setiap jam di awal jam -> 0 * * * *

@daily, @midnight -> Bangun setiap hari di tengah malam -> 0 0 * * *

@weekly -> Bangun setiap minggu pada tengah malam pada hari Minggu pagi -> 0 0 * * 0

@monthly -> Bangun setiap bulan pada tengah malam hari pertama bulan itu -> 0 0 1 * *

Gavriel Cohen
sumber
pada tengah malam itu cukup keren :) Jenkins tampaknya mengenali beberapa nilai khusus mulai @ termasuk @ setiap hari. Bisakah Anda memposting tautan ke daftar definitif?
chrisinmtown
@chrisinmtown, daftar alias yang sudah ditambahkan ditambahkan, semoga bermanfaat bagi Anda :)
Gavriel Cohen
7

Untuk menjadwalkan pekerjaan cron setiap 5 menit, Anda perlu menentukan pengaturan cron seperti ini:

*/5 * * * *
fduff
sumber
Saya ingin menjalankan pekerjaan persis @ 8:00 EST sehingga ekspresi cron yang saya buat adalah - 00 08 * * * apakah itu baik-baik saja?
Sangram Anand
Sayangnya itu tidak berfungsi, terpasang screenshot di pos, tapi saya mengujinya dengan waktu EST saat ini yaitu, 4:20 sesuatu ..
Sangram Anand
bahwa waktu EST adalah zona waktu yang sama pada server build?
fduff
ya waktunya sama, tetapi * / 5 * * * * (setiap 5mts) bekerja dengan baik.
Sangram Anand
Untuk menjalankan pekerjaan tepat pada pukul 8 pagi EST, Anda harus melakukan ini: H (0-0) 8 * * *
AKS
3

Coba gunakan 0 8 * * *. Itu harus bekerja

pengguna1815823
sumber
2

Jenkins menggunakan format Cron pada penjadwalan. Anda dapat merujuk tautan ini untuk lebih detailhttps: //en.wikipedia.org/wiki/Cron. Satu hal lagi, Jenkins memberi kami pratinjau yang sangat berguna. Silakan lihat di screenshot. masukkan deskripsi gambar di sini

Saya harap ini membantu. Terima kasih

Thuong Vo
sumber
bagaimana cara menerapkan perubahan ini?
Balaji Boggaram Ramanarayan
-1

Bagi siapa saja yang tidak ingin menunggu satu jam penuh untuk melihat apakah bangunan tertentu memicu:

Untuk mendapatkan hash, Anda dapat mengunduh hasher di sini . Gunakan nama proyek lengkap seperti yang diketik di halaman cabang dan cetak seperti ini:

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