ایک بار بلڈ، ڈائجسٹ سے پروموشن: رول بیک کے قابل ڈیلیوری پائپ لائن
ایک حوالہ جاتی ڈیلیوری راستہ جس میں 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 سے جوڑیں: رول آؤٹ کے دوران تیز برن ریٹ پروموشن کو خودکار طور پر روک دیتا ہے۔
- رول بیک پچھلے ڈائجسٹ کی دوبارہ ڈیپلائمنٹ ہے — وہی پہلے سے آزمودہ راستہ — دباؤ میں لکھا گیا ہاٹ فکس نہیں۔
- کنفیگریشن اور سیکرٹس کو امیج سے باہر رکھیں، تاکہ وہی آرٹیفیکٹ ہر ماحول میں چلے۔