صيغة كرون في Jenkins
يتكوّن جدول Jenkins من خمسة حقول مثل كرون تاب، وكل سطر في مربع الجدولة جدول مستقل:
| الحقل | القيم المسموحة | الرموز الخاصة |
|---|---|---|
| الدقيقة | 0–59 | , - * / H |
| الساعة | 0–23 | , - * / H |
| يوم الشهر | 1–31 | , - * / H |
| الشهر | 1–12 | , - * / H |
| يوم الأسبوع | 0–7 (0 و7 = الأحد) | , - * / H |
الرموز الخاصة
| الرمز | المعنى |
|---|---|
H | قيمة مشتقة من اسم المهمة. H في حقل الدقائق دقيقة ثابتة لكل مهمة، فالتعبير H * * * * يعمل كل ساعة عند الدقيقة 37 مثلًا، وهي الدقيقة نفسها دائمًا لتلك المهمة. |
H/n | كل n وحدات بإزاحة خاصة بالمهمة: H/15 * * * * قد يعمل عند الدقائق 07 و22 و37 و52. |
H(a-b) | قيمة خاصة بالمهمة ضمن نطاق: H H(0-7) * * * يعمل مرة يوميًا في وقت ما قبل الساعة 08:00. |
@ | الاختصارات @hourly و@daily و@weekly و@monthly و@yearly تستخدم H، أما @midnight فيعني وقتًا ما بين 00:00 و02:59. |
# | الأسطر التي تبدأ بالرمز # تعليقات، وسطر مثل TZ=Europe/London يحدّد المنطقة الزمنية للجدول. |
أمثلة على كرون Jenkins
اضغط على أي تعبير لتحميله في المولّد أعلاه.
| التعبير | الجدول الزمني |
|---|---|
| عند دقيقة ثابتة يختارها Jenkins. | |
| كل 15 دقيقة، بإزاحة يختارها Jenkins. | |
| كل 10 دقائق بين الدقيقة 0 والدقيقة 29، بإزاحة يختارها Jenkins. | |
| في وقت من اليوم يختاره Jenkins. | |
| عند دقيقة ثابتة يختارها Jenkins، بين 2:00 ص و2:59 ص، من الإثنين إلى الجمعة. | |
| عند دقيقة ثابتة يختارها Jenkins، كل ساعتين، بين 9:00 ص و4:59 م، من الإثنين إلى الجمعة. | |
| في وقت من اليوم يختاره Jenkins، في الأيام 1 و15 من الشهر، من يناير إلى نوفمبر. | |
| عند دقيقة ثابتة يختارها Jenkins، خلال ساعة واحدة بين 12:00 ص و2:59 ص يختارها Jenkins. |
الفرق بين كرون Jenkins وكرون لينكس
- استخدم
Hبدلًا من الدقائق الثابتة. فالتعبير0 2 * * *يجعل كل المهام الليلية تبدأ عند 02:00 بالضبط، أماH 2 * * *فيوزّعها على امتداد الساعة، بل إن Jenkins نفسه يقترح ذلك عند حفظ وقت ثابت. - لا يوجد حقل للثواني، ولا تُدعم رموز Quartz مثل
?وLوW. - الخطوات القصيرة في حقل يوم الشهر مثل
*/3أوH/3تعمل بشكل غير منتظم قرب نهاية الشهر، لأن العدّ يبدأ من جديد في اليوم الأول. - تعمل الجداول بالمنطقة الزمنية لخادم Jenkins الرئيسي ما لم تضف سطر
TZ=.
الاستخدام في ملف Jenkinsfile
في خط الأنابيب التصريحي (Declarative Pipeline) ضع الجدول داخل كتلة triggers:
pipeline {
agent any
triggers {
cron('H 2 * * 1-5')
}
stages {
stage('Nightly build') {
steps { sh './build.sh' }
}
}
}
ويعمل فحص المستودع بالطريقة نفسها باستخدام pollSCM('H/5 * * * *')، لكن الـ webhook من خادم Git أفضل عادةً من الفحص المتكرر.
الأسئلة الشائعة
ماذا يعني الرمز H في جدول كرون لـ Jenkins؟
الرمز H اختصار لكلمة «hash». يستبدله Jenkins برقم محسوب من اسم المهمة، فتحصل كل مهمة على قيمة مختلفة لكنها ثابتة. فالتعبير H * * * * يعمل مرة كل ساعة، لكن كل مهمة تختار دقيقتها الخاصة، مما يوزّع الحمل على الخادم والوكلاء.
لماذا ينصحني Jenkins باستخدام H بدلًا من 0؟
عند حفظ 0 2 * * * يقترح Jenkins التعبير H 2 * * *، لأن المهام الكثيرة المجدولة في الدقيقة نفسها تبدأ معًا وتتنافس على المنفّذات. ومع H تبقى المهمة ضمن الساعة 02:00 لكن في دقيقة خاصة بها.
كيف أحدّد المنطقة الزمنية لجدول Jenkins؟
أضف سطرًا مثل TZ=Asia/Riyadh فوق الجدول. وفي ملف Jenkinsfile اكتب سطر TZ= والجدول في سطرين منفصلين داخل نص cron. ومن دون ذلك يتبع الجدول المنطقة الزمنية لخادم Jenkins الرئيسي.
مولدات كرون لمنصات أخرى
*/15 8-18 * * 1-5
مولد تعبيرات كرون Quartz
0 0 8 ? * MON-FRI
مولد تعبيرات كرون لـ Spring
0 0 8 * * MON-FRI
مولد تعبيرات كرون لـ AWS
0 8 ? * MON-FRI *
مولد تعبيرات كرون لـ Salesforce
0 0 8 ? * MON-FRI
مولد تعبيرات كرون لـ Hangfire
0 8 * * 1-5
مولد تعبيرات كرون لـ Airflow
0 6 * * 1-5
مولد تعبيرات node-cron
0 30 8 * * 1-5