Біз GKE жүйесінде плагиндер, SMS немесе тіркеусіз орналастыру тапсырмасын жасаймыз. Дженкинстің күртесінің астына көз салайық

Мұның бәрі біздің әзірлеуші ​​топтардың бірінің топ жетекшісі бізден бір күн бұрын контейнерге салынған жаңа қосымшасын сынап көруді сұраған кезде басталды. Мен оны жарияладым. Шамамен 20 минуттан кейін қосымшаны жаңарту туралы өтініш түсті, өйткені онда өте қажетті нәрсе қосылды. жаңарттым. Тағы бір-екі сағаттан кейін... әрі қарай не болғанын болжай аласыз...

Мойындауым керек, мен өте жалқаумын (бұрын мойындаған жоқпын ба? Жоқ?) және топ жетекшілерінің Дженкинске қол жеткізе алатынын ескере отырып, бізде барлық CI/CD бар, мен ойладым: оны келесідей орналастыруға рұқсат етіңіз. ол қалайды! Менің есіме бір әзіл түсті: адамға балық беріңіз, ол бір күн жейді; адамды Fed деп атаңыз және ол өмір бойы тамақтанады. Және кетті жұмыста трюк ойнау, ол кез келген сәтті салынған нұсқаның қолданбасы бар контейнерді Куберге орналастыра алады және оған кез келген мәндерді тасымалдай алады. ENV (Менің атам, бұрын филолог, ағылшын тілінің мұғалімі, қазір бұл сөйлемді оқығаннан кейін саусағын ғибадатханасына бұрап, маған өте мәнерлі қарайтын).

Сонымен, бұл жазбада мен сізге қалай үйренгенімді айтып беремін:

  1. Дженкинстегі тапсырмаларды жұмыстың өзінен немесе басқа жұмыстардан динамикалық түрде жаңарту;
  2. Jenkins агенті орнатылған түйіннен бұлт консоліне (Cloud shell) қосылыңыз;
  3. Жұмыс жүктемесін Google Kubernetes Engine жүйесіне орналастырыңыз.


Шындығында, мен, әрине, аздап немқұрайлымын. Сізде Google бұлтындағы инфрақұрылымның кем дегенде бір бөлігі бар деп болжанады, сондықтан сіз оның пайдаланушысысыз және, әрине, сізде GCP тіркелгісі бар. Бірақ бұл жазба бұл туралы емес.

Бұл менің келесі алдау парағым. Мен мұндай жазбаларды тек бір жағдайда ғана жазғым келеді: мен бір мәселеге тап болдым, бастапқыда оны қалай шешуге болатынын білмедім, шешімі дайын күйінде гуглден ізделмеді, сондықтан мен оны бөліктерге бөліп гуглден іздеп, соңында мәселені шешіп алдым. Болашақта мен мұны қалай істегенімді ұмытып қалсам, бәрін Google-ге бөлшектеп, бірге құрастырудың қажеті болмас үшін, мен өзіме осындай парақтарды жазамын.

Жауапкершіліктен бас тарту: 1. Жазба «өзім үшін», рөл үшін жазылған озық тәжірибе қолданылмайды. Түсініктемелерде «осылай істеу жақсы болар еді» опцияларын оқығаныма қуаныштымын.
2. Егер нотаның қолданылған бөлігі тұз деп есептелсе, онда менің барлық алдыңғы жазбаларым сияқты бұл да әлсіз тұз ерітіндісі болып табылады.

Дженкинстегі тапсырма параметрлерін динамикалық түрде жаңарту

Мен сіздің сұрағыңызды алдын ала білемін: динамикалық жұмысты жаңартудың оған не қатысы бар? Жол параметрінің мәнін қолмен енгізіңіз және өшіріңіз!

Мен жауап беремін: мен жалқаумын, олар шағымданғанын ұнатпаймын: Миша, орналастыру бұзылып жатыр, бәрі жойылды! Сіз іздей бастайсыз және кейбір тапсырманы іске қосу параметрінің мәнінде қате бар. Сондықтан мен барлығын мүмкіндігінше тиімді істегенді жөн көремін. Егер таңдау үшін мәндер тізімін беру арқылы пайдаланушының деректерді тікелей енгізуіне жол бермеу мүмкін болса, мен таңдауды ұйымдастырамын.

Жоспар мынада: біз Дженкинсте жұмыс жасаймыз, оны іске қоспас бұрын тізімнен нұсқаны таңдап, контейнерге жіберілген параметрлердің мәндерін көрсете аламыз. ENV, содан кейін ол контейнерді жинап, оны Контейнер тізіліміне итереді. Содан кейін контейнер текше түрінде іске қосылады жұмыс жүктемесі жұмыста көрсетілген параметрлермен.

Біз Дженкинсте жұмысты құру және орнату процесін қарастырмаймыз, бұл тақырыптан тыс. Тапсырма дайын деп есептейміз. Нұсқалары бар жаңартылған тізімді енгізу үшін бізге екі нәрсе қажет: априорлы жарамды нұсқа нөмірлері бар бар бастапқы тізім және айнымалы сияқты. Таңдау параметрі тапсырмада. Біздің мысалда айнымалы аталсын BUILD_VERSION, біз оған егжей-тегжейлі тоқталмаймыз. Бірақ көздер тізімін мұқият қарастырайық.

Ондай нұсқалар көп емес. Екі нәрсе бірден ойға оралды:

  • Дженкинс пайдаланушыларына ұсынатын қашықтан қол жеткізу API пайдаланыңыз;
  • Қашықтағы репозиторий қалтасының мазмұнын сұраңыз (біздің жағдайда бұл JFrog Artifactory, ол маңызды емес).

Jenkins қашықтан қол жеткізу 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 жүйесінде плагиндер, SMS немесе тіркеусіз орналастыру тапсырмасын жасаймыз. Дженкинстің күртесінің астына көз салайық

Жақсы, көңіл көтеру үшін сүзгі бізді алдамайтынына көз жеткізейік (сүзгілер ешқашан өтірік айтпайды!) және «сәтсіздердің» тізімін көрсетейік:

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

Сәтсіздердің тізімінің скриншоты
Біз GKE жүйесінде плагиндер, SMS немесе тіркеусіз орналастыру тапсырмасын жасаймыз. Дженкинстің күртесінің астына көз салайық

Қашықтағы сервердегі қалтадағы нұсқалар тізімі

Нұсқалар тізімін алудың екінші жолы бар. Бұл маған Jenkins API-ге кіруден де ұнайды. Өйткені, егер қолданба сәтті құрастырылған болса, бұл оның оралғанын және тиісті қалтадағы репозиторийге орналастырылғанын білдіреді. Мысалы, репозиторий қолданбалардың жұмыс нұсқаларының әдепкі сақтау орны болып табылады. Ұнайды. Ал, одан сақтауда қандай нұсқалар бар екенін сұрап көрейік. Біз қашықтағы қалтаны бұрап, grep және awk жасаймыз. Егер біреуді oneliner қызықтырса, онда ол спойлердің астында.

Бір жол командасы
Екі нәрсені ескеріңіз: мен тақырыптағы қосылым мәліметтерін беремін және қалтадағы барлық нұсқаларды қажет етпейді және мен бір ай ішінде жасалғандарын ғана таңдаймын. Пәрменді шындықтарыңыз бен қажеттіліктеріңізге сәйкес өңдеңіз:

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

Jenkins ішіндегі тапсырмаларды және тапсырма конфигурация файлын орнату

Біз нұсқалар тізімінің көзін анықтадық. Енді алынған тізімді тапсырмаға енгізейік. Мен үшін айқын шешім қолданбаны құру тапсырмасына қадам қосу болды. Нәтиже «сәтті» болса, орындалатын қадам.

Құрастыру тапсырмасының параметрлерін ашып, ең төменгі жағына жылжыңыз. Түймелерді басыңыз: Құрастыру қадамын қосу -> Шартты қадам (бір). Қадам параметрлерінде шартты таңдаңыз Ағымдағы құрастыру күйі, мәнді орнатыңыз ЖЕТІСТІК, сәтті болған жағдайда орындалатын әрекет Shell пәрменін іске қосыңыз.

Ал енді қызық бөлік. Дженкинс тапсырмалар конфигурацияларын файлдарда сақтайды. 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 немесе тіркеусіз орналастыру тапсырмасын жасаймыз. Дженкинстің күртесінің астына көз салайық

Егер бәрі жұмыс істесе, сценарийді көшіріп қойыңыз Shell пәрменін іске қосыңыз және өзгертулерді сақтаңыз.

Бұлттық қабықшаға қосылу

Бізде контейнерлерде коллекторлар бар. Біз Ansible бағдарламасын қолданбаны жеткізу құралы және конфигурация менеджері ретінде қолданамыз. Тиісінше, контейнерлерді салу туралы сөз болғанда, үш нұсқа ойға келеді: Docker бағдарламасын Docker орнату, Ansible жұмыс істейтін машинаға Docker орнату немесе бұлттық консолде контейнерлерді құру. Біз осы мақалада Дженкинс плагиндері туралы үндемей тұруға келісті. Есіңізде ме?

Мен шештім: «қораптан тыс» контейнерлерді бұлттық консолде жинауға болатындықтан, неге алаңдау керек? Оны таза ұстаңыз, солай ма? Мен Дженкинс контейнерлерін бұлт консоліне жинап, содан кейін оларды текшеге жібергім келеді. Сонымен қатар, Google-дың инфрақұрылымында өте бай арналар бар, бұл орналастыру жылдамдығына жақсы әсер етеді.

Бұлттық консолге қосылу үшін сізге екі нәрсе қажет: gcloud және қол жеткізу құқықтары Google Cloud API дәл осы қосылым жасалатын VM данасы үшін.

Мүлдем Google бұлтынан емес қосылуды жоспарлағандар үшін
Google өз қызметтерінде интерактивті авторизацияны өшіру мүмкіндігін береді. Бұл консольге тіпті кофе машинасынан қосылуға мүмкіндік береді, егер ол *nix жұмыс істеп тұрса және консольдің өзінде болса.

Осы жазба аясында бұл мәселені толығырақ көрсету қажеттілігі туындаса, түсініктемелерде жазыңыз. Егер біз жеткілікті дауыс жинасақ, мен осы тақырып бойынша жаңарту жазамын.

Құқықтарды берудің ең оңай жолы - веб-интерфейс.

  1. Бұлт консоліне кейін қосылатын VM данасын тоқтатыңыз.
  2. Дана мәліметтерін ашып, басыңыз түзету.
  3. Беттің ең төменгі жағында данаға қол жеткізу ауқымын таңдаңыз Барлық бұлттық API интерфейстеріне толық қол жеткізу.

    Скриншот
    Біз GKE жүйесінде плагиндер, SMS немесе тіркеусіз орналастыру тапсырмасын жасаймыз. Дженкинстің күртесінің астына көз салайық

  4. Өзгерістерді сақтаңыз және дананы іске қосыңыз.

VM жүктеуді аяқтағаннан кейін оған SSH арқылы қосылыңыз және қосылым қатесіз орындалатынына көз жеткізіңіз. Пәрменді пайдаланыңыз:

gcloud alpha cloud-shell ssh

Сәтті байланыс келесідей көрінеді
Біз GKE жүйесінде плагиндер, SMS немесе тіркеусіз орналастыру тапсырмасын жасаймыз. Дженкинстің күртесінің астына көз салайық

GKE-ге орналастыру

Біз IaC-қа (Инфраструктура код ретінде) толығымен ауысуға барлық мүмкіндікті қолданып жатқандықтан, біздің докерлік файлдарымыз Git-те сақталады. Бұл бір жағынан. Кубернеттерде орналастыру yaml файлымен сипатталады, ол тек осы тапсырмамен пайдаланылады, оның өзі де код сияқты. Бұл екінші жағынан. Жалпы айтқанда, жоспар мынадай:

  1. Біз айнымалылардың мәндерін аламыз BUILD_VERSION және, таңдау бойынша, өтетін айнымалы мәндердің мәндері ENV.
  2. Git сайтынан докер файлын жүктеп алыңыз.
  3. Орналастыру үшін yaml жасаңыз.
  4. Біз бұл екі файлды scp арқылы бұлт консоліне жүктейміз.
  5. Біз сонда контейнер құрастырамыз және оны Контейнер тізіліміне енгіземіз
  6. Біз текшеге жүктеуді орналастыру файлын қолданамыз.

Нақтырақ айтайық. Бірде біз сөйлесе бастадық ENV, содан кейін екі параметрдің мәндерін беру керек делік: PARAM1 и PARAM2. Біз олардың тапсырмасын орналастыру үшін қосамыз, түрі - Жол параметрі.

Скриншот
Біз GKE жүйесінде плагиндер, SMS немесе тіркеусіз орналастыру тапсырмасын жасаймыз. Дженкинстің күртесінің астына көз салайық

Біз қарапайым қайта бағыттау арқылы yaml жасаймыз Echo файлға. Әрине, сіздің докер файлыңызда бар деп болжанады 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 альфа бұлтты қабығы 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 немесе тіркеусіз орналастыру тапсырмасын жасаймыз. Дженкинстің күртесінің астына көз салайық

Мен параметрді әдейі елемедім Кіріс. Бір қарапайым себеп бойынша: оны орнатқаннан кейін жұмыс жүктемесі берілген атаумен, сіз осы атпен қанша орналастыруды орындасаңыз да, ол жұмыс істейді. Жалпы, бұл тарихтың шеңберінен сәл тысқары.

Қорытындылар орнына

Жоғарыда аталған барлық қадамдарды орындау мүмкін емес еді, бірақ жай ғана Дженкинс үшін кейбір плагиндерді орнатты, олардың muuulion. Бірақ қандай да бір себептермен маған плагиндер ұнамайды. Дәлірек айтсам, мен оларға шарасыздықтан ғана барамын.

Ал мен өзім үшін жаңа тақырыпты таңдағанды ​​ұнатамын. Жоғарыдағы мәтін де ең басында сипатталған мәселені шешу кезінде жасаған қорытындыларыммен бөлісу тәсілі болып табылады. Ол сияқты девоптарда қорқынышты қасқыр емес адамдармен бөлісіңіз. Егер менің нәтижелерім кем дегенде біреуге көмектессе, мен бақытты боламын.

Ақпарат көзі: www.habr.com

пікір қалдыру