Jenkins / أسس التنفيذ والمصدر / الدرس 6
خطوات الصدفة والاقتباس وحالة الخروج
احفظ إخفاق الأمر وأبق البيانات خارج مصدر صدفة يولده Groovy.
في هذه الصفحة
أهداف الدرس
- شرح افتراضات sh وbat وPowerShell.
- معالجة الحالة والنص دون تعطيل الفحص المطلوب.
اختر الخطوة لوكيلها الفعلي
تنفذ خطوات الصدفة على عقدة مخصصة بمتطلبات منصة ومفسر. تحتاج sh بيئة Unix مناسبة، وللدفعات وPowerShell صياغة وقواعد حالة مختلفة. لا يثبت اسم الخطوة المفسر ولا يجعل النص محمولاً. تفترض أمثلة Parcel برنامج check_fixture.py كاملاً يقدم منفصلاً عند شرح الأمر. لا تنفذ الدورة خطوة Jenkins. حدد مجلد العمل والمفسر والأدوات والأمر قبل وصف الخطأ كعيب تطبيق. قد يعني عدم بدء العملية غياب متطلب تنفيذ، وهو دليل مختلف عن برنامج بدأ وأبلغ بفشل تأكيد.
النتيجة غير الصفرية دليل مهم
يرفع فشل أمر sh خطأ Pipeline افتراضياً وفق العقد الموثق. تعيد returnStatus الرمز بدلاً من ذلك ليقرر التنسيق ما يفعل، ولا يفيد الخيار إلا إذا قُيّمت القيمة. يتسبب تجاهلها باستمرار فحص مطلوب فاشل. تلتقط returnStdout النص وتغير استهلاكه، ولا تجعله موثوقاً أو تفوض قراراً. افصل حالة الأمر والتشخيص وأهلية الإصدار. قد تحتاج معالجةً تسمح بجمع التقرير، لكن يجب أن يبقى الفشل مرئياً لشرط الإصدار لا أن يختبئ وراء نجاح خطوة لاحقة.
قيّم الحالة الملتقطة صراحة
يلتقط المقطع رمز الفحص ويوقف التنفيذ بـ error إذا لم يكن صفراً. يحتاج مجلد Unix مخصصاً وPython وبرنامج تجهيز لا يوفرها النص، ولا يعمل هنا. يمكن للتطبيق الحقيقي حفظ مرحلة فاشلة مع تقارير بنمط معالجة مدروس، لكنه يجب أن يحتفظ بالنتيجة الأصلية. لا يعوض echo ناجح فحص العدد. يوضح المثال القرار الصريح بعد التقاط الحالة؛ ولا يدعي أن الرسالة العامة تغني عن دليل الخطأ المحدود الذي ينبغي الاحتفاظ به للتحقيق في سبب فشل البرنامج.
script {
int status = sh(script: "python check_fixture.py", returnStatus: true)
if (status != 0) {
error("Fixture check did not pass")
}
}
هذا محتوى script توضيحي. لا ينشئ التجهيز ولا يثبت تشغيل Jenkins. يعتمد الخطأ والتوقيت على الأمر والوكيل فلا يختلقان.
يفسر Groovy والصدفة في وقتين
قد يحل Groovy قيم السلسلة مزدوجة الاقتباس قبل استلام الصدفة. قد يكشف إدراج المعلمات أو الأسرار عندها البيانات أو يحولها لصياغة تنفيذية. فضّل نصاً ثابتاً وقناة بيئة أو وسائط منظمة ثم اقتبس وفق المفسر. قد تبقى القيمة المقتبسة خطرة كاسم أمر أو خيار أو مسار أو تعبير في برنامج آخر. تجنب إعادة التفسير مثل eval. ليس إخفاء السجل مبرراً لبناء مصدر يحتوي بيانات اعتماد أو نص مساهم. تتبع القيمة حتى المستهلك النهائي ولا تتوقف المراجعة عند أول اقتباس يبدو صحيحاً.
لاحظ رمزاً محلياً دون محرك CI
يشغّل برنامج Python الكامل ابناً محلياً يخرج بثلاثة، ويلتقط النتيجة ويعرض blocked. لا يجري شبكة أو تغيير ملف أو عملية Jenkins. يوضح إمكان عودة رمز دون رفع تلقائي عندما يختار المستدعي ذلك. لا يحاكي المقاطعة في Jenkins أو أنابيب الصدفة أو حالة Windows. يجب أن يحفظ الغلاف الفعلي الإخفاق عبر الأنابيب وجمع التقارير، ويميز التأكيد الفاشل والإلغاء وغياب السعة. لا يحول نجاح تنفيذ النموذج المتعمد الحالة ثلاثة إلى نجاح فحص التطبيق الذي يمثل موضوع القرار.
import subprocess, sys
r = subprocess.run([sys.executable, "-I", "-c", "raise SystemExit(3)"], capture_output=True, text=True)
print(r.returncode)
print("ready" if r.returncode == 0 else "blocked")
3
blocked
يبدأ ابن Python محلي فقط بلا صدفة. الثلاثة معلنة عمداً من الابن لا فشل Jenkins مرصود.
الأخطاء الشائعة وإصلاحها
تُفعل returnStatus ويُهمل العدد.
- لماذا يحدث؟
- تعطل الفشل دون قرار بديل.
- كيف تصلحه؟
- قيّم الرمز واحفظ فشل الفحص المطلوب.
- كيف تتجنب تكراره؟
- راجع النتائج السلبية في منطق الغلاف.
تُرسل صياغة Bash إلى bat.
- لماذا يحدث؟
- يفترض النص مفسراً غير الخطوة.
- كيف تصلحه؟
- استخدم المفسر المدعوم الصحيح واكتب اقتباسه وحالته.
- كيف تتجنب تكراره؟
- أعلن المتطلبات واختبر النقل منفصلاً.
يُدرج السر أو النص الحر في مصدر Groovy للصدفة.
- لماذا يحدث؟
- عبرت البيانات طبقتي تفسير دون حد آمن.
- كيف تصلحه؟
- استخدم نصاً ثابتاً ومدخلاً محدوداً وتحققاً لاحقاً.
- كيف تتجنب تكراره؟
- تتبع Groovy والصدفة والبرنامج المساعد مستقلة.
اختبر فهمك
1. عاد الفحص باثنين ونجح نشر التقرير. هل نجح الفحص؟
اعرض الحل المشروح
لا. النشر والفحص نتيجتان منفصلتان. احفظ الحالة الفاشلة وطبق البوابة مع التشخيص المفيد. لا تدع أمراً أخيراً ناجحاً أو قيمة مهملة تمحو إخفاق العقد الأصلي.
2. هل تحول returnStdout النص إلى boolean؟
اعرض الحل المشروح
لا. تلتقط نصاً وفق العقد. حلل الصيغة المقصودة وتحقق منها وافحص نجاح الأمر مستقلاً. لا يصبح false أو الناتج الفارغ تفويض إصدار عاماً.
أهم ما تعلمته
- تحتاج الحالة الملتقطة قراراً صريحاً.
- افصل إحلال Groovy وتحليل الصدفة والتحقق.