سلام! تازي طور تي، ڊاکر تصويرون ٺاهڻ ۽ ڪبرنيٽس تي تعیناتي لاءِ ٻنهي جا ڪيترائي سٺا آٽوميشن اوزار جاري ڪيا ويا آهن. ان سلسلي ۾، مون فيصلو ڪيو GitLab سان گڏ راند ڪرڻ، مڪمل طور تي ان جي صلاحيتن جو مطالعو ۽، يقينا، پائپ لائن قائم ڪريو.
هي ڪم ويب سائيٽ طرفان متاثر ڪيو ويو kubernetes.io، جنهن مان ٺهيل آهي ذريعو ڪوڊ خودڪار طور تي، ۽ هر تلاء جي درخواست لاء موڪليو ويو، روبوٽ خودڪار طريقي سان سائيٽ جو هڪ ڏيک نسخو ٺاهي ٿو توهان جي تبديلين سان ۽ ڏسڻ لاء هڪ لنڪ مهيا ڪري ٿو.
مون ڪوشش ڪئي ته ساڳي عمل کي شروع کان، پر مڪمل طور تي Gitlab CI ۽ مفت اوزار تي ٺهيل آهي جيڪي آئون ڪبرنيٽس تي ايپليڪيشنن کي ترتيب ڏيڻ لاء استعمال ڪرڻ لاء استعمال ڪيا ويا آهن. اڄ مان آخر ۾ توهان کي انهن بابت وڌيڪ ٻڌائيندس.
مضمون بحث ڪندو اوزار جهڙوڪ: هونگو, qbec, ڪنيڪو, git-crypt и گٽ لاب سي متحرڪ ماحول جي پيدائش سان.
اسان جي پروجيڪٽ جي مثال طور، اسان ڪوشش ڪنداسين ته هوگو تي ٺهيل دستاويزي پبلشنگ سائيٽ ٺاهي. هوگو هڪ جامد مواد جنريٽر آهي.
انهن لاءِ جيڪي جامد جنريٽر کان واقف نه آهن، مان توهان کي انهن بابت ٿورو وڌيڪ ٻڌائيندس. هڪ ڊيٽابيس ۽ ڪجهه پي ايڇ پي سان روايتي ويب سائيٽ انجڻ جي برعڪس، جيڪي، جڏهن صارف طرفان درخواست ڪئي وئي، اڏام تي صفحا ٺاهي، جامد جنريٽر ٿورو مختلف طرح سان ٺهيل آهن. اهي توهان کي ذريعا وٺڻ جي اجازت ڏين ٿا، عام طور تي مارڪ ڊائون مارڪ اپ ۽ موضوع ٽيمپليٽ ۾ فائلن جو هڪ سيٽ، پوء انهن کي مڪمل طور تي مڪمل ويب سائيٽ ۾ گڏ ڪريو.
اهو آهي، نتيجي طور، توهان هڪ ڊاريڪٽري جي جوڙجڪ ۽ ٺاهيل HTML فائلن جو هڪ سيٽ حاصل ڪندا، جنهن کي توهان آساني سان ڪنهن به سستي هوسٽنگ تي اپلوڊ ڪري سگهو ٿا ۽ هڪ ڪم ڪندڙ ويب سائيٽ حاصل ڪري سگهو ٿا.
توھان ھلوگو کي مقامي طور تي انسٽال ڪري سگھو ٿا ۽ ان کي آزمائي سگھو ٿا:
نئين سائيٽ جي شروعات:
hugo new site docs.example.org
۽ ساڳئي وقت git مخزن:
cd docs.example.org
git init
هينئر تائين، اسان جي سائيٽ پراڻي آهي ۽ ان تي ڪجهه ظاهر ٿيڻ لاءِ، اسان کي پهريان هڪ موضوع کي ڳنڍڻ جي ضرورت آهي؛ هڪ موضوع صرف ٽيمپليٽس جو هڪ سيٽ آهي ۽ مخصوص ضابطا جنهن جي ذريعي اسان جي سائيٽ ٺاهي وئي آهي.
موضوع لاءِ اسان استعمال ڪنداسين سکو, которая, на мой взгляд, как нельзя лучше подходит для сайта с документацией.
مان هن حقيقت تي خاص ڌيان ڏيڻ چاهيان ٿو ته اسان کي پنهنجي پروجيڪٽ جي مخزن ۾ موضوع فائلن کي محفوظ ڪرڻ جي ضرورت ناهي؛ ان جي بدران، اسان صرف ان کي استعمال ڪندي ڳنڍي سگهون ٿا. git submodule:
اهڙيء طرح، اسان جي مخزن ۾ صرف فائلون هونديون جيڪي سڌو سنئون اسان جي پروجيڪٽ سان لاڳاپيل آهن، ۽ ڳنڍيل موضوع هڪ مخصوص مخزن جي ڪڙي جي طور تي رهندو ۽ ان ۾ هڪ ڪمٽ، اهو آهي، اهو هميشه اصل ماخذ کان ڇڪي سگهجي ٿو ۽ نه ڊڄي. غير مطابقت واريون تبديليون.
اچو ته ترتيب کي درست ڪريو config.toml:
baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"
اڳ ۾ ئي هن اسٽيج تي توهان هلائي سگهو ٿا:
hugo server
И по адресу http://localhost:1313/ اسان جي نئين ٺاهيل ويب سائيٽ چيڪ ڪريو، ڊاريڪٽري ۾ ڪيل سڀ تبديليون خودڪار طور تي برائوزر ۾ کليل صفحي کي اپڊيٽ ڪريو، تمام آسان!
اچو ته هڪ ڍڪ پيج ٺاهڻ جي ڪوشش ڪريون content/_index.md:
# My docs site
## Welcome to the docs!
You will be very smart :-)
نئين ٺاهيل صفحي جو اسڪرين شاٽ
سائيٽ ٺاهڻ لاءِ، بس ھلايو:
hugo
ڊائريڪٽري جو مواد عوامي / ۽ توهان جي ويب سائيٽ هوندي.
ها، رستي جي ذريعي، اچو ته فوري طور تي ان کي شامل ڪريو .جيتگينور:
echo /public > .gitignore
اسان جي تبديلين کي انجام ڏيڻ نه وساريو:
git add .
git commit -m "New site created"
2. Dockerfile تيار ڪرڻ
اهو اسان جي مخزن جي جوڙجڪ کي بيان ڪرڻ جو وقت آهي. مان عام طور تي ڪجھ استعمال ڪريان ٿو جهڙوڪ:
FROM alpine:3.11 as builder
ARG HUGO_VERSION=0.62.0
RUN wget -O- https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz -C /usr/local/bin
ADD . /src
RUN hugo -s /src
FROM alpine:3.11
RUN apk add --no-cache darkhttpd
COPY --from=builder /src/public /var/www
ENTRYPOINT [ "/usr/bin/darkhttpd" ]
CMD [ "/var/www" ]
جئين توهان ڏسي سگهو ٿا، Dockerfile ٻن تي مشتمل آهي کان، هن خاصيت کي سڏيو ويندو آهي گھڻ-اسٽيج تعمير ۽ توهان کي اجازت ڏئي ٿو ته هر شيءِ کي خارج ڪرڻ جي غير ضروري فائنل ڊاکر تصوير مان.
اهڙيء طرح، آخري تصوير صرف تي مشتمل هوندي ڳاڙهوhttpd (هلڪو وزن HTTP سرور) ۽ عوامي / - اسان جي جامد طور تي ٺاهيل ويب سائيٽ جو مواد.
اسان جي تبديلين کي انجام ڏيڻ نه وساريو:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. ڪنيڪو ڄاڻڻ
هڪ ڊاکر تصوير بلڊر جي طور تي، مون استعمال ڪرڻ جو فيصلو ڪيو ڪنيڪو، ڇاڪاڻ ته ان جي آپريشن کي ڊاکر ڊيمن جي ضرورت ناهي، ۽ تعمير پاڻ کي ڪنهن به مشين تي ڪري سگهجي ٿو ۽ ڪيش سڌو سنئون رجسٽري ۾ ذخيرو ٿي سگهي ٿو، ان ڪري مڪمل طور تي مسلسل اسٽوريج جي ضرورت کي ختم ڪري ٿو.
تصوير ٺاهڻ لاء، صرف ڪنٽينر کي هلائڻ سان ڪنيڪو عملدار ۽ ان کي موجوده تعمير جي حوالي سان پاس ڪريو؛ اهو پڻ مقامي طور تي ڪري سگهجي ٿو، ڊڪر ذريعي:
ڪٿي registry.gitlab.com/kvaps/docs.example.org/website - توهان جي ڊاکر تصوير جو نالو؛ تعمير ڪرڻ کان پوء، اهو خودڪار طور تي ڊاکر رجسٽري ۾ شروع ڪيو ويندو.
نيم --ڪيش توهان کي اجازت ڏئي ٿو ته ڪيش تہن کي ڊاکر رجسٽري ۾؛ مثال طور ڏنل، اهي محفوظ ڪيا ويندا registry.gitlab.com/kvaps/docs.example.org/website/cache، پر توھان وضاحت ڪري سگھو ٿا ھڪڙو ٻيو رستو پيٽرول استعمال ڪندي —cache-repo.
ڊاڪر-رجسٽري جو اسڪرين شاٽ
4. qbec ڄاڻڻ
ڪي بي سي هڪ ڊيپلائيمينٽ ٽول آهي جيڪو توهان کي اجازت ڏئي ٿو ته توهان جي ايپليڪيشن جي منشور کي واضح طور تي بيان ڪري ۽ انهن کي ڪبرنيٽس تي ترتيب ڏيو. Jsonnet کي بنيادي نحو جي طور تي استعمال ڪرڻ توهان کي اجازت ڏئي ٿو ته مختلف ماحولن ۾ اختلافن جي وضاحت کي تمام گهڻو آسان بڻائي، ۽ پڻ تقريبن مڪمل طور تي ڪوڊ جي ورهاڱي کي ختم ڪري ٿو.
اهو خاص طور تي انهن ڪيسن ۾ صحيح ٿي سگهي ٿو جتي توهان کي ايپليڪيشن کي ترتيب ڏيڻ جي ضرورت آهي ڪيترن ئي ڪلسٽرن سان مختلف پيٽرولن سان ۽ انهن کي Git ۾ واضح طور تي بيان ڪرڻ چاهيندا.
Qbec پڻ توهان کي اجازت ڏئي ٿو ته هيلم چارٽ کي ترتيب ڏيڻ جي ذريعي انهن کي ضروري پيرا ميٽرز پاس ڪندي ۽ پوءِ انهن کي باقاعده منشور وانگر هلائڻ جي اجازت ڏئي ٿو، جنهن ۾ توهان انهن تي مختلف ميوٽيشنز لاڳو ڪري سگهو ٿا، ۽ اهو، موڙ ۾، توهان کي اجازت ڏئي ٿو ته توهان کي ضرورت کان نجات حاصل ڪرڻ جي ضرورت آهي. چارٽ ميوزيم استعمال ڪريو. اھو آھي، توھان ذخيرو ڪري سگھو ٿا چارٽ سڌو سنئون گٽ مان، جتي اھي آھن.
هن فائل ۾ اسان ٽن ڪبرنيٽس ادارن کي هڪ ڀيرو بيان ڪيو آهي، اهي آهن: رنيجرز, خدمت и اندر اچڻ. جيڪڏهن اسان چاهيون ٿا، اسان انهن کي مختلف حصن ۾ وجهي سگهون ٿا، پر هن مرحلي ۾ اسان لاء هڪ ڪافي هوندو.
نحو jsonnet باقاعده json سان بلڪل ملندڙ جلندڙ آهي، اصول ۾، باقاعده json اڳ ۾ ئي صحيح jsonnet آهي، تنهن ڪري پهريان توهان لاء آن لائن خدمتون استعمال ڪرڻ آسان ٿي سگهي ٿي جهڙوڪ yaml2json توھان جي معمولي yaml کي json ۾ تبديل ڪرڻ لاءِ، يا، جيڪڏھن توھان جي اجزاء ۾ ڪي متغير شامل نه آھن، ته پوءِ انھن کي ريگولر yaml جي صورت ۾ بيان ڪري سگھجي ٿو.
جڏهن ڪم سان jsonnet مان توهان جي ايڊيٽر لاءِ هڪ پلگ ان انسٽال ڪرڻ جي صلاح ڏيان ٿو
مثال طور، ويم لاء هڪ پلگ ان آهي vim-jsonnet، جيڪو نحو کي نمايان ڪرڻ تي ڦرندو آهي ۽ خودڪار طريقي سان عمل ڪندو آهي jsonnet fmt هر دفعي توهان بچايو (جيسنيٽ انسٽال ڪرڻ جي ضرورت آهي).
آئوٽ پٽ تي توهان هميشه ڏسندا ته توهان جي ڪلستر ۾ ڇا ڪيو ويندو، qbec توهان کي ٽائپ ڪندي تبديلين سان متفق ٿيڻ لاء چيو ويندو. y توهان پنهنجي ارادن جي تصديق ڪرڻ جي قابل هوندا.
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
5. ڪوشش ڪري رهيو آهي Gitlab-رنر سان Kubernetes-executor
تازو تائين مون صرف باقاعده استعمال ڪيو gitlab ڊوڙندڙ شيل يا ڊاڪر-ايگزيڪيوٽر سان اڳ ۾ تيار ڪيل مشين (LXC ڪنٽينر) تي. شروعات ۾، اسان وٽ ڪيترائي اهڙا رنر هئا جيڪي عالمي سطح تي اسان جي گيتلب ۾ بيان ڪيا ويا آهن. انهن سڀني منصوبن لاءِ ڊاکر تصويرون گڏ ڪيون.
پر جيئن ته عملي طور ڏيکاريو ويو آهي، هي اختيار سڀ کان وڌيڪ مثالي نه آهي، ٻنهي جي عملي ۽ حفاظت جي لحاظ کان. اهو تمام گهڻو بهتر آهي ۽ نظرياتي طور تي وڌيڪ صحيح آهي ته هر منصوبي لاءِ يا هر ماحول لاءِ الڳ رنر مقرر ڪيا وڃن.
خوشقسمتيء سان، اهو سڀ ڪجهه مسئلو ناهي، هاڻي اسان کي ترتيب ڏينداسين gitlab ڊوڙندڙ سڌو اسان جي منصوبي جي حصي طور ڪبرنيٽس ۾.
Gitlab مهيا ڪري ٿو تيار ٿيل هيلم چارٽ گٽليب-رنر کي ڪبرنيٽس تائين پهچائڻ لاءِ. تنهن ڪري توهان سڀني کي ڳولڻ جي ضرورت آهي رجسٽريشن جو نشان اسان جي منصوبي لاء سيٽنگون -> CI / CD -> ڊوڙندڙ ۽ هيل تائين پهچايو:
yga8y-jdCusVDn_t4Wxc - توهان جي پروجيڪٽ لاءِ رجسٽريشن ٽوڪن.
rbac.create=سچو - رنر کي مهيا ڪري ٿو ضروري مقدار جي استحقاق سان گڏ پوڊ ٺاهي سگھندا اسان جي ڪمن کي ڪبرنيٽس-ايگزيڪيوٽر استعمال ڪندي.
جيڪڏهن سڀ ڪجهه صحيح طريقي سان ڪيو وڃي، توهان کي سيڪشن ۾ رجسٽرڊ رنر ڏسڻ گهرجي ويڙهاڪتوهان جي پروجيڪٽ سيٽنگون ۾.
شامل ڪيل رنر جو اسڪرين شاٽ
Вот так просто? — да, так просто! Больше никакой мороки с регистрацией раннеров вручную, с этой минуты раннеры будут создаваться и уничтожаться автоматически.
6. QBEC سان هيلم چارٽ ترتيب ڏيو
جتان اسان غور ڪرڻ جو فيصلو ڪيو gitlab ڊوڙندڙ частью нашего проекта, настало время описать его в нашем Git-репозитории.
اسان ان کي هڪ الڳ جزو طور بيان ڪري سگهون ٿا ويب سائيٽ، پر مستقبل ۾ اسان مختلف نقلن کي ترتيب ڏيڻ جو منصوبو ڪريون ٿا ويب سائيٽ گهڻو ڪري، برعڪس gitlab ڊوڙندڙ، جيڪو صرف هڪ ڀيرو في ڪبرنيٽس ڪلستر تي لڳايو ويندو. سو اچو ته ان لاءِ الڳ ايپليڪيشن شروع ڪريون:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
هن ڀيري اسان ڪبرنيٽس ادارن کي دستي طور بيان نه ڪنداسين، پر هڪ تيار ڪيل هيلم چارٽ کڻنداسين. qbec جي فائدن مان هڪ آهي هيلم چارٽس کي سڌو سنئون گٽ مخزن مان رينجر ڪرڻ جي صلاحيت.
پر Git ۾ رازن کي محفوظ ڪرڻ محفوظ ناهي، ڇا اهو آهي؟ تنهنڪري اسان کي انهن کي صحيح طور تي انڪوڊ ڪرڻ جي ضرورت آهي.
عام طور تي، هڪ متغير جي خاطر، اهو هميشه احساس نٿو ڪري. توهان رازن کي منتقل ڪري سگهو ٿا qbec ۽ توهان جي CI سسٽم جي ماحولياتي متغير ذريعي.
پر اها ڳالهه نوٽ ڪرڻ جي قابل آهي ته اهڙا به وڌيڪ پيچيده منصوبا آهن جن ۾ ڪيترائي راز شامل ٿي سگهن ٿا؛ انهن سڀني کي ماحولياتي تبديلين ذريعي منتقل ڪرڻ انتهائي مشڪل هوندو.
ان کان علاوه، هن معاملي ۾، مان توهان کي اهڙي شاندار اوزار جي باري ۾ نه ٻڌايان ها git-crypt.
git-crypt اهو پڻ آسان آهي ته اهو توهان کي رازن جي پوري تاريخ کي محفوظ ڪرڻ جي اجازت ڏئي ٿو، انهي سان گڏ مقابلو ڪرڻ، ضم ڪرڻ ۽ تڪرار کي حل ڪرڻ جي ساڳئي طرح جيئن اسان گٽ جي صورت ۾ ڪرڻ لاء استعمال ڪيو ويو آهي.
انسٽاليشن کان پوء پهرين شيء git-crypt اسان کي اسان جي مخزن لاء چابيون پيدا ڪرڻ جي ضرورت آهي:
git crypt init
جيڪڏهن توهان وٽ آهي PGP ڪي، ته پوءِ توهان فوري طور تي پاڻ کي هن منصوبي لاءِ هڪ مددگار طور شامل ڪري سگهو ٿا:
هن طريقي سان توهان هميشه هن مخزن کي پنهنجي پرائيويٽ ڪنجي استعمال ڪندي ڊيڪرپٽ ڪري سگهو ٿا.
جيڪڏهن توهان وٽ پي جي پي ڪيچ نه آهي ۽ ان جي توقع نه ڪريو، ته پوءِ توهان ٻئي طريقي سان وڃو ۽ پروجيڪٽ جي چاٻي کي برآمد ڪري سگهو ٿا:
git crypt export-key /path/to/keyfile
اهڙيء طرح، جيڪو به هڪ برآمد ڪيو آهي ڪي فائل توهان جي مخزن کي ڊسڪريٽ ڪرڻ جي قابل هوندو.
اهو اسان جو پهريون راز قائم ڪرڻ جو وقت آهي.
مون کي توهان کي ياد ڏيارڻ ڏيو ته اسان اڃا تائين ڊاريڪٽري ۾ آهيون deploy/gitlab-runner/, где у нас имеется директория راز/، اچو ته ان ۾ موجود سڀني فائلن کي انڪرپٽ ڪريون، ان لاءِ اسان هڪ فائيل ٺاهينداسين راز/.gitattributes هيٺين مواد سان:
آئوٽ پٽ ريپوزٽري ۾ موجود سڀني فائلن جي هڪ فهرست هوندي جنهن لاءِ انڪرپشن فعال ٿيل آهي
اهو سڀ ڪجهه آهي، هاڻي اسان محفوظ طور تي اسان جي تبديلين کي انجام ڏئي سگهون ٿا:
cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"
مخزن کي بلاڪ ڪرڻ لاءِ، بس ھلايو:
git crypt lock
۽ فوري طور تي سڀئي اينڪرپٽ فائلون بائنري شيء ۾ تبديل ٿي وينديون، انهن کي پڙهڻ ناممڪن ٿي ويندو.
مخزن کي ختم ڪرڻ لاءِ، ھلايو:
git crypt unlock
8. ٽول باڪس جي تصوير ٺاھيو
هڪ ٽول باڪس تصوير سڀني اوزارن سان گڏ هڪ تصوير آهي جيڪا اسان پنهنجي پروجيڪٽ کي ترتيب ڏيڻ لاءِ استعمال ڪنداسين. اهو استعمال ڪيو ويندو Gitlab رنر پاران عام لڳائڻ جي ڪمن کي انجام ڏيڻ لاء.
FROM alpine:3.11
RUN apk add --no-cache git git-crypt
RUN QBEC_VER=0.10.3
&& wget -O- https://github.com/splunk/qbec/releases/download/v${QBEC_VER}/qbec-linux-amd64.tar.gz
| tar -C /tmp -xzf -
&& mv /tmp/qbec /tmp/jsonnet-qbec /usr/local/bin/
RUN KUBECTL_VER=1.17.0
&& wget -O /usr/local/bin/kubectl
https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/linux/amd64/kubectl
&& chmod +x /usr/local/bin/kubectl
RUN HELM_VER=3.0.2
&& wget -O- https://get.helm.sh/helm-v${HELM_VER}-linux-amd64.tar.gz
| tar -C /tmp -zxf -
&& mv /tmp/linux-amd64/helm /usr/local/bin/helm
جئين توهان ڏسي سگهو ٿا، هن تصوير ۾ اسان سڀني افاديت کي انسٽال ڪريون ٿا جيڪي اسان اسان جي ايپليڪيشن کي ترتيب ڏيڻ لاء استعمال ڪندا هئا. اسان کي هتي ان جي ضرورت نه آهي جيستائين ڪيوبڪبل، پر توھان شايد ان سان گڏ راند ڪرڻ چاھيو ٿا پائپ لائن سيٽ اپ واري مرحلي دوران.
انهي سان گڏ، ڪبرنيٽس سان رابطو ڪرڻ ۽ ان کي ترتيب ڏيڻ جي قابل ٿيڻ لاء، اسان کي گٽليب-رنر پاران ٺاهيل پوڊ لاء ڪردار ترتيب ڏيڻ جي ضرورت آهي.
مهرباني ڪري نوٽ ڪريو ته اسان استعمال ڪندا آهيون GIT_SUBMODULE_STRATEGY: عام انهن نوڪرين لاءِ جتي توهان کي عمل ڪرڻ کان پهريان واضح طور تي ذيلي ماڊل شروع ڪرڻ جي ضرورت آهي.
منهنجو خيال آهي ته اسان محفوظ طور تي هن نسخي کي سڏي سگهون ٿا v0.0.1 ۽ ٽيگ شامل ڪريو:
git tag v0.0.1
اسان ٽيگ شامل ڪنداسين جڏهن به اسان کي نئون نسخو ڇڏڻ جي ضرورت پوندي. Docker تصويرن ۾ ٽيگ Git ٽيگ سان ڳنڍيل هوندا. نئين ٽيگ سان هر هڪ ڌڪ هن ٽيگ سان تصويرن جي تعمير جي شروعات ڪندو.
اچو ته اهو ڪريون git push --tags، ۽ اچو ته اسان جي پهرين پائپ لائن کي ڏسو:
پهرين پائپ لائن جو اسڪرين شاٽ
اهو توهان جي ڌيان ڏانهن ڌيان ڏيڻ جي قابل آهي ته ٽيگ ذريعي اسيمبلي ڊاکر تصويرون ٺاهڻ لاء مناسب آهي، پر ڪوبرنيٽس تي ايپليڪيشن کي ترتيب ڏيڻ لاء مناسب ناهي. جيئن ته نوان ٽيگ پراڻي ڪمن کي تفويض ڪري سگھجن ٿيون، ان صورت ۾، ان لاءِ پائپ لائن کي شروع ڪرڻ سان پراڻي ورزن جي مقرري ٿيندي.
هن مسئلي کي حل ڪرڻ لاء، عام طور تي ڊاکر تصويرن جي تعمير کي ٽيگ سان ڳنڍيو ويندو آهي، ۽ ايپليڪيشن کي هڪ برانچ ۾ لڳائڻ. رکن ٿا، جنهن ۾ گڏ ڪيل تصويرن جا نسخا هارڊ ڪوڊ ٿيل آهن. اهو آهي جتي توهان هڪ سادي واپسي سان رول بيڪ شروع ڪري سگهو ٿا رکن ٿا- شاخون.
10. لڳائڻ جي خودڪار
Gitlab-رنر لاءِ اسان جي رازن کي ختم ڪرڻ لاءِ، اسان کي ريپوزٽري چيڪ کي برآمد ڪرڻ ۽ ان کي اسان جي سي آءِ ماحوليات ۾ شامل ڪرڻ جي ضرورت پوندي.
عام طور تي، مٿي بيان ڪيل مرحلا تقريبن ڪنهن به مائڪرو سروس کي ٺاهڻ ۽ پهچائڻ لاءِ ڪافي آهن، پر اسان نه ٿا چاهيون ته ٽيگ شامل ڪرڻ هر وقت اسان کي سائيٽ کي اپڊيٽ ڪرڻ جي ضرورت آهي. تنهن ڪري، اسان هڪ وڌيڪ متحرڪ رستو وٺي سگهنداسين ۽ ماسٽر برانچ ۾ ڊائجسٽ جي تعیناتي قائم ڪنداسين.
خيال سادو آهي: هاڻي اسان جي تصوير ويب سائيٽ هر وقت ٻيهر تعمير ڪيو ويندو جڏهن توهان داخل ڪيو رکن ٿا، ۽ پوءِ خودڪار طور تي ڪبرنيٽس ڏانھن ترتيب ڏيو.
اچو ته انهن ٻن نوڪرين کي تازه ڪاري ڪريون اسان جي gitlab-ci.yml:
مهرباني ڪري نوٽ ڪريو ته اسان هڪ موضوع شامل ڪيو آهي رکن ٿا к حوالو نوڪريون لاء build_website ۽ اسان هاڻي استعمال ڪريون ٿا $CI_COMMIT_REF_NAME بدران بدران $CI_COMMIT_TAG، اهو آهي، اسان گٽ ۾ ٽيگ مان نڪتل آهيون ۽ هاڻي اسان هڪ تصوير کي دٻائي ڇڏينداسين ڪمٽ برانچ جي نالي سان جيڪا پائپ لائن جي شروعات ڪئي. اهو نوٽ ڪرڻ جي قابل آهي ته اهو پڻ ٽيگ سان ڪم ڪندو، جيڪو اسان کي اجازت ڏيندو سائيٽ جي سنيپ شاٽ کي محفوظ ڪرڻ جي مخصوص ورزن سان ڊاکر-رجسٽري ۾.
جڏهن سائيٽ جي نئين ورزن لاءِ ڊاکر ٽيگ جو نالو تبديل نه ٿي سگهي ٿو، اسان کي اڃا تائين ڪبرنيٽس ۾ تبديلين کي بيان ڪرڻو پوندو، ٻي صورت ۾ اهو صرف نئين تصوير مان ايپليڪيشن کي ٻيهر بحال نه ڪندو، ڇاڪاڻ ته اهو ڪنهن به تبديلي کي نوٽيس نه ڪندو. تعیناتي پڌرو.
اختيار -vm: ext-str هضم = "$ DIGEST" qbec لاءِ - توهان کي jsonnet ڏانهن هڪ خارجي متغير منتقل ڪرڻ جي اجازت ڏئي ٿي. اسان چاهيون ٿا ته اهو اسان جي ايپليڪيشن جي هر رليز سان گڏ ڪلستر ۾ ٻيهر بحال ڪيو وڃي. اسان هاڻي ٽيگ جو نالو استعمال نٿا ڪري سگهون، جيڪو هاڻي تبديل نه ٿي سگهي، ڇو ته اسان کي تصوير جي مخصوص ورزن سان ڳنڍڻ جي ضرورت آهي ۽ ان کي تبديل ڪرڻ جي صورت ۾ ترتيب ڏيڻ جي ضرورت آهي.
هتي اسان کي مدد ڪئي ويندي Kaniko جي قابليت سان هڪ ڊائجسٽ تصوير کي فائل ۾ محفوظ ڪرڻ (اختيار --digest-file)
ان کان پوء اسان هن فائل کي منتقل ڪنداسين ۽ ان کي ترتيب ڏيڻ جي وقت تي پڙهي سگهنداسين.
اچو ته اسان جي پيٽرولن کي اپڊيٽ ڪريو deploy/website/environments/base.libsonnet جيڪو هاڻي هن طرح نظر ايندو:
ٿي ويو، هاڻي ڪو به ڪم ۾ رکن ٿا ڊاکر تصوير جي تعمير کي شروع ڪري ٿو ويب سائيٽ، ۽ پوء ان کي ترتيب ڏيو Kubernetes.
اسان جي تبديلين کي انجام ڏيڻ نه وساريو:
git add .
git commit -m "Configure dynamic build"
اسان بعد ۾ چيڪ ڪنداسين گٽ پٽي اسان کي هن وانگر ڪجهه ڏسڻ گهرجي:
ماسٽر لاء پائپ لائن جو اسڪرين شاٽ
اصولي طور تي، اسان کي هر پش سان گٽليب رنر کي ٻيهر ترتيب ڏيڻ جي ضرورت ناهي، جيستائين، يقينا، ان جي ترتيب ۾ ڪجھ به تبديل نه ٿيو آهي، اچو ته ان کي درست ڪريون. gitlab-ci.yml:
اهو وقت آهي اسان جي پائپ لائن کي متحرڪ ماحول سان متنوع ڪرڻ.
پهرين، اچو ته نوڪري کي اپڊيٽ ڪريو build_website اسان ۾ gitlab-ci.yml، ان مان بلاڪ هٽائڻ صرف، جيڪو Gitlab کي مجبور ڪندو ته ان کي ڪنهن به شاخ تي ڪنهن به عزم تي ٽاريندو:
اهي ماسٽر کان سواءِ ڪنهن به شاخ ڏانهن ڌڪڻ تي شروع ڪيا ويندا ۽ سائيٽ جي ڏيک واري ورزن کي ترتيب ڏيندو.
اسان qbec لاءِ هڪ نئون آپشن ڏسون ٿا: --app-tag - اهو توهان کي اجازت ڏئي ٿو ته ايپليڪيشن جي ترتيب ڏنل ورجن کي ٽيگ ڪرڻ ۽ صرف هن ٽيگ جي اندر ڪم ڪرڻ؛ جڏهن Kubernetes ۾ وسيلن کي ٺاهڻ ۽ تباهه ڪرڻ، qbec صرف انهن سان ڪم ڪندو.
اهڙيءَ طرح اسان هر جائزي لاءِ الڳ ماحول پيدا نٿا ڪري سگهون، پر صرف هڪ ئي کي ٻيهر استعمال ڪري سگهون ٿا.
هتي اسان پڻ استعمال ڪندا آهيون qbec لاڳو جائزو، جي بدران qbec لاڳو ڪريو ڊفالٽ - اھو اھو ئي لمحو آھي جڏھن اسان پنھنجي ماحول جي فرق کي بيان ڪرڻ جي ڪوشش ڪنداسين (جائزو ۽ ڊفالٽ):
اچو ته شامل ڪريون جو جائزو ماحول ۾ deploy/website/qbec.yaml
پوء اسان ان ۾ اعلان ڪنداسين deploy/website/params.libsonnet:
local env = std.extVar('qbec.io/env');
local paramsMap = {
_: import './environments/base.libsonnet',
default: import './environments/default.libsonnet',
review: import './environments/review.libsonnet',
};
if std.objectHas(paramsMap, env) then paramsMap[env] else error 'environment ' + env + ' not defined in ' + std.thisFile
۽ ان لاءِ ڪسٽم پيٽرولر لکو deploy/website/environments/review.libsonnet:
// this file has the param overrides for the default environment
local base = import './base.libsonnet';
local slug = std.extVar('qbec.io/tag');
local subdomain = std.extVar('subdomain');
base {
components+: {
website+: {
name: 'example-docs-' + slug,
domain: subdomain + '.docs.example.org',
},
},
}
اچو ته نوڪريء تي هڪ ويجهي نظر رکون stop_review، اهو شروع ڪيو ويندو جڏهن برانچ ختم ٿي ويندي آهي ۽ انهي ڪري ته gitlab چيڪ ڪرڻ جي ڪوشش نه ڪندو آهي ان کي استعمال ڪيو ويندو آهي GIT_STRATEGY: ڪو به نه، بعد ۾ اسان کلون رکن ٿا- برانچ ۽ ان جي ذريعي جائزو حذف ڪريو.
اهو ٿورڙو مونجهارو آهي، پر مون کي اڃا تائين وڌيڪ خوبصورت رستو نه مليو آهي.
هڪ متبادل اختيار هوندو ته هر جائزي کي هوٽل جي نالي جي جاءِ تي لڳايو وڃي، جنهن کي هميشه مڪمل طور ڊاهي سگهجي ٿو.
سڀ ڪجهه ڪم ڪري رهيو آهي؟ - عظيم، اسان جي ٽيسٽ شاخ کي ختم ڪريو: گٽ جانچ ماسٽر, git push origin: test، اسان چيڪ ڪريون ٿا ته ماحول کي ختم ڪرڻ واريون نوڪريون بغير ڪنهن غلطي جي ڪم ڪيون.
Здесь сразу хочется уточнить, что создавать ветки может любой девелопер в проекте, он также может изменить gitlab-ci.yml فائل ۽ رسائي رازداري متغير.
تنهن ڪري، ان کي سختي سان سفارش ڪئي وئي آهي ته انهن جي استعمال کي صرف محفوظ شاخن لاء، مثال طور، ۾ رکن ٿا، يا هر ماحول لاءِ متغيرن جو هڪ الڳ سيٽ ٺاهيو.
13. ائپس جو جائزو وٺو
ائپس جو جائزو وٺو هي هڪ GitLab خاصيت آهي جيڪا توهان کي مخزن ۾ هر فائل لاءِ هڪ بٽڻ شامل ڪرڻ جي اجازت ڏئي ٿي ان کي جلدي طور تي ترتيب ڏنل ماحول ۾ ڏسڻ لاءِ.
انهن بٽڻن کي ظاهر ڪرڻ لاء، توهان کي هڪ فائل ٺاهڻ جي ضرورت آهي .gitlab/route-map.yml ۽ ان ۾ سڀني رستي جي تبديلين کي بيان ڪريو؛ اسان جي صورت ۾ اهو تمام سادو هوندو: