Jenkins / الحالة المحفوظة والتسليم المضبوط / الدرس 16
تزامن المهام وأقفال الموارد والعمل القديم
نسّق المورد المشترك مع فحص حداثة المرشح مستقلاً.
في هذه الصفحة
أهداف الدرس
- فصل تسلسل المهمة وتنسيق الموارد بين المهام.
- شرح قصور القفل عن منع تبني الأقدم لاحقاً.
لتزامن المهمة نطاق محدود
تسلسل disableConcurrentBuilds تشغيلات المهمة نفسها وفق الخيارات الموثقة، ولا تنسق كل مهمة تخاطب بيئة واحدة تلقائياً. قد يكتب إصدار Parcel وصيانة مستقلة الهدف نفسه باسمين. حدد المورد وكل كتّابه قبل الآلية. إلغاء السابق سياسة أخرى لها أثر خارجي، ولا يعادل انتظار كل انتقال أو عكس عمل مقبول. لا تستنتج من غياب تشغيلين متوازيين في صفحة مهمة أن الهدف محمي من كاتب آخر. يجب أن تظهر المراجعة نطاق المنع والمسارات الخارجة عنه وما إذا كانت تحتاج تنسيقاً على مستوى أوسع.
ينسق قفل المورد حداً مسمى
تقدم إضافة Lockable Resources خطوة lock وفق التركيب والأذونات. سمِّ المورد باسم الهدف أو القدرة المشتركة، لا معرف تشغيل فريد لا يتصادم. تجنب قفلاً عاماً يحجب بيئات مستقلة. يطبع المقطع اسماً داخل قفل افتراضي فقط ولا يثبت إضافة أو مورداً أو يحجزه أو يمس هدفاً. يحتاج التنسيق مالكاً وسلوكاً للإلغاء والعمل المتروك والمورد غير المتاح. لا يحمي القفل من كاتب لا يشارك العقد نفسه، لذلك يجب تتبع الأدوات اليدوية والمسارات الأخرى بدلاً من الوثوق بوجود كلمة lock وحدها.
lock(resource: "parcel-staging-lab") {
echo "A real operation would still require candidate and target checks"
}
المورد والإضافة متطلبات افتراضية. ليس المقطع نشراً أو Pipeline كاملاً ولا يثبت استبعاداً فعلياً. يحمي القفل الكتّاب المشاركين بالعقد نفسه فقط.
لا يحدد الاستبعاد ترتيب الإصدار
قد ينهي r8 اختباراً قبل r7 الأبطأ ويتبناه الهدف ثم يصل r7 للقفل، فيرجع إلى القديم رغم التسلسل. أعد الأهلية بعد الانتظار بحالة مرجعية أو ترتيب مراجع. قد تستبعد Milestone تشغيلات أقدم بنقاط وفق دلالتها داخل المهمة، ولا تمثل معاملة خارجية أو بديل جيل الهدف. تحتاج ترحيلات كل انتقال، وقد تسمح خدمة قابلة للاستبدال بتجاوز الوسيط. صرّح بالنموذج. لا تصلح سياسة حذف المنتظر لخدمة يمكن تخطي نسخها تلقائياً لسلسلة بيانات تشترط تنفيذ انتقالات بعينها.
أظهر الحداثة والنية المكررة
يرفض النموذج الكامل جيلاً أقدم ويميز هوية عملية مكررة. يستخدم ذاكرة متسلسلة لا معاملات متزامنة أو إضافة Jenkins. يجب على الفعلي ذرّية الفحص والتحديث بضمان الهدف ومراعاة الانهيار والتسييج. لا تستنتج الزمن بترتيب r9 وr10 كنص. الجيل العددي مدخل ترتيب معلن لا تفسيراً عاماً لرقم تشغيل بين مهام. يوضح المثال سبب عدم كفاية واحدة من الحداثة أو منع التكرار وحدها، ولا يقدم تنفيذاً يمكن نسخه ليحل تسابقاً موزعاً في بنية تشغيل حقيقية.
current = 8
seen = set()
def request(identity, generation):
global current
if identity in seen:
return "duplicate"
if generation < current:
return "stale"
current = generation
seen.add(identity)
return "accepted"
print(request("lab-one", 7))
print(request("lab-two", 9))
print(request("lab-two", 9))
stale
accepted
duplicate
لا يحجز البرنامج قفل Jenkins ولا ينفذ منع تكرار موزعاً. يوضح ثوابت معلنة بأجيال وطلبات افتراضية.
نسّق التنظيف والنتيجة المجهولة أيضاً
قد يستمر الخارج بعد توقف Pipeline إذا فُقد الرد عقب التقديم. لاحظ الأصل قبل الإعادة أو استنتاج زوال الملكية. لا يحذف التنظيف مورداً صار لآخر. افصل التقديم والتقارب والتحقق والتقرير كي لا يكرر فشل التقرير التبني. احفظ هوية المورد المحلولة والمرشح مع القرار. يفيد الإعداد إذا احترمت كل المسارات النطاق والتعافي. لا يعني تحرير قفل تنسيق أن العملية الخارجية توقفت، كما لا يعني احتفاظ العميل بمرجعه أن الهدف ما زال ينفذ النية نفسها؛ تحتاج تلك الحالات أدلة خاصة بها.
الأخطاء الشائعة وإصلاحها
تُعد disableConcurrentBuilds قفلاً بين مهام مستقلة.
- لماذا يحدث؟
- اختلط تسلسل المهمة بتنسيق المورد.
- كيف تصلحه؟
- حدد كل كاتب واختر عقد مورد مشتركاً.
- كيف تتجنب تكراره؟
- وثق النطاق والملكية صراحة.
يستبدل منتظر قديم مرشحاً أحدث.
- لماذا يحدث؟
- منع القفل التداخل دون الحداثة.
- كيف تصلحه؟
- أعد الأهلية بحالة ترتيب مرجعية بعد الانتظار.
- كيف تتجنب تكراره؟
- راجع التجاوز والانتقالات المطلوبة مستقلة.
يسمى القفل بمعرف بناء فريد.
- لماذا يحدث؟
- طلب كل كاتب مورداً مختلفاً.
- كيف تصلحه؟
- استخدم هوية الهدف المشترك كحد.
- كيف تتجنب تكراره؟
- راجع التصادم المقصود والتوازي المستقل.
اختبر فهمك
1. تعطل كل مهمة تزامنها وتستهدفان بيئة واحدة. هل مُنع التداخل؟
اعرض الحل المشروح
ليس بالإعداد وحده؛ تسلسل كل واحدة تشغيلاتها فقط. يجب أن يغطي كل الكتّاب عقد مورد أو تنسيق هدف مناسب مع السلطة والتعافي.
2. هل تضمن milestone أمان ترحيل خارجي بعد تقديمه؟
اعرض الحل المشروح
لا. لا يعكس ترتيب التشغيل عملاً مقبولاً أو يضمن التوافق. احفظ الهوية ولاحظ الهدف واتبع ترتيب انتقالات الترحيل وعقد تعافيه.
أهم ما تعلمته
- نسّق كل كتّاب المورد الفعلي.
- افحص التداخل والحداثة والنية والتعافي منفصلة.