پرو هوسٽر > بلاگ > انتظاميه > werf ڪليڪٽر ۾ مواد تي ٻڌل ٽيگنگ: ڇو ۽ ڪيئن ڪم ڪندو آهي؟
werf ڪليڪٽر ۾ مواد تي ٻڌل ٽيگنگ: ڇو ۽ ڪيئن ڪم ڪندو آهي؟
werf اسان جي اوپن سورس آهي GitOps CLI يوٽيليٽي بلڊنگ ۽ ڊليوري لاءِ ايپليڪيشنون Kubernetes تائين. IN ڇڏڻ v1.1 تصويري ڪليڪٽر ۾ هڪ نئون فيچر متعارف ڪرايو ويو: مواد جي ذريعي تصويرن کي ٽيگ ڪرڻ يا مواد تي ٻڌل ٽيگنگ. هينئر تائين، ويرف ۾ عام ٽيگنگ اسڪيم شامل آهي ڊاڪر تصويرون کي گيٽ ٽيگ، گيٽ برانچ يا گٽ ڪمٽ ذريعي ٽيگ ڪرڻ. پر انهن سڀني منصوبن ۾ نقصان آهن جيڪي مڪمل طور تي نئين ٽيگنگ حڪمت عملي ذريعي حل ڪيا ويا آهن. ان جي باري ۾ تفصيل ۽ ڇو اهو تمام سٺو آهي ڪٽي هيٺ آهن.
هڪ Git مخزن مان مائڪرو سروسز جو هڪ سيٽ رولنگ
هڪ صورتحال اڪثر ٿئي ٿي جڏهن هڪ ايپليڪيشن ڪيترن ئي وڌيڪ يا گهٽ آزاد خدمتن ۾ ورهايل آهي. انهن خدمتن جي رليز آزاديء سان ٿي سگهي ٿي: هڪ وقت ۾ هڪ يا وڌيڪ خدمتون جاري ڪري سگھجن ٿيون، جڏهن ته باقي ڪنهن به تبديلي کان سواء ڪم جاري رکڻ گهرجي. پر ڪوڊ اسٽوريج ۽ پروجيڪٽ مينيجمينٽ جي نقطي نظر کان، اهڙي ايپليڪيشن سروسز کي هڪ مخزن ۾ رکڻ لاء وڌيڪ آسان آهي.
حالتون آهن جڏهن خدمتون حقيقي طور تي آزاد آهن ۽ هڪ واحد ايپليڪيشن سان لاڳاپيل نه آهن. انهي صورت ۾، اهي الڳ پروجيڪٽ ۾ واقع هوندا ۽ انهن جي رليز هر منصوبي ۾ الڳ CI/CD پروسيس ذريعي ڪئي ويندي.
جڏهن ته، حقيقت ۾، ڊولپر اڪثر ڪري هڪ واحد ايپليڪيشن کي ڪيترن ئي microservices ۾ ورهائيندا آهن، پر هر هڪ لاء هڪ الڳ مخزن ۽ پروجيڪٽ ٺاهڻ ... هڪ واضح اوورڪيل آهي. اها اها صورتحال آهي جنهن تي وڌيڪ بحث ڪيو ويندو: ڪيتريون ئي اهڙيون مائڪرو سروسز هڪ واحد پروجيڪٽ جي مخزن ۾ واقع آهن ۽ CI/CD ۾ هڪ واحد عمل ذريعي رليز ٿينديون آهن.
Git برانچ ۽ Git ٽيگ پاران ٽيگنگ
اچو ته سڀ کان وڌيڪ عام ٽيگنگ حڪمت عملي استعمال ڪئي وئي آهي - ٽيگ يا شاخ. Git شاخن لاءِ، تصويرن کي شاخ جي نالي سان ٽيگ ڪيو ويو آھي، ھڪڙي وقت ھڪڙي شاخ لاءِ ھڪڙي ئي ڇپيل تصوير آھي ان شاخ جي نالي سان. Git tags لاءِ، تصويرن کي ٽيگ جي نالي جي مطابق ٽيگ ڪيو ويو آھي.
اهي نوان تصويري نالا هيلم ٽيمپليٽس ذريعي Kubernetes جي ترتيب ڏانهن منتقل ڪيا ويا آهن. جڏهن حڪم سان ترتيب ڏيڻ شروع ڪيو وڃي werf deploy فيلڊ کي اپڊيٽ ڪيو پيو وڃي image تبديل ٿيل تصوير جي نالي جي ڪري ڪبرنيٽس وسيلا ظاهر ڪري ٿو ۽ لاڳاپيل وسيلن کي ٻيهر شروع ڪري ٿو.
مسئلو: ان صورت ۾ جڏهن، حقيقت ۾، تصوير جو مواد پوئين رول آئوٽ (گٽ ٽيگ) کان تبديل نه ٿيو آهي، پر صرف ان جي ڊڪر ٽيگ، اهو ٿئي ٿو اضافي هن ايپليڪيشن کي ٻيهر شروع ڪرڻ ۽، مطابق، ڪجهه دير جو وقت ممڪن آهي. جيتوڻيڪ هن ريسٽارٽ کي انجام ڏيڻ جو ڪو به حقيقي سبب نه هو.
نتيجي طور، موجوده ٽيگنگ اسڪيم سان ضروري آهي ته ڪيترن ئي الڳ Git ذخيرن کي باهه ڏيڻ ۽ انهن ڪيترن ئي مخزن جي رول آئوٽ کي منظم ڪرڻ جو مسئلو پيدا ٿئي ٿو. عام طور تي، اهڙي منصوبي کي اوورلوڊ ۽ پيچيده ٿي سگهي ٿو. اهو بهتر آهي ته ڪيترن ئي خدمتن کي هڪ واحد مخزن ۾ گڏ ڪيو وڃي ۽ Docker ٽيگ ٺاهيو وڃي ته جيئن ڪو به غير ضروري ٻيهر شروع نه ٿئي.
Git-commit هڪ Git مخزن جي مواد جي سڃاڻپ ڪندڙ آهي ۽ Git مخزن ۾ فائلن جي ترميم جي تاريخ تي منحصر آهي، تنهنڪري اهو منطقي لڳي ٿو ته ان کي ڊاکر رجسٽري ۾ تصويرن کي ٽيگ ڪرڻ لاء استعمال ڪيو وڃي.
جڏهن ته، Git ڪمٽ پاران ٽيگ ڪرڻ جا ساڳيا نقصان آهن جيئن گيٽ شاخن يا گيٽ ٽيگ ذريعي ٽيگنگ:
هڪ خالي ڪمٽ ٺاهي سگهجي ٿو جيڪا ڪنهن به فائلن کي تبديل نه ڪندي، پر تصوير جي ڊاکر ٽيگ کي تبديل ڪيو ويندو.
هڪ ضم ڪرڻ جو عزم پيدا ٿي سگهي ٿو جيڪو فائلن کي تبديل نٿو ڪري، پر تصوير جي ڊاکر ٽيگ کي تبديل ڪيو ويندو.
هڪ انجام ٿي سگهي ٿو ته Git ۾ انهن فائلن کي تبديل ڪري ٿو جيڪي تصوير ۾ درآمد نه ڪيا ويا آهن، ۽ تصوير جي Docker ٽيگ کي ٻيهر تبديل ڪيو ويندو.
Git برانچ جو نالو ٽيگ ڪرڻ تصويري ورزن کي ظاهر نٿو ڪري
شاخ جي نالي سان ٽيگنگ ان وقت تائين ڪم ڪري ٿي جيستائين ان شاخ تي ڪمٽٽس ترتيب وار ترتيب سان گڏ ڪيا وڃن.
جيڪڏهن موجوده اسڪيم ۾ صارف هڪ خاص شاخ سان لاڳاپيل هڪ پراڻي ڪمٽ کي ٻيهر تعمير ڪرڻ شروع ڪري ٿو، پوء werf ساڳئي ڊاکر ٽيگ استعمال ڪندي تصوير کي ٻيهر لکندو، پراڻي ڪمٽ لاء تصوير جي نئين ٺهيل ورزن سان. ھاڻي ھاڻي ھن ٽيگ کي استعمال ڪندي ڊبليومينٽس پوڊس کي ٻيهر شروع ڪرڻ وقت تصوير جي مختلف ورزن کي ڇڪڻ جو خطرو آھي، جنھن جي نتيجي ۾ اسان جي ايپليڪيشن جو CI سسٽم سان لاڳاپو ختم ٿي ويندو ۽ غير مطابقت پذير ٿي ويندو.
ان کان علاوه، انهن جي وچ ۾ ٿوري وقت سان گڏ هڪ شاخ ۾ مسلسل ڌڪڻ سان، پراڻي ڪمٽ کي نئين کان بعد ۾ مرتب ڪيو وڃي ٿو: تصوير جو پراڻو نسخو Git برانچ ٽيگ استعمال ڪندي نئين کي مٿي ڪري ڇڏيندو. اهڙا مسئلا CI / CD سسٽم ذريعي حل ڪري سگھجن ٿا (مثال طور، GitLab CI ۾ بعد ۾ پائپ لائن ڪمن جي هڪ سيريز لاءِ شروع ڪئي وئي آهي). بهرحال، سڀئي سسٽم هن جي حمايت نٿا ڪن ۽ اهڙي بنيادي مسئلي کي روڪڻ لاء هڪ وڌيڪ قابل اعتماد طريقو هجڻ گهرجي.
مواد تي ٻڌل ٽيگنگ ڇا آهي؟
تنهن ڪري، مواد جي بنياد تي ٽيگنگ ڇا آهي - مواد طرفان تصويرون ٽيگنگ.
ڊاڪر ٽيگ ٺاهڻ لاءِ، اهو نه آهي Git primitives (Git برانچ، Git tag...) جيڪي استعمال ڪيا وڃن ٿا، پر هڪ چيڪسم سان جڙيل آهي:
تصوير جو مواد. تصوير جي سڃاڻپ ٽيگ ان جي مواد کي ظاهر ڪري ٿو. جڏهن هڪ نئون نسخو ٺاهيندي، اهو سڃاڻپ ڪندڙ تبديل نه ٿيندو جيڪڏهن تصوير ۾ فائلون تبديل نه ڪيون آهن؛
Git ۾ هن تصوير ٺاهڻ جي تاريخ. مختلف Git شاخن سان لاڳاپيل تصويرون ۽ مختلف تعمير جي تاريخ werf ذريعي مختلف ID ٽيگ هونديون.
اهڙي سڃاڻپ ڪندڙ ٽيگ کي سڏيو ويندو آهي تصوير اسٽيج جي دستخط.
هر تصوير مرحلن جي هڪ سيٽ تي مشتمل آهي: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch وغيره هر اسٽيج ۾ هڪ سڃاڻپ ڪندڙ هوندو آهي جيڪو ان جي مواد کي ظاهر ڪري ٿو - اسٽيج دستخط(اسٽيج دستخط).
آخري تصوير، انهن مرحلن تي مشتمل آهي، انهن مرحلن جي سيٽ جي نام نهاد دستخط سان ٽيگ ٿيل آهي - مرحلو دستخط، - جيڪا تصوير جي سڀني مرحلن لاءِ عام ٿي رهي آهي.
ترتيب مان هر تصوير لاء werf.yaml عام صورت ۾، اتي ان جي پنهنجي دستخط هوندي ۽، مطابق، هڪ Docker ٽيگ.
اسٽيج دستخط انهن سڀني مسئلن کي حل ڪري ٿو:
خالي Git ڪمن جي مزاحمتي.
Git جي خلاف مزاحمت ڪندڙ جيڪي فائلون تبديل ڪن ٿيون جيڪي تصوير سان لاڳاپيل نه آهن.
تصوير جي موجوده ورزن کي ختم ڪرڻ جو مسئلو پيدا نٿو ٿئي جڏهن برانچ جي پراڻي گٽ ڪمٽس لاءِ تعميرات کي ٻيهر شروع ڪيو وڃي.
اهو آهي 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d تصوير جي مرحلن جو هڪ دستخط آهي backend۽ f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - تصوير جي مرحلن جي دستخط frontend.
جڏهن خاص فنڪشن استعمال ڪندي werf_container_image и werf_container_env هيلم ٽيمپليٽس ۾ ڪجھ به تبديل ڪرڻ جي ڪا ضرورت ناهي: اهي فنڪشن خودڪار طور تي صحيح تصوير جا نالا ٺاهيندا.
مثال CI سسٽم ۾ ٺاھ جوڙ:
type multiwerf && source <(multiwerf use 1.1 beta)
type werf && source <(werf ci-env gitlab)
werf build-and-publish|deploy
مواد تي ٻڌل ٽيگنگ آرٽيڪل ۾ شامل ڪيل سڀني مسئلن کي حل ڪري ٿي:
ڊاکر ٽيگ جو نالو مزاحمت خالي Git ڪمن لاءِ.
ڊاکر ٽيگ جي نالي جي لچڪ گيٽ کي ڪم ڪري ٿو جيڪا فائلن کي تبديل ڪري ٿي تصوير سان غير لاڳاپيل.
تصوير جي موجوده ورزن کي ختم ڪرڻ جي مسئلي جي اڳواڻي نه ڪندو آهي جڏهن گيٽ شاخن لاءِ پراڻي گٽ ڪمٽس لاءِ تعميرات کي ٻيهر شروع ڪندي.
ان کي استعمال ڪريو! ۽ اسان جو دورو ڪرڻ نه وساريو GitHubمسئلو پيدا ڪرڻ يا موجوده هڪ ڳولڻ لاءِ، هڪ پلس شامل ڪريو، هڪ پي آر ٺاهيو يا صرف پروجيڪٽ جي ترقي کي ڏسو.