موږ په GKE کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

دا ټول هغه وخت پیل شول کله چې زموږ د پراختیایی ټیمونو څخه د ټیم مشر له موږ څخه وغوښتل چې د دوی نوي غوښتنلیک ازموینه وکړي ، کوم چې یوه ورځ دمخه کانټینر شوی و. ما یې پوسټ کړ. شاوخوا 20 دقیقې وروسته ، د غوښتنلیک تازه کولو غوښتنه ترلاسه شوه ، ځکه چې هلته یو خورا اړین شی اضافه شوی و. ما تازه کړ. یو څو ساعته وروسته ... ښه، تاسو اټکل کولی شئ چې څه پیښیږي ...

زه باید اعتراف وکړم، زه ډیر سست یم (ایا ما مخکې دا نه وه منلې؟ نه؟)، او د دې حقیقت په پام کې نیولو سره چې د ټیم مشران جینکنز ته لاس رسی لري، په کوم کې چې موږ ټول CI/CD لرو، ما فکر کاوه: اجازه راکړئ چې هغه د دې په توګه وګمارل شي. څومره چې هغه غواړي! یوه ټوکه مې را په یاد شوه: یو سړي ته ماهي ورکړئ، هغه به یوه ورځ وخوري. یو کس ته فیډ ووایاست او هغه به ټول عمر تغذیه شي. او لاړ په کار کې چالونه لوبه وکړئ، کوم چې به وکولی شي یو کانټینر ځای په ځای کړي چې په کوبر کې د هرې بریالۍ جوړ شوي نسخې غوښتنلیک لري او کوم ارزښتونه ورته لیږدوي این وی (زما نیکه، یو فیلسوف، په تیرو وختونو کې د انګلیسي ښوونکی، اوس به د دې جملې له لوستلو وروسته خپله ګوتې په خپل معبد کې وګرځوي او ما ته به په خورا څرګند ډول ګوري).

نو، په دې یادښت کې به زه تاسو ته ووایم چې ما څنګه زده کړل:

  1. په متحرک ډول په جینکنز کې دندې له دندې یا نورو دندو څخه تازه کړئ؛
  2. د کلاوډ کنسول (کلاؤډ شیل) سره د نوډ څخه د جینکنز ایجنټ نصب سره وصل کړئ؛
  3. د ګوګل کوبرنیټس انجن ته د کار بار ځای په ځای کړئ.


په حقیقت کې، زه، البته، یو څه بې رحمه یم. داسې انګیرل کیږي چې تاسو په ګوګل کلاوډ کې د زیربنا لږترلږه برخه لرئ، او له همدې امله، تاسو د دې کاروونکي یاست او البته، تاسو د GCP حساب لرئ. مګر دا هغه څه ندي چې دا یادداشت په اړه دی.

دا زما راتلونکی درغلۍ پاڼه ده. زه غواړم دا ډول یادښتونه یوازې په یوه قضیه کې ولیکم: زه له یوې ستونزې سره مخ وم، زه په پیل کې نه پوهیدم چې څنګه یې حل کړم، حل یې په ګوګل کې چمتو شوی نه و، نو ما دا په برخو کې ګوګل کړ او بالاخره یې ستونزه حل کړه. او له همدې امله په راتلونکي کې ، کله چې زه هیر کړم چې ما دا څنګه کړي ، زه اړتیا نلرم چې هر څه بیا په ټوټه ټوټه ګوګل کړم او یوځای یې تالیف کړم ، زه خپل ځان ته داسې جعلي شیټونه لیکم.

دادعا: 1. یادښت د رول لپاره "زما لپاره" لیکل شوی و غوره تمرین نه پلي کیږي. زه خوښ یم چې په نظرونو کې د "دا به غوره وي چې دا په دې ډول ترسره کړئ" اختیارونه لوستل.
2. که د نوټ پلي شوې برخه مالګه وګڼل شي، نو زما د ټولو پخوانیو نوټونو په څیر، دا یو کمزوری مالګه ده.

په جینکنز کې د دندې ترتیبات په متحرک ډول تازه کول

زه ستاسو د پوښتنې وړاندوینه کوم: د متحرک دندې تازه کول د دې سره څه تړاو لري؟ د سټرینګ پیرامیټر ارزښت په لاسي ډول دننه کړئ او لاړ شئ!

زه ځواب ورکړم: زه واقعیا سست یم ، زه دا نه خوښوم کله چې دوی شکایت کوي: میشا ، ګمارنه غورځیږي ، هرڅه له مینځه تللي! تاسو په لټه کې یاست ، او د ځینې ټاسک لانچ پیرامیټر په ارزښت کې ټایپ شتون لري. له همدې امله، زه غوره کوم چې هر څه د امکان تر حده په اغیزمنه توګه ترسره کړم. که چیرې دا ممکنه وي چې د کارونکي مستقیم معلوماتو ته د ننوتلو مخه ونیسي د دې پرځای چې د انتخاب کولو لپاره د ارزښتونو لیست ورکړئ ، نو زه انتخاب تنظیموم.

پلان دا دی: موږ په جینکنز کې دنده رامینځته کوو ، په کوم کې چې د پیل کولو دمخه ، موږ کولی شو له لیست څخه یوه نسخه غوره کړو ، د پیرامیټرو لپاره ارزښتونه مشخص کړو چې له لارې کانټینر ته لیږدول شوي. این وی، بیا دا کانټینر راټولوي او د کانټینر ثبت ته یې اړوي. بیا له هغه ځایه کانټینر په کیوبر کې په لاره اچول کیږي د کار بار په دنده کې مشخص شوي پیرامیټرونو سره.

موږ به په جینکنز کې د دندې رامینځته کولو او تنظیم کولو پروسه په پام کې ونیسو ، دا موضوع لرې ده. موږ به فرض کړو چې دنده چمتو ده. د نسخو سره د نوي شوي لیست پلي کولو لپاره، موږ دوه شیانو ته اړتیا لرو: د موجوده سرچینې لیست چې د لومړیتوب معتبر نسخې شمیرې او یو متغیر لکه. د انتخاب پیرامیټر په دنده کې. زموږ په مثال کې، اجازه راکړئ چې متغیر نوم شي BUILD_VERSION، موږ به په دې اړه په تفصیل سره خبرې ونه کړو. مګر راځئ چې د سرچینې لیست ته نږدې کتنه وکړو.

دومره ډیر انتخابونه نشته. دوه شیان سمدلاسه ذهن ته راغلل:

  • د ریموټ لاسرسي API وکاروئ چې جینکنز خپلو کاروونکو ته وړاندیز کوي؛
  • د ریموټ ذخیره فولډر مینځپانګې غوښتنه وکړئ (زموږ په قضیه کې دا د JFrog هنري فابریکه ده ، کوم چې مهم ندي).

جینکنز ریموټ لاسرسي API

د تاسیس شوي عالي دود سره سم ، زه به غوره کړم چې له اوږدو توضیحاتو څخه ډډه وکړم.
زه به خپل ځان ته یوازې د لومړۍ پراګراف یوې برخې وړیا ژباړې ته اجازه ورکړم د API اسنادو لومړۍ پاڼه:

جینکنز خپل فعالیت ته د ریموټ ماشین لوستلو وړ لاسرسي لپاره API چمتو کوي. <…> ریموټ لاسرسی د REST په څیر سټایل کې وړاندیز شوی. دا پدې مانا ده چې ټولو ځانګړتیاو ته د ننوتلو یو واحد نقطه شتون نلري، مګر د یو آر ایل په څیر ".../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 کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

ښه، یوازې د ساتیرۍ لپاره، راځئ ډاډ ترلاسه کړو چې فلټر موږ ته دوکه نه ده کړې (فلټرونه هیڅکله دروغ نه وايي!) او د "ناکامو" لیست ښکاره کړئ:

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

د غیر بریالي کسانو لیست سکرین شاټ
موږ په GKE کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

په ریموټ سرور کې د فولډر څخه د نسخو لیست

د نسخو لیست ترلاسه کولو لپاره دویمه لاره شتون لري. زه دا د جینکنز 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 کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

تاسو ډاډه یاست؟ دا دی، راځئ چې یو سکریپټ ولیکئ چې دا به اجرا شي که جوړونه بریالۍ وي.
سکریپټ به د نسخو لیست ترلاسه کړي، د ترتیب فایل ډاونلوډ کړي، د نسخو لیست په هغه ځای کې ولیکئ چې موږ ورته اړتیا لرو، او بیا یې بیرته واچوو. هو. هغه صحیح ده. په 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

که تاسو د جینکنز څخه د نسخو ترلاسه کولو اختیار غوره کوئ او تاسو زما په څیر سست یاست ، نو د سپیلر لاندې ورته کوډ دی ، مګر د جینکنز لیست:

له جینکنز څخه ترتیب ته د نسخو لیست ولیکئ
یوازې دا په ذهن کې وساتئ: زما د مجلس نوم د ترتیب شمیره او د نسخې شمیره لري، د کولون لخوا جلا شوی. په دې اساس، 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 کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

که هرڅه کار وکړي، نو بیا سکریپټ کاپي پیسټ کړئ د شیل کمانډ چلول او بدلونونه خوندي کړئ.

د کلاوډ شیل سره نښلول

موږ په کانتینرونو کې راټولونکي لرو. موږ د خپل غوښتنلیک تحویلي وسیلې او ترتیب مدیر په توګه ځواب ورکوو. په همدې اساس ، کله چې د کانټینرونو جوړولو خبره راځي ، درې اختیارونه په ذهن کې راځي: په ډاکر کې ډاکر نصب کړئ ، ډاکر په داسې ماشین کې نصب کړئ چې ځواب ورکوونکي چلوي ، یا په کلاوډ کنسول کې کانټینرونه جوړ کړئ. موږ موافقه وکړه چې پدې مقاله کې د جینکنز لپاره د پلگ انونو په اړه خاموش پاتې شو. په یاد دي؟

ما پریکړه وکړه: ښه ، ځکه چې کانټینرونه "د بکس څخه بهر" په کلاوډ کنسول کې راټول کیدی شي ، نو بیا ولې زحمت؟ دا پاک وساتئ، سمه ده؟ زه غواړم په کلاوډ کنسول کې د جینکنز کانټینرونه راټول کړم ، او بیا یې له هغه ځایه کیوبر ته لانچ کړم. سربیره پردې ، ګوګل په خپل زیربنا کې خورا بډایه چینلونه لري ، کوم چې به د پلي کولو سرعت باندې ګټور اغیزه ولري.

د کلاوډ کنسول سره وصل کیدو لپاره ، تاسو دوه شیانو ته اړتیا لرئ: gCloud او ته د لاسرسي حق د ګوګل کلاوډ API د VM مثال لپاره چې دا ورته اړیکه به جوړه شي.

د هغو کسانو لپاره چې پلان لري د ګوګل کلاوډ څخه وصل نشي
ګوګل په خپلو خدماتو کې د متقابل واک غیر فعالولو امکان ته اجازه ورکوي. دا به تاسو ته اجازه درکړي حتی د کافي ماشین څخه کنسول سره وصل شئ ، که چیرې دا * نکس پرمخ وړي او پخپله کنسول ولري.

که چیرې ما ته اړتیا وي چې دا مسله د دې یادداشت په چوکاټ کې په ډیر تفصیل سره پوښي، په نظرونو کې ولیکئ. که موږ کافي رایې ترلاسه کړو ، زه به پدې موضوع تازه معلومات ولیکم.

د حقونو ورکولو ترټولو اسانه لار د ویب انٹرفیس له لارې ده.

  1. د VM مثال ودروئ له کوم څخه چې تاسو به وروسته د کلاوډ کنسول سره وصل شئ.
  2. د مثال توضیحات خلاص کړئ او کلیک وکړئ تعدیل.
  3. د پاڼې په ښکته برخه کې، د مثال لاسرسي ساحه غوره کړئ ټولو کلاوډ APIs ته بشپړ لاسرسی.

    سکرین شاټ
    موږ په GKE کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

  4. خپل بدلونونه خوندي کړئ او مثال یې پیل کړئ.

یوځل چې VM بار کول پای ته ورسوي ، د SSH له لارې دې سره وصل شئ او ډاډ ترلاسه کړئ چې پیوستون پرته له خطا پیښیږي. کمانډ وکاروئ:

gcloud alpha cloud-shell ssh

یو بریالی اړیکه داسې ښکاري
موږ په GKE کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

GKE ته ځای په ځای کړئ

څرنګه چې موږ په هره ممکنه لاره کې هڅه کوو چې په بشپړ ډول IaC (د کوډ په توګه زیربنا) ته لاړ شو، زموږ د ډاکر فایلونه په Git کې زیرمه شوي. دا له یوې خوا. او په kubernetes کې ځای پرځای کول د yaml فایل لخوا تشریح شوي، کوم چې یوازې د دې دندې لخوا کارول کیږي، کوم چې پخپله هم د کوډ په څیر دی. دا له بلې خوا ده. په عموم کې، زما مطلب دا دی چې پلان دا دی:

  1. موږ د متغیرونو ارزښتونه اخلو BUILD_VERSION او، په اختیاري توګه، د متغیرونو ارزښتونه چې تیریږي این وی.
  2. د ګیټ څخه ډاکر فایل ډاونلوډ کړئ.
  3. د ځای پرځای کولو لپاره yaml پیدا کړئ.
  4. موږ دا دواړه فایلونه د scp له لارې کلاوډ کنسول ته اپلوډ کوو.
  5. موږ هلته یو کانټینر جوړوو او د کانټینر ثبت ته یې فشار ورکوو
  6. موږ کیوبر ته د بار وړلو فایل پلي کوو.

راځئ چې نور مشخص شي. یوځل چې موږ په اړه خبرې پیل کړې این وی، بیا فرض کړئ چې موږ د دوه پیرامیټرو ارزښتونو ته اړتیا لرو: PARAM1 и PARAM2. موږ د دوی دنده د ګمارنې لپاره اضافه کوو، ډول - د تار پیرامیټ.

سکرین شاټ
موږ په GKE کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

موږ به د یو ساده ریډائریکشن سره 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 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 کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

او بیا د راټول شوي کانټینر بریالي ځای په ځای کول

سکرین شاټ
موږ په GKE کې پرته له پلگ انونو ، SMS یا راجسټریشن څخه د ګمارنې دنده رامینځته کوو. راځئ چې د جینکنز جاکټ لاندې یوه کتنه وکړو

ما په قصدي ډول ترتیب له پامه غورځولی برید. د یو ساده دلیل لپاره: یوځل چې تاسو یې تنظیم کړئ د کار بار د ورکړل شوي نوم سره، دا به فعال پاتې شي، پرته له دې چې تاسو د دې نوم سره څومره ګمارنې ترسره کوئ. ښه، په عموم کې، دا د تاریخ له ساحې څخه لږ څه دی.

د پایلو پرځای

ټول پورتنۍ مرحلې شاید نه وي ترسره شوي، مګر په ساده ډول د جینکنز لپاره یو څه پلگ ان نصب کړی، د دوی میوولین. مګر د ځینو دلیلونو لپاره زه پلگ ان نه خوښوم. ښه ، په دقیق ډول ، زه دوی ته یوازې د نا امیدۍ څخه کار اخلم.

او زه غواړم چې زما لپاره یو څه نوې موضوع غوره کړم. پورته متن د موندنو د شریکولو یوه لاره هم ده چې ما په پیل کې تشریح شوي ستونزې حل کولو پرمهال رامینځته کړې. له هغو کسانو سره یې شریک کړئ چې د هغه په ​​​​څیر، په ډیوپس کې یو سخت لیوه نه دي. که زما موندنې لږترلږه د یو چا سره مرسته وکړي، زه به خوښ شم.

سرچینه: www.habr.com

Add a comment