Làm thế nào để tôi sắp xếp công việc ở Jenkins?


284

Tôi đã thêm một công việc mới ở Jenkins, mà tôi muốn lên lịch định kỳ.

Từ Cấu hình công việc , tôi đang kiểm tra hộp kiểm "Xây dựng định kỳ" và trong trường văn bản Lịch biểu đã thêm biểu thức:

15 13 * * *

Nhưng nó không chạy đúng thời gian dự kiến.

Đây có phải là thủ tục chính xác để sắp xếp một công việc?

Nhập mô tả hình ảnh ở đây

Công việc sẽ chạy lúc 4:20 sáng, nhưng nó không chạy.


Nó không chạy hay nó không chạy? Bạn thân của bạn nói "Mỗi ngày vào lúc 13:15" nếu tôi nhớ chính xác. Và có: Tôi coi đây là cách chính xác để lên lịch xây dựng định kỳ.
Fildor

1
Có lẽ điều này sẽ giúp bạn: en.wikipedia.org/wiki/Cron#CRON_expression - Tôi thấy Cedric đã liên kết nó ... Có lẽ bạn nên cho chúng tôi biết, khoảng thời gian dự định là gì?
Fildor

1
Để tham khảo, dấu hỏi màu xanh trên RHS cho thấy một lời giải thích tốt về các giá trị có thể
devstopfix

Đây là một trang web tốt để tự động phát triển -> crontab-generator.org
Fabián Carrasco

Câu trả lời:


506

Bằng cách đặt thời gian lên lịch, 15 13 * * *bạn nói với Jenkins lên lịch xây dựng mỗi ngày mỗi tháng mỗi năm vào phút thứ 15 của giờ thứ 13 trong ngày.

Jenkins đã sử dụng biểu thức cron và các trường khác nhau là:

  1. PHÚT Phút trong một giờ (0-59)
  2. GIỜ giờ trong một ngày (0-23)
  3. NGÀY NGÀY trong một tháng (1-31)
  4. Tháng THÁNG trong một năm (1-12)
  5. DAYWEEK Ngày trong tuần (0-7) trong đó 0 và 7 là chủ nhật

Nếu bạn muốn lên lịch xây dựng cứ sau 5 phút, việc này sẽ thực hiện công việc: */5 * * * *

Nếu bạn muốn lên lịch xây dựng mỗi ngày vào lúc 8h00, việc này sẽ thực hiện công việc: 0 8 * * *

Đối với một vài phiên bản trước (2014), Jenkins có một tham số mới, H(trích từ tài liệu mã Jenkins ):

Để cho phép các tác vụ được lên lịch định kỳ tạo ra tải thậm chí trên hệ thống, Hnên sử dụng biểu tượng (cho băm băm).

Ví dụ, sử dụng 0 0 * * *cho hàng tá công việc hàng ngày sẽ gây ra đột biến lớn vào nửa đêm. Ngược lại, sử dụng H H * * *vẫn sẽ thực hiện mỗi công việc một lần một ngày, nhưng không phải tất cả cùng một lúc, sử dụng các nguồn lực hạn chế tốt hơn.

Cũng lưu ý rằng:

Các Hbiểu tượng có thể được dùng như một giá trị ngẫu nhiên trên một phạm vi, nhưng nó thực sự là một hash của tên công việc, không phải là một chức năng ngẫu nhiên, vì vậy mà giá trị vẫn ổn định cho bất kỳ dự án nào.

Ví dụ khác về việc sử dụng 'H'


5
Vậy làm thế nào để xây dựng định kỳ sau mỗi 6 giờ. Liệu * */6 * * *sẽ làm việc?
ѕтƒ

1
@ ѕтƒ: vâng, nó sẽ khởi chạy bản dựng cứ sau 6 giờ
Cédric Julien

31
Truyền tải đồng đều bằng cách sử dụng 'H / 5 * * * *' thay vì '* / 5 * * * *'
Friederbluemle

1
Nếu bạn muốn giới hạn phạm vi của H, bạn có thể sử dụng H (1-3) để chọn một số trong khoảng từ 1 đến 3. Ví dụ sẽ là HH (1-3) * * * để chạy một lần trong khoảng từ 1 giờ sáng đến 3 giờ sáng
AndyClaw

16
Thật khó chịu, dường như có một cái gì đó trong não tôi chỉ đơn giản là không thể nắm bắt được những biểu hiện này mà không cần phải liên tục quay lại tài liệu.
Kỹ năng M2

34

Jenkins cho phép bạn thiết lập nhiều lần, cách nhau bởi các ngắt dòng.

Nếu bạn cần nó để xây dựng hàng ngày vào lúc 7 giờ sáng, cùng với mỗi Chủ nhật lúc 4 giờ chiều, thì dưới đây hoạt động tốt.

H 7 * * *

H 16 * * 0

1
H (0-0) 6 * * 1 (để chạy lúc 6 giờ sáng ET vào thứ Hai), H (0-0) 16 * * 0 (Vào lúc 4 giờ chiều ET vào Chủ nhật). Chạy đồng bằng H 16 (sẽ không chạy lúc 1600/4 giờ chiều), bạn phải sử dụng H (0-0) 16 ....
AKS

2
@ArunSangal thay vì H(0-0)bạn chỉ có thể sử dụng 0lợi thế của việc sử dụng Hlà không phải tất cả Jobs sẽ cố gắng chạy cùng một lúc một cách chính xác mà là cố gắng để có được "khe thời gian có sẵn tiếp theo"
derHugo

28

*/5 * * * * nghĩa là cứ sau 5 phút

5 * * * * có nghĩa là phút thứ 5 mỗi giờ


26

Định dạng như sau:

PHÚT (0-59), GIỜ (0-23), NGÀY (1-31), THÁNG (1-12), NGÀY TUẦN (0-6)

Chữ H, đại diện cho từ Hash có thể được chèn thay vì bất kỳ giá trị nào. Nó sẽ tính toán tham số dựa trên mã băm của tên dự án của bạn.

Điều này là để nếu bạn đang xây dựng một số dự án trên máy xây dựng của mình cùng một lúc, giả sử nửa đêm mỗi ngày, tất cả chúng không bắt đầu thực hiện xây dựng cùng một lúc. Mỗi dự án bắt đầu thực hiện vào một phút khác nhau tùy thuộc vào mã băm của nó.

Bạn cũng có thể chỉ định giá trị nằm giữa các số, tức là H (0,30) sẽ trả về mã băm của dự án trong đó các giá trị băm có thể là 0-30.

Ví dụ:

  1. Bắt đầu xây dựng hàng ngày lúc 08:30 sáng, Thứ Hai - Thứ Sáu: 30 08 * * 1-5

  2. Xây dựng hàng ngày trong tuần hai lần một ngày, vào giờ ăn trưa 12:00 và nửa đêm 00:00, Chủ nhật đến Thứ năm: 00 0,12 * * 0-4

  3. Bắt đầu xây dựng hàng ngày vào cuối buổi chiều từ 4:00 chiều - 4:59 chiều hoặc 16:00 -16: 59 tùy thuộc vào dự án băm: H 16 * * 1-5

  4. Bắt đầu xây dựng vào nửa đêm: @midnight hoặc bắt đầu xây dựng vào nửa đêm, mỗi thứ Bảy: 59 23 * * 6

  5. Mỗi đầu tháng mỗi tháng từ 2:00 sáng - 02:30 sáng: H (0,30) 02 01 * *


1
giải thích tốt đẹp.
vivek

10

Các bước cho lịch trình công việc trong Jenkins:

  1. nhấp vào "Cấu hình" của yêu cầu công việc
  2. cuộn xuống " Xây dựng kích hoạt " - phụ đề
  3. Nhấp vào hộp kiểm Xây dựng định kỳ
  4. Thêm lịch thời gian trong trường Lịch biểu, ví dụ: @midnight

nhập mô tả hình ảnh ở đây

Lưu ý : trong trường lịch biểu, có thể xem lần chạy cuối cùng và ngày tiếp theo.

Jenkins cũng hỗ trợ các bí danh được xác định trước để lên lịch xây dựng:

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

@hourly -> Xây dựng mỗi giờ vào đầu giờ -> 0 * * * *

@daily, @midnight -> Xây dựng mỗi ngày vào lúc nửa đêm -> 0 0 * * *

@weekly -> Xây dựng mỗi tuần vào nửa đêm vào sáng Chủ nhật -> 0 0 * * 0

@monthly -> Xây dựng mỗi tháng vào nửa đêm của ngày đầu tiên của tháng -> 0 0 1 * *


vào lúc nửa đêm khá tuyệt :) Jenkins dường như nhận ra khá nhiều giá trị đặc biệt bắt đầu từ @ bao gồm cả @daily. Bạn có thể gửi một liên kết đến danh sách dứt khoát?
chrisinmtown

@chrisinmtown, danh sách bí danh được xác định trước đã được thêm vào, hy vọng, nó hữu ích cho bạn :)
Gavriel Cohen

7

Để lên lịch công việc định kỳ cứ sau 5 phút, bạn cần xác định cài đặt cron như thế này:

*/5 * * * *

Tôi muốn chạy công việc chính xác @ 8:00 AM EST vì vậy biểu thức cron tôi đã xây dựng là - 00 08 * * * có ổn không?
Sangram Anand

Thật không may, nó không hoạt động, đính kèm ảnh chụp màn hình của nó trong bài viết, nhưng tôi đang thử nghiệm nó với thời gian EST hiện tại tức là 4:20 sáng một cái gì đó ..
Sangram Anand

thời gian EST đó là cùng múi giờ trên máy chủ xây dựng?
fduff

vâng, thời gian là như nhau, btw * / 5 * * * * (cứ sau 5 phút) hoạt động tốt.
Sangram Anand

Để chạy công việc chính xác lúc 8 giờ sáng EST, bạn phải thực hiện theo cách này: H (0-0) 8 * * *
AKS


2

Jenkins sử dụng định dạng Cron trên lịch trình. Bạn có thể tham khảo liên kết này để biết thêm chi tiết: //en.wikipedia.org/wiki/Cron. Một điều nữa, Jenkins cung cấp cho chúng tôi một bản xem trước rất hữu ích. Hãy nhìn vào ảnh chụp màn hình. nhập mô tả hình ảnh ở đây

Tôi hy vọng sự giúp đỡ này. Cảm ơn


Làm thế nào để áp dụng những thay đổi này?
Balaji Boggaram Ramanarayan


-1

Đối với bất kỳ ai không muốn đợi cả giờ để xem liệu một công cụ xây dựng cụ thể có kích hoạt không:

Để có được hàm băm, bạn có thể tải xuống máy tính ở đây . Sử dụng tên dự án đầy đủ như được gõ trên trang chi nhánh và in nó như thế này:

System.out.println(Hash.from("sub/microservices/master"));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.