اسان پلگ ان، ايس ايم ايس يا رجسٽريشن کان سواءِ GKE ۾ ڊيپلائيمينٽ ٽاسڪ ٺاهيندا آهيون. اچو ته جينڪنز جي جيڪٽ هيٺان هڪ نظر وٺو

اهو سڀ تڏهن شروع ٿيو جڏهن اسان جي هڪ ترقياتي ٽيمن جي ٽيم جي اڳواڻي اسان کي پنهنجي نئين ايپليڪيشن کي جانچڻ لاءِ چيو، جيڪو هڪ ڏينهن اڳ ڪنٽينر ڪيو ويو هو. مون ان کي پوسٽ ڪيو. اٽڪل 20 منٽن کان پوء، ايپليڪيشن کي اپڊيٽ ڪرڻ جي درخواست ملي، ڇاڪاڻ ته اتي هڪ تمام ضروري شيء شامل ڪئي وئي هئي. مون تجديد ڪيو. ٻن ڪلاڪن کان پوءِ... خير، توهان اندازو لڳائي سگهو ٿا ته اڳتي ڇا ٿيڻو آهي...

مون کي تسليم ڪرڻ گهرجي، مان ڪافي سست آهيان (ڇا مون هن کي اڳ ۾ تسليم نه ڪيو هو؟ نه؟)، ۽ حقيقت اها آهي ته ٽيم جي اڳواڻن کي جينڪنز تائين رسائي آهي، جنهن ۾ اسان وٽ سڀئي سي آء / سي ڊي آهن، مون سوچيو: هن کي مقرر ڪرڻ ڏيو جيترو هو چاهي ٿو! مون کي هڪ مذاق ياد آيو: هڪ ماڻهو کي مڇي ڏيو ۽ هو هڪ ڏينهن لاء کائيندو. هڪ شخص کي فيڊ سڏيو ۽ هن کي سڄي زندگي کارايو ويندو. ۽ ويو ڪم تي چالون کيڏڻ، جيڪو هڪ ڪنٽينر کي ترتيب ڏيڻ جي قابل هوندو جنهن ۾ ڪنهن به ڪاميابيءَ سان ٺهيل ورزن جي ايپليڪيشن کي ڪبر ۾ شامل ڪيو ويندو ۽ ان ۾ ڪنهن به قدر کي منتقل ڪرڻ جي قابل هوندو. اين وي (منهنجو ڏاڏو، هڪ فلسفي، ماضيءَ ۾ انگريزيءَ جو استاد هو، هاڻي هن جملي کي پڙهڻ کان پوءِ هن جي مندر ڏانهن آڱر ڦيريندو هو ۽ مون ڏانهن نهاريندي ڏسندو هو).

تنهن ڪري، هن نوٽ ۾ آئون توهان کي ٻڌايان ٿو ته مون ڪيئن سکيو:

  1. متحرڪ طور تي جينڪنز ۾ نوڪريون پاڻ يا ٻين نوڪرين مان تازه ڪاري ڪريو؛
  2. ڪلائوڊ ڪنسول سان ڳنڍيو (ڪلائوڊ شيل) هڪ نوڊ مان جينڪنز ايجنٽ سان انسٽال ٿيل؛
  3. Google Kubernetes Engine تي ڪم لوڊ ڪريو.


حقيقت ۾، مان آهيان، يقينا، ڪجهه غير جانبدار ٿي رهيو آهيان. اهو فرض ڪيو ويو آهي ته توهان وٽ گوگل ڪلائوڊ ۾ انفراسٽرڪچر جو گهٽ ۾ گهٽ حصو آهي، ۽، تنهن ڪري، توهان ان جا صارف آهيو ۽، يقينا، توهان وٽ هڪ GCP اڪائونٽ آهي. پر اهو نه آهي جيڪو هي نوٽ بابت آهي.

هي منهنجو ايندڙ چيٽ شيٽ آهي. مان صرف هڪ ڪيس ۾ اهڙا نوٽس لکڻ چاهيان ٿو: مون کي هڪ مسئلو درپيش هو، مون کي شروعات ۾ خبر نه هئي ته ان کي ڪيئن حل ڪجي، حل تيار ٿيل گوگل نه ڪيو ويو هو، تنهنڪري مون ان کي حصن ۾ گوگل ڪيو ۽ آخرڪار مسئلو حل ڪيو. ۽ انهي ڪري ته مستقبل ۾، جڏهن مون کي وساريو ته مون اهو ڪيئن ڪيو، مون کي هر شي کي ٻيهر ٽڪرا ٽڪرا گوگل ڪرڻ ۽ ان کي گڏ ڪرڻ جي ضرورت ناهي، مان پاڻ کي اهڙيون چيٽ شيٽ لکندو آهيان.

اعلان: 1. نوٽ لکيو ويو آهي ”پنهنجي لاءِ“، ڪردار لاءِ بهترين عمل لاڳو نٿو ٿئي. مون کي پڙهڻ لاءِ خوشي ٿي آهي ”بهتر هجي ها ته هن طريقي سان ڪيو وڃي“ تبصرن ۾ اختيارن.
2. جيڪڏهن نوٽ جي لاڳو ٿيل حصي کي لوڻ سمجهيو وڃي، پوء، منهنجي سڀني پوئين نوٽس وانگر، هي هڪ ڪمزور لوڻ جو حل آهي.

جينڪنز ۾ متحرڪ طور تي نوڪري سيٽنگون تازه ڪاري ڪرڻ

مان توهان جي سوال جي اڳڪٿي ڪريان ٿو: متحرڪ نوڪري جي تازه ڪاري کي ان سان ڇا ڪرڻو آهي؟ دستي طور تي اسٽرنگ پيٽرولر جي قيمت داخل ڪريو ۽ توهان وڃو!

مان جواب ڏيان ٿو: مان واقعي سست آهيان، مون کي اهو پسند ناهي جڏهن اهي شڪايت ڪن ٿا: ميشا، تعیناتي تباهه ٿي رهي آهي، سڀ ڪجهه ختم ٿي ويو آهي! توھان ڏسڻ شروع ڪيو، ۽ ڪجھ ڪم لانچ پيٽرولر جي قيمت ۾ ھڪڙو ٽائپو آھي. تنهن ڪري، مان هر شيء کي ممڪن طور تي ممڪن طور تي ڪرڻ کي ترجيح ڏيان ٿو. جيڪڏهن اهو ممڪن آهي ته صارف کي سڌو سنئون ڊيٽا داخل ڪرڻ کان روڪڻ بدران قيمتن جي فهرست مان چونڊڻ لاء، پوء آئون چونڊ کي منظم ڪريان ٿو.

منصوبو هي آهي: اسان جينڪنز ۾ هڪ نوڪري ٺاهي رهيا آهيون، جنهن ۾، لانچ ڪرڻ کان اڳ، اسان فهرست مان هڪ نسخو چونڊيندا هئاسين، قيمتن جي وضاحت ڪري سگھون ٿا جيڪي ڪنٽينر ڏانهن گذري ويا آهن. اين وي، پوءِ اهو ڪنٽينر گڏ ڪري ٿو ۽ ان کي ڪنٽينر رجسٽري ۾ دٻائي ٿو. پوء اتان کان ڪنٽينر ڪيوبر ۾ لانچ ڪيو ويو آهي جيئن ڪم لوڊ نوڪري ۾ بيان ڪيل پيٽرولن سان.

اسان جينڪنز ۾ نوڪري ٺاهڻ ۽ ترتيب ڏيڻ جي عمل تي غور نه ڪنداسين، اهو موضوع کان ٻاهر آهي. اسان فرض ڪنداسين ته ڪم تيار آهي. نسخن سان تازه ڪاري لسٽ کي لاڳو ڪرڻ لاءِ، اسان کي ٻن شين جي ضرورت آهي: هڪ موجوده ماخذ جي فهرست جنهن ۾ اڳئين صحيح ورزن نمبرن ۽ هڪ متغير جهڙو چونڊ پيٽرولر ڪم ۾. اسان جي مثال ۾، متغير جو نالو رکيو وڃي BUILD_VERSION، اسان ان تي تفصيل سان نه رهنداسين. پر اچو ته ذريعن جي فهرست تي وڌيڪ نظر رکون.

اهڙا ڪيترائي اختيار نه آهن. ٻه شيون فوري طور تي ذهن ۾ آيا:

  • ريموٽ رسائي API استعمال ڪريو جيڪو جينڪنز پنهنجي استعمال ڪندڙن کي پيش ڪري ٿو؛
  • ريموٽ ريپوزٽري فولڊر جي مواد جي درخواست ڪريو (اسان جي صورت ۾ هي JFrog آرٽيڪلري آهي، جيڪو اهم ناهي).

جينڪنز ريموٽ رسائي 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]

ڇا اهو ڪم ٻاهر ڪيو؟

ھاڻي ھاڻي فلٽر ڪريون صرف اھي رنسون جيڪي نتيجا سان ختم ٿين ٿيون SUCCESS. اچو ته دليل استعمال ڪريون & خارج ڪريو ۽ هڪ پيٽرولر جي طور تي اسان ان کي پاس ڪنداسين هڪ قدر ڏانهن رستو جيڪو برابر ناهي SUCCESS. ها ها. هڪ ٻه منفي هڪ بيان آهي. اسان هر شيء کي خارج ڪريون ٿا جيڪو اسان جي دلچسپي نه آهي:

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 -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[^/]+' )

جينڪنز ۾ نوڪريون ۽ نوڪري ترتيب ڏيڻ واري فائل کي ترتيب ڏيڻ

اسان نسخن جي فهرست جو ذريعو معلوم ڪيو. اچو ته ھاڻي نتيجن واري لسٽ کي ڪم ۾ شامل ڪريون. منهنجي لاءِ، واضع حل اهو هو ته هڪ قدم شامل ڪيو وڃي ايپليڪيشن جي تعمير جي ڪم ۾. اهو قدم جنهن تي عمل ڪيو ويندو ته نتيجو "ڪاميابي" هوندو.

اسيمبلي ٽاسڪ سيٽنگون کوليو ۽ تمام تري تائين اسڪرال ڪريو. بٽڻ تي ڪلڪ ڪريو: تعمير قدم شامل ڪريو -> مشروط قدم (اڪيلو). قدم سيٽنگون ۾، شرط چونڊيو موجوده تعمير جي حالت، قدر مقرر ڪريو SUCCESS، جيڪڏهن ڪامياب ٿيڻ جي عمل کي انجام ڏنو وڃي هلايو شيل حڪم.

۽ هاڻي مذاق جو حصو. جينڪنز فائلن ۾ نوڪري جي ترتيبن کي ذخيرو ڪري ٿو. XML فارميٽ ۾. رستي ۾ http://путь-до-задания/config.xml ان جي مطابق، توھان ڊائون لوڊ ڪري سگھوٿا ڪنفيگريشن فائل، ان کي ضروري طور تي تبديل ڪريو ۽ ان کي واپس رکو جتي توھان حاصل ڪيو.

ياد رکو، اسان مٿي اتفاق ڪيو آهي ته اسان نسخن جي فهرست لاء هڪ پيٽرولر ٺاهينداسين BUILD_VERSION?

اچو ته ترتيب واري فائل کي ڊائون لوڊ ڪريو ۽ ان جي اندر هڪ نظر وٺو. بس پڪ ڪرڻ لاء ته پيٽرولر جاء تي آهي ۽ گهربل قسم جي.

اسپائلر جي هيٺان اسڪرين شاٽ.

توھان جو config.xml ٽڪرو ساڳيو ڏسڻ گھرجي. سواءِ ان جي ته چونڊيل عنصر جو مواد اڃا غائب آهي
اسان پلگ ان، ايس ايم ايس يا رجسٽريشن کان سواءِ GKE ۾ ڊيپلائيمينٽ ٽاسڪ ٺاهيندا آهيون. اچو ته جينڪنز جي جيڪٽ هيٺان هڪ نظر وٺو

ڇا توهان کي پڪ آهي؟ اهو آهي، اچو ته هڪ اسڪرپٽ لکون جيڪو عمل ڪيو ويندو جيڪڏهن تعمير ڪامياب آهي.
اسڪرپٽ نسخن جي هڪ فهرست وصول ڪندي، ترتيب واري فائل کي ڊائون لوڊ ڪندي، نسخن جي فهرست ان ۾ لکندو جتي اسان کي ضرورت آهي، ۽ پوء ان کي واپس رکو. ها. اهو درست آهي. نسخن جي هڪ فهرست لکو XML ۾ ان جاءِ تي جتي اڳ ۾ ئي نسخن جي فهرست موجود آهي (مستقبل ۾ هوندي، اسڪرپٽ جي پهرين لانچ کان پوءِ). مون کي خبر آهي ته دنيا ۾ اڃا تائين باقاعده اظهار جا زبردست مداح آهن. منهنجو انهن سان واسطو ناهي. مهرباني ڪري انسٽال ڪريو xmlstarler مشين ڏانهن جتي ترتيب تبديل ڪئي ويندي. اهو مون کي لڳي ٿو ته اها وڏي قيمت نه آهي ادا ڪرڻ لاءِ ادا ڪرڻ لاءِ ايڪس ايم ايل کي ايڊٽ ڪرڻ کان پاسو استعمال ڪندي.

اسپائلر جي تحت، مان اهو ڪوڊ پيش ڪريان ٿو جيڪو مٿين ترتيب کي مڪمل طور تي انجام ڏئي ٿو.

ورجن جي فهرست لکو فولڊر کان ريموٽ سرور تي config ڏانهن

#!/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

جيڪڏهن توهان جينڪنز کان ورزن حاصل ڪرڻ جي اختيار کي ترجيح ڏيو ٿا ۽ توهان مون وانگر سست آهيو، ته پوءِ خراب ڪندڙ جي هيٺان ساڳيو ڪوڊ آهي، پر جينڪنز کان هڪ فهرست:

نسخن جي فهرست لکو Jenkins کان 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 ۾ ڊيپلائيمينٽ ٽاسڪ ٺاهيندا آهيون. اچو ته جينڪنز جي جيڪٽ هيٺان هڪ نظر وٺو

جيڪڏهن سڀ ڪجهه ڪم ڪيو، پوء ڪاپي پيسٽ ڪريو اسڪرپٽ ۾ هلايو شيل حڪم ۽ تبديليون محفوظ ڪريو.

ڪلائوڊ شيل سان ڳنڍڻ

اسان وٽ ڪنٽينرز ۾ ڪليڪٽر آهن. اسان جوابي استعمال ڪريون ٿا اسان جي ايپليڪيشن ترسيل اوزار ۽ ترتيب ڏيڻ واري مينيجر طور. ان مطابق، جڏهن ڪنٽينرز ٺاهڻ جي ڳالهه اچي ٿي، ٽي آپشن ذهن ۾ اچن ٿا: ڊڪر ۾ ڊڪر انسٽال ڪريو، ڊڪر کي انسٽال ڪريو مشين تي هلندڙ جوابي، يا ڪلائوڊ ڪنسول ۾ ڪنٽينرز ٺاهيو. اسان هن آرٽيڪل ۾ جينڪنز لاءِ پلگ ان بابت خاموش رهڻ تي اتفاق ڪيو. ياد اٿئي؟

مون فيصلو ڪيو: چڱو، ڇو ته "باڪس کان ٻاهر" ڪنٽينرز کي ڪلائوڊ ڪنسول ۾ گڏ ڪري سگهجي ٿو، پوء پريشان ڇو؟ ان کي صاف رکو، صحيح؟ مان ڪلائوڊ ڪنسول ۾ جينڪنز ڪنٽينرز کي گڏ ڪرڻ چاهيان ٿو، ۽ پوءِ انهن کي اتان کان ڪيوبر ۾ لانچ ڪرڻ چاهيان ٿو. ان کان علاوه، گوگل وٽ ان جي انفراسٽرڪچر جي اندر تمام امير چينل آھن، جن کي لڳائڻ جي رفتار تي فائدي وارو اثر پوندو.

بادل ڪنسول سان ڳنڍڻ لاء، توهان کي ٻن شين جي ضرورت آهي: ڪلائوڊ ۽ رسائي جا حق Google Cloud API VM مثال لاءِ جنهن مان اهو ساڳيو ڪنيڪشن ڪيو ويندو.

انهن لاءِ جيڪي ڳنڍڻ جو ارادو رکن ٿا گوگل ڪلائوڊ کان بلڪل نه
گوگل ان جي خدمتن ۾ انٽرايڪٽو اختيار کي غير فعال ڪرڻ جي امڪان جي اجازت ڏئي ٿو. اهو توهان کي ڪنسول سان ڳنڍڻ جي اجازت ڏيندو جيتوڻيڪ هڪ ڪافي مشين کان، جيڪڏهن اهو هلائي رهيو آهي * نڪس ۽ پاڻ کي ڪنسول آهي.

جيڪڏهن مون کي ضرورت آهي ته هن مسئلي کي وڌيڪ تفصيل سان هن نوٽ جي فريم ورڪ ۾، تبصرن ۾ لکو. جيڪڏهن اسان ڪافي ووٽ حاصل ڪندا، مان هن موضوع تي هڪ تازه ڪاري لکندس.

حق ڏيڻ جو آسان طريقو ويب انٽرفيس ذريعي آهي.

  1. VM مثال کي روڪيو جتان توھان بعد ۾ بادل ڪنسول سان ڳنڍيندا.
  2. مثال جا تفصيل کوليو ۽ ڪلڪ ڪريو ترميم.
  3. صفحي جي بلڪل تري ۾، چونڊيو مثال رسائي اسڪوپ سڀني Cloud APIs تائين مڪمل رسائي.

    اسڪرين شاٽ
    اسان پلگ ان، ايس ايم ايس يا رجسٽريشن کان سواءِ GKE ۾ ڊيپلائيمينٽ ٽاسڪ ٺاهيندا آهيون. اچو ته جينڪنز جي جيڪٽ هيٺان هڪ نظر وٺو

  4. پنهنجون تبديليون محفوظ ڪريو ۽ مثال لانچ ڪريو.

هڪ دفعو VM لوڊشيڊنگ ختم ڪري، ان سان ڳنڍيو SSH ذريعي ۽ پڪ ڪريو ته ڪنيڪشن بغير ڪنهن غلطي جي ٿئي ٿي. حڪم استعمال ڪريو:

gcloud alpha cloud-shell ssh

هڪ ڪامياب ڪنيڪشن هن وانگر ڪجهه ڏسڻ ۾ اچي ٿو
اسان پلگ ان، ايس ايم ايس يا رجسٽريشن کان سواءِ GKE ۾ ڊيپلائيمينٽ ٽاسڪ ٺاهيندا آهيون. اچو ته جينڪنز جي جيڪٽ هيٺان هڪ نظر وٺو

GKE ڏانهن موڪليو

جيئن ته اسان ڪوشش ڪري رهيا آهيون هر ممڪن طريقي سان مڪمل طور تي IaC (Infrastructure as a Code) ڏانهن، اسان جي ڊاکر فائلن کي Git ۾ محفوظ ڪيو ويو آهي. هي هڪ طرف آهي. ۽ kubernetes ۾ تعیناتي هڪ yaml فائل جي ذريعي بيان ڪئي وئي آهي، جيڪا صرف هن ڪم ذريعي استعمال ڪئي وئي آهي، جيڪو خود پڻ ڪوڊ وانگر آهي. هي ٻئي پاسي کان آهي. عام طور تي، منهنجو مطلب آهي، منصوبو هي آهي:

  1. اسان متغير جا قدر وٺون ٿا BUILD_VERSION ۽، اختياري طور، متغير جا قدر جيڪي گذري ويندا اين وي.
  2. ڊائون لوڊ ڪريو ڊڪر فائل Git مان.
  3. ٺاھڻ لاء yaml ٺاھيو.
  4. اسان انهن ٻنهي فائلن کي اسڪپ ذريعي ڪلائوڊ ڪنسول تي اپلوڊ ڪندا آهيون.
  5. اسان اتي هڪ ڪنٽينر ٺاهي ۽ ان کي ڪنٽينر رجسٽري ۾ ڌڪيو
  6. اسان ڪيبر تي لوڊ ڪرڻ واري فائل کي لاڳو ڪريون ٿا.

اچو ته وڌيڪ مخصوص ٿي وڃو. هڪ دفعو اسان جي باري ۾ ڳالهائڻ شروع ڪيو اين وي، پوءِ فرض ڪريو اسان کي ٻن پيرا ميٽرن جا قدر پاس ڪرڻ گهرجن: PARAM1 и PARAM2. اسان انهن جو ڪم شامل ڪريون ٿا تعیناتي لاءِ، قسم - اسٽرنگ پيٽرولر.

اسڪرين شاٽ
اسان پلگ ان، ايس ايم ايس يا رجسٽريشن کان سواءِ GKE ۾ ڊيپلائيمينٽ ٽاسڪ ٺاهيندا آهيون. اچو ته جينڪنز جي جيڪٽ هيٺان هڪ نظر وٺو

اسان هڪ سادي ريڊائريشن سان yaml ٺاهينداسين گونج ڪريو فائل ڪرڻ. اهو فرض ڪيو ويو آهي، يقينا، توهان وٽ آهي توهان جي ڊاکرفائل ۾ PARAM1 и PARAM2لوڊ جو نالو هوندو زبردست ايپ، ۽ گڏ ڪيل ڪنٽينر جي مخصوص ورزن جي ايپليڪيشن سان گڏ آھي ڪنٽينر رجسٽري رستي ۾ 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 alpha cloud-shell 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

تبصرو شامل ڪريو