ابنِ مرة واحدة وارفع بالبصمة: خط تسليم قابل للتراجع
مسار تسليم مرجعي يكون فيه المنتج المختبَر في staging هو نفسه تمامًا في الإنتاج، ويكون التراجع إعادة نشر للبصمة السابقة.
الأمثلة عامة وتوضيحية. لم تُؤخذ من بيئة أي عميل: اضبط العتبات والإعدادات وفق نظامك.
مشكلة إعادة البناء لكل بيئة
خطوط النشر التي تعيد بناء التطبيق لكل بيئة تختبر منتجًا وتُطلق منتجًا آخر. تُحَل الاعتماديات بشكل مختلف، وتتغير الصورة الأساسية، ويختلف خيار بناء — فلا يكون الإصدار الذي في الإنتاج قد اختُبر في أي مكان. ابنِ مرة واحدة، وامنح المنتج هوية لا تتغير، وارفع تلك الهوية.
المسار المرجعي
مسار عام من الإيداع إلى الإنتاج. كل مرحلة إما تمرّر المنتج نفسه أو توقفه.
- 01الإيداعطلب دمج مع مراجعة وفحوص إلزامية.
- 02البناءبناء واحد لكل إيداع؛ تُدفع الصورة وتُسجَّل بصمتها.
- 03التحققاختبارات، وفحص الاعتماديات والصورة، وتوقيع.
- 04Stagingتُنشر البصمة؛ وتعمل اختبارات الدخان والتكامل.
- 05الإنتاجالبصمة نفسها، بإطلاق تدريجي.
- 06المراقبةميزانية الأخطاء والتنبيهات تقرر: الاستمرار أو التراجع.
البصمات لا الوسوم
الوسوم مثل latest أو v2 تسميات قابلة للتغيير؛ أما البصمة (sha256:…) فهي تجزئة محتوى الصورة. ينبغي أن تشير بيانات النشر إلى البصمة، وأن يرفع خط النشر بيئةً بتغيير هذه القيمة الوحيدة — ويُفضّل أن يكون ذلك إيداعًا في مستودع النشر، لكي يكون كل إصدار تغييرًا مراجَعًا وقابلًا للعكس.
# build once and record the digest
docker buildx build --push --metadata-file meta.json \
-t registry.example.com/api:"$GIT_SHA" .
DIGEST=$(jq -r '."containerimage.digest"' meta.json)
# promote: every environment receives the same digest
kustomize edit set image api=registry.example.com/api@"$DIGEST"
تغييرات قاعدة البيانات: وسّع ثم قلّص
التراجع عن الكود سهل فقط إن ظل المخطط ملائمًا للإصدار السابق. قسّم عمليات الترحيل غير المتوافقة إلى خطوات تتوافق كلٌّ منها مع الكود الجاري: أضف العمود أو الجدول الجديد، وانشر كودًا يكتب في الاثنين، واملأ البيانات القديمة، وحوّل القراءة، ولا تحذف البنية القديمة إلا في إصدار لاحق.
التسليم التدريجي والتراجع
- أطلِق أولًا على جزء من الحركة أو النسخ، وقارن معدل الأخطاء وزمن الاستجابة بالإصدار الحالي.
- اربط القرار بهدف SLO: معدل استهلاك مرتفع أثناء الإطلاق يوقف الرفع تلقائيًا.
- التراجع هو إعادة نشر البصمة السابقة — عبر المسار نفسه المختبَر مسبقًا — لا إصلاح عاجل يُكتب تحت الضغط.
- أبقِ الإعدادات والأسرار خارج الصورة، ليعمل المنتج نفسه في كل بيئة.