ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

یہ سب اس وقت شروع ہوا جب ہماری ترقیاتی ٹیموں میں سے ایک کی ٹیم لیڈ نے ہم سے اپنی نئی درخواست کی جانچ کرنے کو کہا، جو ایک دن پہلے کنٹینرائز کی گئی تھی۔ میں نے اسے پوسٹ کیا۔ تقریباً 20 منٹ کے بعد درخواست کو اپ ڈیٹ کرنے کی درخواست موصول ہوئی، کیونکہ وہاں ایک بہت ضروری چیز شامل کی گئی تھی۔ میں نے تجدید کی۔ مزید دو گھنٹے بعد... ٹھیک ہے، آپ اندازہ لگا سکتے ہیں کہ آگے کیا ہونا شروع ہوا...

مجھے تسلیم کرنا چاہیے، میں کافی سست ہوں (کیا میں نے پہلے یہ تسلیم نہیں کیا تھا؟ نہیں؟)، اور اس حقیقت کو دیکھتے ہوئے کہ ٹیم لیڈز کو جینکنز تک رسائی حاصل ہے، جس میں ہمارے پاس تمام CI/CD ہے، میں نے سوچا: اسے بطور تعینات کرنے دیں۔ جتنا وہ چاہتا ہے! مجھے ایک لطیفہ یاد آیا: ایک آدمی کو مچھلی دو اور وہ ایک دن کھائے گا۔ ایک شخص کو فیڈ کہو اور وہ ساری زندگی فیڈ رہے گا۔ اور چلا گیا۔ کام پر چالیں کھیلیں، جو ایک کنٹینر تعینات کرنے کے قابل ہو گا جس میں کسی بھی کامیابی کے ساتھ بنائے گئے ورژن کی ایپلی کیشن کوبر میں شامل ہو اور اس میں کوئی بھی قدریں منتقل کر سکیں۔ این وی (میرے دادا، ایک ماہرِ فلکیات، ماضی میں انگریزی کے استاد، اب اس جملے کو پڑھنے کے بعد اپنی انگلی اپنے مندر پر گھماتے اور میری طرف بہت تاثرات سے دیکھتے)۔

تو، اس نوٹ میں میں آپ کو بتاؤں گا کہ میں نے کیسے سیکھا:

  1. متحرک طور پر جینکنز میں ملازمتوں کو خود ملازمت سے یا دوسری ملازمتوں سے اپ ڈیٹ کریں۔
  2. جینکنز ایجنٹ کے ساتھ ایک نوڈ سے کلاؤڈ کنسول (کلاؤڈ شیل) سے جڑیں؛
  3. Google Kubernetes Engine پر کام کا بوجھ متعین کریں۔


درحقیقت، میں، یقیناً، کسی حد تک غیرجانبدار ہوں۔ یہ فرض کیا جاتا ہے کہ آپ کے پاس گوگل کلاؤڈ میں انفراسٹرکچر کا کم از کم کچھ حصہ ہے، اور اس وجہ سے، آپ اس کے صارف ہیں اور یقیناً آپ کے پاس ایک GCP اکاؤنٹ ہے۔ لیکن یہ اس نوٹ کے بارے میں نہیں ہے۔

یہ میری اگلی چیٹ شیٹ ہے۔ میں صرف ایک صورت میں اس طرح کے نوٹس لکھنا چاہتا ہوں: مجھے ایک مسئلہ درپیش تھا، میں شروع میں نہیں جانتا تھا کہ اسے کیسے حل کیا جائے، اس کا حل گوگل پر ریڈی میڈ نہیں تھا، اس لیے میں نے اسے حصوں میں گوگل کیا اور بالآخر مسئلہ حل ہوگیا۔ اور تاکہ مستقبل میں، جب میں بھول جاؤں کہ میں نے یہ کیسے کیا، تو مجھے ہر چیز کو دوبارہ گوگل کرنے کی ضرورت نہیں ہے اور اسے ایک ساتھ مرتب کرنے کی ضرورت نہیں ہے، میں اپنے آپ کو ایسی دھوکہ دہی کی شیٹس لکھتا ہوں۔

ڈس کلیمر: 1. نوٹ "میرے لیے"، کردار کے لیے لکھا گیا تھا۔ بہترین پریکٹس لاگو نہیں ہوتا. مجھے تبصرے میں "اس طرح کرنا بہتر ہوتا" کے اختیارات پڑھ کر خوشی ہوئی۔
2. اگر نوٹ کے لگائے گئے حصے کو نمک سمجھا جاتا ہے، تو، میرے تمام پچھلے نوٹوں کی طرح، یہ ایک کمزور نمک حل ہے۔

جینکنز میں کام کی ترتیبات کو متحرک طور پر اپ ڈیٹ کرنا

میں آپ کے سوال کی پیش گوئی کر رہا ہوں: متحرک ملازمت کی تازہ کاری کا اس سے کیا تعلق ہے؟ سٹرنگ پیرامیٹر کی قدر دستی طور پر درج کریں اور آپ جائیں!

میں جواب دیتا ہوں: میں واقعی سست ہوں، جب وہ شکایت کرتے ہیں تو مجھے یہ پسند نہیں: میشا، تعیناتی کریش ہو رہی ہے، سب کچھ ختم ہو گیا ہے! آپ دیکھنا شروع کرتے ہیں، اور کچھ ٹاسک لانچ پیرامیٹر کی قدر میں ٹائپنگ کی غلطی ہے۔ لہذا، میں ہر ممکن حد تک مؤثر طریقے سے کرنے کو ترجیح دیتا ہوں۔ اگر منتخب کرنے کے لیے قدروں کی فہرست دے کر صارف کو براہ راست ڈیٹا داخل کرنے سے روکنا ممکن ہو، تو میں انتخاب کو منظم کرتا ہوں۔

منصوبہ یہ ہے: ہم جینکنز میں ایک جاب بناتے ہیں، جس میں، لانچ کرنے سے پہلے، ہم فہرست سے ایک ورژن منتخب کر سکتے ہیں، کنٹینر کو بھیجے گئے پیرامیٹرز کے لیے قدریں بتا سکتے ہیں۔ این وی، پھر یہ کنٹینر کو جمع کرتا ہے اور اسے کنٹینر رجسٹری میں دھکیل دیتا ہے۔ پھر وہاں سے کنٹینر کو کیوبر کے طور پر لانچ کیا جاتا ہے۔ کام کا بوجھ کام میں بیان کردہ پیرامیٹرز کے ساتھ۔

ہم جینکنز میں نوکری بنانے اور قائم کرنے کے عمل پر غور نہیں کریں گے، یہ موضوع سے ہٹ کر ہے۔ ہم فرض کریں گے کہ کام تیار ہے۔ ورژن کے ساتھ اپ ڈیٹ شدہ فہرست کو لاگو کرنے کے لیے، ہمیں دو چیزوں کی ضرورت ہے: ایک موجودہ ماخذ کی فہرست جس میں پہلے سے درست ورژن نمبر اور ایک متغیر جیسے انتخاب کا پیرامیٹر کام میں. ہماری مثال میں، متغیر کا نام دیا جائے۔ BUILD_VERSION، ہم اس پر تفصیل سے غور نہیں کریں گے۔ لیکن آئیے ماخذ کی فہرست کو قریب سے دیکھیں۔

اتنے زیادہ اختیارات نہیں ہیں۔ دو باتیں فوراً ذہن میں آئیں:

  • ریموٹ ایکسیس API کا استعمال کریں جو جینکنز اپنے صارفین کو پیش کرتا ہے۔
  • ریموٹ ریپوزٹری فولڈر کے مواد کی درخواست کریں (ہمارے معاملے میں یہ JFrog Artifactory ہے، جو اہم نہیں ہے)۔

جینکنز ریموٹ ایکسیس API

قائم کردہ عمدہ روایت کے مطابق، میں طویل وضاحتوں سے گریز کرنا پسند کروں گا۔
میں اپنے آپ کو صرف پہلے پیراگراف کے ایک ٹکڑے کا مفت ترجمہ کرنے کی اجازت دوں گا۔ API دستاویزات کا پہلا صفحہ:

جینکنز اپنی فعالیت تک ریموٹ مشین سے پڑھنے کے قابل رسائی کے لیے ایک API فراہم کرتا ہے۔ <…> ریموٹ رسائی ایک REST جیسے انداز میں پیش کی جاتی ہے۔ اس کا مطلب ہے کہ تمام فیچرز کے لیے کوئی واحد انٹری پوائنٹ نہیں ہے، بلکہ اس کے بجائے ایک URL جیسا کہ ".../api/"، کہاں "..." کا مطلب ہے وہ آبجیکٹ جس پر API کی صلاحیتوں کا اطلاق ہوتا ہے۔

دوسرے الفاظ میں، اگر تعیناتی کا کام جس کے بارے میں ہم فی الحال بات کر رہے ہیں وہ دستیاب ہے۔ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build، پھر اس کام کے لیے API سیٹیاں دستیاب ہیں۔ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

اگلا، ہمارے پاس انتخاب ہے کہ کس شکل میں آؤٹ پٹ حاصل کرنا ہے۔ آئیے XML پر توجہ مرکوز کریں، کیونکہ API صرف اس معاملے میں فلٹرنگ کی اجازت دیتا ہے۔

آئیے صرف تمام نوکریوں کی فہرست حاصل کرنے کی کوشش کرتے ہیں۔ ہمیں صرف اسمبلی کے نام میں دلچسپی ہے (ڈسپلے نام) اور اس کا نتیجہ (نتیجہ):

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]

ہوا۔

اب صرف ان رنز کو فلٹر کریں جو نتیجہ کے ساتھ ختم ہوں۔ کامیابی. آئیے دلیل کا استعمال کریں۔ &خارج اور ایک پیرامیٹر کے طور پر ہم اسے اس قدر کی طرف لے جائیں گے جس کے برابر نہیں ہے۔ کامیابی. ہاں ہاں. ایک ڈبل منفی ایک بیان ہے۔ ہم ہر اس چیز کو خارج کرتے ہیں جو ہماری دلچسپی نہیں رکھتی ہے:

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!='SUCCESS']

کامیاب کی فہرست کا اسکرین شاٹ
ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

ٹھیک ہے، صرف تفریح ​​کے لیے، آئیے اس بات کو یقینی بنائیں کہ فلٹر نے ہمیں دھوکہ نہیں دیا (فلٹر کبھی جھوٹ نہیں بولتے!) اور "ناکام" کی فہرست دکھائیں:

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result='SUCCESS']

غیر کامیاب افراد کی فہرست کا اسکرین شاٹ
ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

ریموٹ سرور پر فولڈر سے ورژن کی فہرست

ورژن کی فہرست حاصل کرنے کا دوسرا طریقہ ہے۔ مجھے یہ جینکنز API تک رسائی حاصل کرنے سے بھی زیادہ پسند ہے۔ ٹھیک ہے، کیونکہ اگر ایپلی کیشن کامیابی کے ساتھ بنائی گئی تھی، تو اس کا مطلب ہے کہ اسے پیک کیا گیا تھا اور مناسب فولڈر میں ریپوزٹری میں رکھا گیا تھا۔ جیسے، ریپوزٹری ایپلی کیشنز کے ورکنگ ورژنز کا ڈیفالٹ اسٹوریج ہے۔ پسند ٹھیک ہے، آئیے اس سے پوچھیں کہ اسٹوریج میں کون سے ورژن ہیں۔ ہم ریموٹ فولڈر کو curl، grep اور awk کریں گے۔ اگر کوئی ون لائنر میں دلچسپی رکھتا ہے، تو یہ بگاڑنے والے کے نیچے ہے۔

ایک لائن کمانڈ
براہ کرم دو چیزیں نوٹ کریں: میں ہیڈر میں کنکشن کی تفصیلات پاس کرتا ہوں اور مجھے فولڈر کے تمام ورژنز کی ضرورت نہیں ہے، اور میں صرف وہی منتخب کرتا ہوں جو ایک مہینے کے اندر بنائے گئے تھے۔ اپنی حقیقتوں اور ضروریات کے مطابق کمانڈ میں ترمیم کریں:

curl -H "X-JFrog-Art-Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

جینکنز میں جاب اور جاب کنفیگریشن فائل ترتیب دینا

ہم نے ورژن کی فہرست کا ماخذ معلوم کیا۔ آئیے اب نتیجے کی فہرست کو کام میں شامل کرتے ہیں۔ میرے لئے، واضح حل یہ تھا کہ ایپلی کیشن بنانے کے کام میں ایک قدم شامل کیا جائے۔ وہ قدم جس پر عمل کیا جائے گا اگر نتیجہ "کامیابی" تھا۔

اسمبلی ٹاسک کی ترتیبات کھولیں اور بالکل نیچے تک سکرول کریں۔ بٹنوں پر کلک کریں: تعمیراتی قدم شامل کریں -> مشروط قدم (واحد). مرحلہ وار ترتیبات میں، شرط کو منتخب کریں۔ موجودہ تعمیر کی حیثیت، قدر مقرر کریں۔ کامیابیکامیاب ہونے کی صورت میں کی جانے والی کارروائی شیل کمانڈ چلائیں۔.

اور اب تفریحی حصہ۔ جینکنز ملازمت کی ترتیب کو فائلوں میں محفوظ کرتا ہے۔ XML فارمیٹ میں۔ راستے میں http://путь-до-задания/config.xml اس کے مطابق، آپ کنفیگریشن فائل کو ڈاؤن لوڈ کر سکتے ہیں، ضرورت کے مطابق اس میں ترمیم کر سکتے ہیں اور جہاں آپ کو ملی ہے اسے واپس رکھ سکتے ہیں۔

یاد رکھیں، ہم نے اوپر اتفاق کیا تھا کہ ہم ورژن کی فہرست کے لیے ایک پیرامیٹر بنائیں گے۔ BUILD_VERSION?

آئیے کنفیگریشن فائل کو ڈاؤن لوڈ کریں اور اس کے اندر ایک نظر ڈالیں۔ بس یہ یقینی بنانے کے لیے کہ پیرامیٹر اپنی جگہ اور مطلوبہ قسم کا ہے۔

اسپائلر کے نیچے اسکرین شاٹ۔

آپ کا config.xml ٹکڑا ایک جیسا نظر آنا چاہیے۔ سوائے اس کے کہ انتخابی عنصر کے مندرجات ابھی غائب ہیں۔
ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

کیا تمہیں یقین ہے؟ بس، آئیے ایک اسکرپٹ لکھتے ہیں جو تعمیر کامیاب ہونے پر عمل میں لایا جائے گا۔
اسکرپٹ کو ورژنز کی فہرست ملے گی، کنفیگریشن فائل ڈاؤن لوڈ کرے گی، اس میں ورژن کی فہرست اس جگہ پر لکھے گی جس کی ہمیں ضرورت ہے، اور پھر اسے واپس رکھ دیا جائے گا۔ جی ہاں. یہ ٹھیک ہے. XML میں ورژن کی فہرست اس جگہ لکھیں جہاں پہلے سے ہی ورژن کی فہرست موجود ہو (مستقبل میں، اسکرپٹ کے پہلے لانچ کے بعد)۔ میں جانتا ہوں کہ دنیا میں باقاعدہ اظہار کے شدید پرستار اب بھی موجود ہیں۔ میں ان سے تعلق نہیں رکھتا۔ براہ کرم انسٹال کریں۔ xmlstarler مشین میں جہاں کنفیگریشن میں ترمیم کی جائے گی۔ مجھے لگتا ہے کہ sed کا استعمال کرتے ہوئے XML میں ترمیم کرنے سے بچنے کے لیے یہ اتنی بڑی قیمت نہیں ہے۔

بگاڑنے والے کے تحت، میں وہ کوڈ پیش کرتا ہوں جو مندرجہ بالا ترتیب کو مکمل طور پر انجام دیتا ہے۔

ریموٹ سرور پر ایک فولڈر سے کنفگ میں ورژن کی فہرست لکھیں۔

#!/bin/bash
############## Скачиваем конфиг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## Удаляем и заново создаем xml-элемент для списка версий
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## Читаем в массив список версий из репозитория
readarray -t vers < <( curl -H "X-JFrog-Art-Api:Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

############## Пишем массив элемент за элементом в конфиг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## Кладем конфиг взад
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## Приводим рабочее место в порядок
rm -f appConfig.xml

اگر آپ جینکنز سے ورژن حاصل کرنے کے آپشن کو ترجیح دیتے ہیں اور آپ میری طرح سست ہیں، تو بگاڑنے والے کے نیچے وہی کوڈ ہے، لیکن جینکنز کی ایک فہرست:

جینکنز سے config تک ورژن کی فہرست لکھیں۔
بس اس بات کو ذہن میں رکھیں: میرا اسمبلی نام ایک ترتیب نمبر اور ایک ورژن نمبر پر مشتمل ہوتا ہے، جو بڑی آنت سے الگ ہوتا ہے۔ اس کے مطابق، awk غیر ضروری حصہ کو کاٹ دیتا ہے. اپنے لیے، اپنی ضروریات کے مطابق اس لائن کو تبدیل کریں۔

#!/bin/bash
############## Скачиваем конфиг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## Удаляем и заново создаем xml-элемент для списка версий
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## Пишем в файл список версий из Jenkins
curl -g -X GET -u username:apiKey 'http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!=%22SUCCESS%22]&pretty=true' -o builds.xml

############## Читаем в массив список версий из XML
readarray vers < <(xmlstarlet sel -t -v "freeStyleProject/allBuild/displayName" builds.xml | awk -F":" '{print $2}')

############## Пишем массив элемент за элементом в конфиг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## Кладем конфиг взад
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## Приводим рабочее место в порядок
rm -f appConfig.xml

نظریہ میں، اگر آپ نے اوپر دی گئی مثالوں کی بنیاد پر لکھے گئے کوڈ کی جانچ کی ہے، تو پھر تعیناتی کام میں آپ کے پاس پہلے سے ہی ورژن کے ساتھ ڈراپ ڈاؤن فہرست ہونی چاہیے۔ یہ سپائلر کے نیچے اسکرین شاٹ کی طرح ہے۔

ورژن کی درست طریقے سے مکمل فہرست
ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

اگر سب کچھ کام کرتا ہے، تو اسکرپٹ کو کاپی پیسٹ کریں۔ شیل کمانڈ چلائیں۔ اور تبدیلیاں محفوظ کریں۔

کلاؤڈ شیل سے منسلک ہو رہا ہے۔

ہمارے پاس کنٹینرز میں جمع کرنے والے ہیں۔ ہم Ansible کو اپنے ایپلیکیشن ڈیلیوری ٹول اور کنفیگریشن مینیجر کے طور پر استعمال کرتے ہیں۔ اسی مناسبت سے، جب کنٹینرز بنانے کی بات آتی ہے، تو تین آپشن ذہن میں آتے ہیں: Docker میں Docker انسٹال کریں، Ansible چلانے والی مشین پر Docker انسٹال کریں، یا کلاؤڈ کنسول میں کنٹینرز بنائیں۔ ہم نے اس مضمون میں جینکنز کے پلگ ان کے بارے میں خاموش رہنے پر اتفاق کیا۔ یاد ہے؟

میں نے فیصلہ کیا: ٹھیک ہے، چونکہ کلاؤڈ کنسول میں کنٹینرز "باکس سے باہر" جمع کیے جا سکتے ہیں، تو پھر پریشان کیوں؟ اسے صاف رکھیں، ٹھیک ہے؟ میں کلاؤڈ کنسول میں جینکنز کنٹینرز کو جمع کرنا چاہتا ہوں، اور پھر انہیں وہاں سے کیوبر میں لانچ کرنا چاہتا ہوں۔ مزید برآں، گوگل کے اپنے بنیادی ڈھانچے میں بہت امیر چینلز ہیں، جو تعیناتی کی رفتار پر فائدہ مند اثر ڈالیں گے۔

کلاؤڈ کنسول سے جڑنے کے لیے، آپ کو دو چیزوں کی ضرورت ہے: gcloud اور تک رسائی کے حقوق گوگل کلاؤڈ API VM مثال کے لیے جس کے ساتھ یہی کنکشن بنایا جائے گا۔

ان لوگوں کے لیے جو گوگل کلاؤڈ سے جڑنے کا ارادہ رکھتے ہیں۔
Google اپنی خدمات میں انٹرایکٹو اجازت کو غیر فعال کرنے کے امکان کی اجازت دیتا ہے۔ یہ آپ کو کافی مشین سے بھی کنسول سے جڑنے کی اجازت دے گا، اگر یہ *nix چل رہی ہے اور خود کنسول ہے۔

اگر مجھے اس نوٹ کے فریم ورک میں مزید تفصیل سے اس مسئلے کا احاطہ کرنے کی ضرورت ہے، تو تبصرے میں لکھیں۔ اگر ہمیں کافی ووٹ ملتے ہیں، تو میں اس موضوع پر ایک اپ ڈیٹ لکھوں گا۔

حقوق دینے کا سب سے آسان طریقہ ویب انٹرفیس کے ذریعے ہے۔

  1. VM مثال کو روکیں جہاں سے آپ بعد میں کلاؤڈ کنسول سے جڑیں گے۔
  2. مثال کی تفصیلات کھولیں اور کلک کریں۔ ترمیم.
  3. صفحہ کے بالکل نیچے، مثال تک رسائی کا دائرہ منتخب کریں۔ تمام کلاؤڈ APIs تک مکمل رسائی.

    اسکرین شاٹ
    ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

  4. اپنی تبدیلیاں محفوظ کریں اور مثال شروع کریں۔

ایک بار جب VM لوڈنگ مکمل کر لے، SSH کے ذریعے اس سے جڑیں اور اس بات کو یقینی بنائیں کہ کنکشن بغیر کسی خرابی کے ہو۔ کمانڈ استعمال کریں:

gcloud alpha cloud-shell ssh

ایک کامیاب کنکشن کچھ اس طرح لگتا ہے۔
ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

GKE میں تعینات کریں۔

چونکہ ہم مکمل طور پر IaC (Infrastructure as a Code) پر جانے کے لیے ہر ممکن طریقے سے کوشش کر رہے ہیں، اس لیے ہماری ڈاکر فائلیں Git میں محفوظ ہیں۔ یہ ایک طرف ہے۔ اور kubernetes میں تعیناتی yaml فائل کے ذریعہ بیان کی گئی ہے، جو صرف اس کام کے ذریعہ استعمال ہوتی ہے، جو خود بھی کوڈ کی طرح ہے۔ یہ دوسری طرف سے ہے۔ عام طور پر، میرا مطلب ہے، منصوبہ یہ ہے:

  1. ہم متغیرات کی قدریں لیتے ہیں۔ BUILD_VERSION اور، اختیاری طور پر، متغیرات کی قدریں جو گزر جائیں گی۔ این وی.
  2. گٹ سے ڈاکر فائل ڈاؤن لوڈ کریں۔
  3. تعیناتی کے لیے یامل تیار کریں۔
  4. ہم ان دونوں فائلوں کو scp کے ذریعے کلاؤڈ کنسول پر اپ لوڈ کرتے ہیں۔
  5. ہم وہاں ایک کنٹینر بناتے ہیں اور اسے کنٹینر رجسٹری میں ڈالتے ہیں۔
  6. ہم لوڈ تعیناتی فائل کو کیوبر پر لگاتے ہیں۔

آئیے مزید مخصوص بنیں۔ ایک بار جب ہم نے بات شروع کی۔ این وی، پھر فرض کریں کہ ہمیں دو پیرامیٹرز کی اقدار کو پاس کرنے کی ضرورت ہے: PARAM1 и PARAM2. ہم ان کے کام کو تعیناتی کے لیے شامل کرتے ہیں، ٹائپ کریں - سٹرنگ پیرامیٹر.

اسکرین شاٹ
ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

ہم ایک سادہ ری ڈائریکشن کے ساتھ yaml بنائیں گے۔ یاد آتی ہے فائل کرنے کے لئے. یہ فرض کیا جاتا ہے، یقینا، آپ کے پاس آپ کی ڈاکر فائل میں ہے۔ PARAM1 и PARAM2کہ لوڈ کا نام ہوگا۔ awesomeapp، اور مخصوص ورژن کے اطلاق کے ساتھ جمع کنٹینر میں موجود ہے۔ کنٹینر رجسٹری راستے میں gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONجہاں $BUILD_VERSION ابھی ڈراپ ڈاؤن فہرست سے منتخب کیا گیا تھا۔

ٹیم کی فہرست

touch deploy.yaml
echo "apiVersion: apps/v1" >> deploy.yaml
echo "kind: Deployment" >> deploy.yaml
echo "metadata:" >> deploy.yaml
echo "  name: awesomeapp" >> deploy.yaml
echo "spec:" >> deploy.yaml
echo "  replicas: 1" >> deploy.yaml
echo "  selector:" >> deploy.yaml
echo "    matchLabels:" >> deploy.yaml
echo "      run: awesomeapp" >> deploy.yaml
echo "  template:" >> deploy.yaml
echo "    metadata:" >> deploy.yaml
echo "      labels:" >> deploy.yaml
echo "        run: awesomeapp" >> deploy.yaml
echo "    spec:" >> deploy.yaml
echo "      containers:" >> deploy.yaml
echo "      - name: awesomeapp" >> deploy.yaml
echo "        image: gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION:latest" >> deploy.yaml
echo "        env:" >> deploy.yaml
echo "        - name: PARAM1" >> deploy.yaml
echo "          value: $PARAM1" >> deploy.yaml
echo "        - name: PARAM2" >> deploy.yaml
echo "          value: $PARAM2" >> deploy.yaml

جینکنز ایجنٹ کا استعمال کرتے ہوئے جڑنے کے بعد gcloud الفا کلاؤڈ شیل ssh انٹرایکٹو موڈ دستیاب نہیں ہے، لہذا ہم پیرامیٹر کا استعمال کرتے ہوئے کلاؤڈ کنسول کو کمانڈ بھیجتے ہیں۔ --کمانڈ.

ہم کلاؤڈ کنسول میں ہوم فولڈر کو پرانی ڈاکر فائل سے صاف کرتے ہیں:

gcloud alpha cloud-shell ssh --command="rm -f Dockerfile"

تازہ ڈاؤن لوڈ کردہ ڈاکر فائل کو کلاؤڈ کنسول کے ہوم فولڈر میں scp کا استعمال کرتے ہوئے رکھیں:

gcloud alpha cloud-shell scp localhost:./Dockerfile cloudshell:~

ہم کنٹینر کو جمع، ٹیگ اور کنٹینر رجسٹری میں دھکیلتے ہیں:

gcloud alpha cloud-shell ssh --command="docker build -t awesomeapp-$BUILD_VERSION ./ --build-arg BUILD_VERSION=$BUILD_VERSION --no-cache"
gcloud alpha cloud-shell ssh --command="docker tag awesomeapp-$BUILD_VERSION gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"
gcloud alpha cloud-shell ssh --command="docker push gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"

ہم تعیناتی فائل کے ساتھ بھی ایسا ہی کرتے ہیں۔ براہ کرم نوٹ کریں کہ نیچے دی گئی کمانڈز کلسٹر کے فرضی نام استعمال کرتی ہیں جہاں تعیناتی ہوتی ہے (awsm-کلسٹر) اور پروجیکٹ کا نام (بہت اچھا پروجیکٹ)، جہاں کلسٹر واقع ہے۔

gcloud alpha cloud-shell ssh --command="rm -f deploy.yaml"
gcloud alpha cloud-shell scp localhost:./deploy.yaml cloudshell:~
gcloud alpha cloud-shell ssh --command="gcloud container clusters get-credentials awsm-cluster --zone us-central1-c --project awesome-project && 
kubectl apply -f deploy.yaml"

ہم کام چلاتے ہیں، کنسول آؤٹ پٹ کھولتے ہیں اور کنٹینر کی کامیاب اسمبلی کو دیکھنے کی امید کرتے ہیں۔

اسکرین شاٹ
ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

اور پھر اسمبل کنٹینر کی کامیاب تعیناتی۔

اسکرین شاٹ
ہم پلگ ان، ایس ایم ایس یا رجسٹریشن کے بغیر GKE میں تعیناتی کا کام بناتے ہیں۔ آئیے جینکنز کی جیکٹ کے نیچے جھانکیں۔

میں نے جان بوجھ کر ترتیب کو نظر انداز کیا۔ لاگ ان. ایک سادہ وجہ سے: ایک بار جب آپ اسے ترتیب دیں۔ کام کا بوجھ ایک دیئے گئے نام کے ساتھ، یہ فعال رہے گا، اس سے کوئی فرق نہیں پڑتا ہے کہ آپ اس نام کے ساتھ کتنی ہی تعیناتیاں کرتے ہیں۔ ٹھیک ہے، عام طور پر، یہ تاریخ کے دائرہ کار سے تھوڑا سا باہر ہے.

نتائج کے بجائے

مندرجہ بالا تمام اقدامات شاید نہیں کیے جا سکتے تھے، لیکن صرف جینکنز کے لیے کچھ پلگ ان انسٹال کیا، ان کے میولین۔ لیکن کسی وجہ سے مجھے پلگ ان پسند نہیں ہیں۔ ٹھیک ہے، زیادہ واضح طور پر، میں صرف مایوسی سے ان کا سہارا لیتا ہوں۔

اور میں صرف اپنے لیے کچھ نیا موضوع اٹھانا پسند کرتا ہوں۔ اوپر کا متن ان نتائج کو شیئر کرنے کا ایک طریقہ بھی ہے جو میں نے شروع میں بیان کردہ مسئلے کو حل کرتے ہوئے کیا تھا۔ ان لوگوں کے ساتھ شئیر کریں جو اس کی طرح ڈیوپس میں بالکل بھیڑیا نہیں ہیں۔ اگر میری تلاش کم از کم کسی کی مدد کرے تو مجھے خوشی ہوگی۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں