A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

Gbogbo rẹ bẹrẹ nigbati oludari ẹgbẹ ti ọkan ninu awọn ẹgbẹ idagbasoke wa beere lọwọ wa lati ṣe idanwo ohun elo tuntun wọn, eyiti a ti fi sinu apo ni ọjọ ṣaaju. Mo ti firanṣẹ. Lẹhin bii iṣẹju 20, ibeere kan gba lati ṣe imudojuiwọn ohun elo naa, nitori ohun pataki kan ti ṣafikun nibẹ. Mo tunse. Lẹhin awọn wakati meji miiran… daradara, o le gboju ohun ti o bẹrẹ lati ṣẹlẹ ni atẹle…

Mo ti gbọdọ gba, Mo wa oyimbo ọlẹ (Ṣe Emi ko gba eleyi sẹyìn? Ko si?), Ati fun awọn ti o daju wipe egbe nyorisi wiwọle si Jenkins, ninu eyi ti a ni gbogbo CI / CD, Mo ro: jẹ ki i ran bi pupọ bi o ṣe fẹ! Mo ranti awada kan: fun eniyan ni ẹja kan yoo jẹ fun ọjọ kan; pe eniyan Jeje ao jeun ni gbogbo aye re. O si lọ mu ẹtan lori ise, eyiti yoo ni anfani lati gbe eiyan kan ti o ni ohun elo ti eyikeyi ẹya ti a ṣe ni aṣeyọri sinu Kuber ati gbe eyikeyi awọn iye si ENV (Baba àgbà mi, onímọ̀ ọgbọ́n orí, olùkọ́ èdè Gẹ̀ẹ́sì nígbà àtijọ́, máa yí ìka rẹ̀ sẹ́yìn sí tẹ́ńpìlì rẹ̀, yóò sì wò mí lọ́nà tí yóò fi hàn kedere lẹ́yìn kíka gbólóhùn yìí).

Nitorinaa, ninu akọsilẹ yii Emi yoo sọ fun ọ bi MO ṣe kọ:

  1. Ṣe imudojuiwọn awọn iṣẹ ni Jenkins lati iṣẹ funrararẹ tabi lati awọn iṣẹ miiran;
  2. Sopọ si console awọsanma (ikarahun awọsanma) lati oju ipade pẹlu oluranlowo Jenkins ti a fi sori ẹrọ;
  3. Fi iṣẹ ṣiṣe sori ẹrọ Google Kubernetes.


Ni otitọ, Emi, dajudaju, jẹ alaigbọran diẹ. O ti ro pe o ni o kere ju apakan ti awọn amayederun ninu awọsanma Google, ati, nitorinaa, o jẹ olumulo rẹ ati, dajudaju, o ni akọọlẹ GCP kan. Ṣugbọn kii ṣe ohun ti akọsilẹ yii jẹ nipa.

Eleyi jẹ mi tókàn cheat dì. Mo fẹ kọ iru awọn akọsilẹ nikan ni ọran kan: Mo dojuko iṣoro kan, Emi lakoko ko mọ bi a ṣe le yanju rẹ, ojutu naa ko ṣe googled ti a ti ṣetan, nitorinaa Mo ṣe googled ni awọn apakan ati nikẹhin yanju iṣoro naa. Ati pe ni ọjọ iwaju, nigbati Mo gbagbe bii MO ṣe ṣe, Emi ko ni lati google ohun gbogbo lẹẹkansi ni nkan kan ati ṣajọ papọ, Mo kọ ara mi iru awọn iwe iyanjẹ.

be: 1. A kọ akọsilẹ naa "fun ara mi", fun ipa naa ti o dara ju asa ko waye. Inu mi dun lati ka awọn aṣayan “yoo ti dara julọ lati ṣe ni ọna yii” ninu awọn asọye.
2. Ti apakan ti a fi sii ti akọsilẹ ba jẹ iyọ, lẹhinna, gẹgẹbi gbogbo awọn akọsilẹ mi ti tẹlẹ, eyi jẹ iyọ iyọ ti ko lagbara.

Nmu imudojuiwọn awọn eto iṣẹ ni Jenkins

Mo rii ibeere rẹ tẹlẹ: kini imudojuiwọn iṣẹ ti o ni agbara ni lati ṣe pẹlu rẹ? Tẹ iye ti paramita okun sii pẹlu ọwọ ati pa a lọ!

Mo dahun: Mo jẹ ọlẹ gaan, Emi ko fẹran rẹ nigbati wọn ba kerora: Misha, imuṣiṣẹ naa n kọlu, ohun gbogbo ti lọ! O bẹrẹ wiwa, ati pe typo kan wa ninu iye diẹ ninu paramita ifilọlẹ iṣẹ-ṣiṣe. Nitorina, Mo fẹ lati ṣe ohun gbogbo bi daradara bi o ti ṣee. Ti o ba ṣee ṣe lati ṣe idiwọ olumulo lati titẹ data taara nipa fifun ni dipo atokọ ti awọn iye lati yan lati, lẹhinna Mo ṣeto yiyan.

Eto naa ni eyi: a ṣẹda iṣẹ kan ni Jenkins, ninu eyiti, ṣaaju ifilọlẹ, a le yan ẹya kan lati atokọ naa, pato awọn iye fun awọn aye ti o kọja si eiyan nipasẹ ENV, lẹhinna o gba eiyan naa ki o si gbe e sinu Iforukọsilẹ Apoti. Lẹhinna lati ibẹ a ti ṣe ifilọlẹ eiyan ni cuber bi iṣẹ ṣiṣe pẹlu awọn paramita pato ninu awọn ise.

A kii yoo gbero ilana ti ṣiṣẹda ati ṣeto iṣẹ kan ni Jenkins, eyi jẹ koko-ọrọ. A yoo ro pe iṣẹ-ṣiṣe ti šetan. Lati ṣe atokọ imudojuiwọn pẹlu awọn ẹya, a nilo awọn nkan meji: atokọ orisun ti o wa pẹlu awọn nọmba ẹya iṣaaju ti o wulo ati oniyipada bii Iyan paramita ninu iṣẹ-ṣiṣe. Ninu apẹẹrẹ wa, jẹ ki a daruko oniyipada naa BUILD_VERSION, a ko ni gbe lori rẹ ni kikun. Ṣugbọn jẹ ki a ṣe akiyesi diẹ si atokọ orisun.

Ko si ọpọlọpọ awọn aṣayan. Awọn nkan meji wa si ọkan lẹsẹkẹsẹ:

  • Lo API Wiwọle Latọna jijin ti Jenkins nfunni si awọn olumulo rẹ;
  • Beere awọn akoonu ti folda ibi ipamọ latọna jijin (ninu ọran wa eyi ni JFrog Artifctory, eyiti ko ṣe pataki).

API Wiwọle Latọna jijin Jenkins

Gẹgẹbi aṣa ti o dara julọ ti iṣeto, Emi yoo fẹ lati yago fun awọn alaye gigun.
Emi yoo gba ara mi laaye nikan ni itumọ ọfẹ ti nkan kan ti paragi akọkọ oju-iwe akọkọ ti awọn iwe API:

Jenkins n pese API fun iraye si ẹrọ isakoṣo latọna jijin si iṣẹ ṣiṣe rẹ. <…> Wiwọle latọna jijin jẹ funni ni aṣa ti o dabi isinsin. Eyi tumọ si pe ko si aaye titẹsi kan si gbogbo awọn ẹya, ṣugbọn dipo URL kan bi ".../api/", Nibo"..." tumo si ohun ti o ti lo awọn agbara API si.

Ni awọn ọrọ miiran, ti iṣẹ imuṣiṣẹ ti a n sọrọ lọwọlọwọ wa ni http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, lẹhinna awọn whistles API fun iṣẹ yii wa ni http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Nigbamii ti, a ni yiyan ni iru fọọmu lati gba abajade. Jẹ ki a dojukọ XML, nitori API nikan ngbanilaaye sisẹ ninu ọran yii.

Jẹ ki a kan gbiyanju lati gba atokọ ti gbogbo awọn ṣiṣe iṣẹ. A nifẹ si orukọ apejọ nikan (fi oruko hanati abajade rẹ (esi):

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

Ṣẹlẹ?

Bayi jẹ ki a ṣe àlẹmọ awọn ṣiṣe nikan ti o pari pẹlu abajade Ayewo. Jẹ ki a lo ariyanjiyan naa &kuro ati bi paramita a yoo kọja si ọna si iye ti ko dọgba si Ayewo. Bẹẹni Bẹẹni. Odi meji jẹ ọrọ kan. A yọkuro ohun gbogbo ti ko nifẹ si wa:

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

Sikirinifoto ti atokọ ti aṣeyọri
A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

O dara, o kan fun igbadun, jẹ ki a rii daju pe àlẹmọ naa ko tan wa jẹ (awọn asẹ ko purọ rara!) Ati ṣafihan atokọ ti awọn “aṣeyọri”:

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

Sikirinifoto ti atokọ ti awọn ti kii ṣe aṣeyọri
A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

Akojọ awọn ẹya lati folda lori olupin latọna jijin

Ọna keji wa lati gba atokọ ti awọn ẹya. Mo fẹran rẹ paapaa diẹ sii ju iraye si Jenkins API. O dara, nitori ti o ba ti kọ ohun elo naa ni aṣeyọri, o tumọ si pe o ti ṣajọ ati gbe sinu ibi ipamọ ninu folda ti o yẹ. Bii, ibi ipamọ jẹ ibi ipamọ aifọwọyi ti awọn ẹya iṣẹ ti awọn ohun elo. Bi. Daradara, jẹ ki a beere lọwọ rẹ kini awọn ẹya ti o wa ni ipamọ. A yoo curl, grep ati awk folda latọna jijin naa. Ti enikeni ba nife si oneliner, lẹhinna o wa labẹ apanirun.

Ilana laini kan
Jọwọ ṣe akiyesi awọn nkan meji: Mo kọja awọn alaye asopọ ni akọsori ati Emi ko nilo gbogbo awọn ẹya lati inu folda, ati pe Mo yan awọn ti o ṣẹda nikan laarin oṣu kan. Ṣatunkọ aṣẹ lati ba awọn ohun gidi ati awọn iwulo rẹ mu:

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

Ṣiṣeto awọn iṣẹ ati faili iṣeto iṣẹ ni Jenkins

A ṣayẹwo jade awọn orisun ti awọn akojọ ti awọn ẹya. Jẹ ki a ni bayi ṣafikun atokọ abajade sinu iṣẹ-ṣiṣe naa. Fun mi, ojutu ti o han ni lati ṣafikun igbesẹ kan ninu iṣẹ ṣiṣe kikọ ohun elo. Igbesẹ ti yoo ṣe ti abajade ba jẹ “aṣeyọri”.

Ṣii awọn eto iṣẹ-ṣiṣe apejọ ki o yi lọ si isalẹ pupọ. Tẹ lori awọn bọtini: Ṣafikun igbesẹ kikọ -> Igbesẹ ipo (ẹyọkan). Ninu awọn eto igbese, yan ipo naa Ipo kikọ lọwọlọwọ, ṣeto iye Ayewo, igbese lati ṣe ti o ba ṣaṣeyọri Ṣiṣe aṣẹ ikarahun.

Ati nisisiyi apakan igbadun naa. Jenkins tọju awọn atunto iṣẹ ni awọn faili. Ni ọna kika XML. Ni ọna http://путь-до-задания/config.xml Nitorinaa, o le ṣe igbasilẹ faili iṣeto ni, satunkọ bi o ṣe pataki ki o fi sii pada si ibiti o ti gba.

Ranti, a gba loke pe a yoo ṣẹda paramita kan fun atokọ ti awọn ẹya BUILD_VERSION?

Jẹ ki a ṣe igbasilẹ faili iṣeto ni ki o wo inu rẹ. O kan lati rii daju pe paramita wa ni aaye ati ti iru ti o fẹ.

Sikirinifoto labẹ apanirun.

Ajẹkù config.xml rẹ yẹ ki o wo kanna. Ayafi ti awọn awọn akoonu ti awọn aṣayan ano sonu sibẹsibẹ
A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

Ṣe o da ọ loju? Iyẹn ni, jẹ ki a kọ iwe afọwọkọ kan ti yoo ṣiṣẹ ti kikọ ba ṣaṣeyọri.
Iwe afọwọkọ naa yoo gba atokọ ti awọn ẹya, ṣe igbasilẹ faili atunto, kọ atokọ awọn ẹya sinu rẹ ni aaye ti a nilo, lẹhinna fi sii pada. Bẹẹni. Iyẹn tọ. Kọ atokọ ti awọn ẹya ni XML ni aaye nibiti atokọ ti awọn ẹya ti wa tẹlẹ (yoo wa ni ọjọ iwaju, lẹhin ifilọlẹ akọkọ ti iwe afọwọkọ). Mo mọ pe awọn onijakidijagan imuna tun wa ti awọn ikosile deede ni agbaye. Emi ko jẹ ti wọn. Jọwọ fi sori ẹrọ xmlstarler si awọn ẹrọ ibi ti awọn konfigi yoo wa ni satunkọ. O dabi si mi pe eyi kii ṣe iru owo nla lati san lati yago fun ṣiṣatunkọ XML nipa lilo sed.

Labẹ apanirun, Mo ṣafihan koodu ti o ṣe ilana ti o wa loke ni gbogbo rẹ.

Kọ atokọ ti awọn ẹya lati folda kan lori olupin latọna jijin si atunto

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

Ti o ba fẹran aṣayan gbigba awọn ẹya lati ọdọ Jenkins ati pe o jẹ ọlẹ bi mi, lẹhinna labẹ apanirun jẹ koodu kanna, ṣugbọn atokọ kan lati Jenkins:

Kọ atokọ ti awọn ẹya lati Jenkins si atunto
O kan pa eyi mọ: orukọ apejọ mi ni nọmba ọkọọkan ati nọmba ẹya kan, ti o yapa nipasẹ oluṣafihan kan. Nitorinaa, awk ge apakan ti ko wulo. Fun ara rẹ, yi ila yii pada lati ba awọn iwulo rẹ baamu.

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

Ni imọran, ti o ba ti ni idanwo koodu ti a kọ da lori awọn apẹẹrẹ loke, lẹhinna ninu iṣẹ-ṣiṣe imuṣiṣẹ o yẹ ki o ti ni akojọ aṣayan-silẹ pẹlu awọn ẹya. O dabi ninu sikirinifoto labẹ apanirun.

Atokọ ti o ti pari ni pipe ti awọn ẹya
A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

Ti ohun gbogbo ba ṣiṣẹ, lẹhinna daakọ-lẹẹmọ iwe afọwọkọ sinu Ṣiṣe aṣẹ ikarahun ati fi awọn ayipada pamọ.

Nsopọ si ikarahun awọsanma

A ni awọn agbowọ inu awọn apoti. A lo Ansible bi ohun elo ifijiṣẹ ohun elo wa ati oluṣakoso iṣeto ni. Nitorinaa, nigbati o ba de awọn apoti kikọ, awọn aṣayan mẹta wa si ọkan: fi sori ẹrọ Docker ni Docker, fi sori ẹrọ Docker sori ẹrọ ti n ṣiṣẹ Ansible, tabi kọ awọn apoti sinu console awọsanma. A gba lati dakẹ nipa awọn afikun fun Jenkins ninu nkan yii. Ranti?

Mo pinnu: daradara, niwon awọn apoti “lati inu apoti” ni a le gba ni itunu awọsanma, lẹhinna kilode ti wahala? Jeki o mọ, ọtun? Mo fẹ lati gba awọn apoti Jenkins ninu console awọsanma, ati lẹhinna ṣe ifilọlẹ wọn sinu cuber lati ibẹ. Pẹlupẹlu, Google ni awọn ikanni ọlọrọ pupọ laarin awọn amayederun rẹ, eyiti yoo ni ipa anfani lori iyara ti imuṣiṣẹ.

Lati sopọ si console awọsanma, o nilo ohun meji: gcloud ati wiwọle awọn ẹtọ si Google awọsanma API fun apẹẹrẹ VM pẹlu eyiti asopọ kanna yoo ṣe.

Fun awọn ti o gbero lati sopọ kii ṣe lati awọsanma Google rara
Google ngbanilaaye seese lati mu aṣẹ ibanisọrọ ṣiṣẹ ni awọn iṣẹ rẹ. Eyi yoo gba ọ laaye lati sopọ si console paapaa lati ẹrọ kọfi kan, ti o ba nṣiṣẹ * nix ati pe o ni console funrararẹ.

Ti iwulo ba wa fun mi lati bo ọran yii ni awọn alaye diẹ sii laarin ilana ti akọsilẹ yii, kọ sinu awọn asọye. Ti a ba gba awọn ibo to to, Emi yoo kọ imudojuiwọn lori koko yii.

Ọna to rọọrun lati fun awọn ẹtọ ni nipasẹ wiwo wẹẹbu.

  1. Duro apẹẹrẹ VM lati eyiti iwọ yoo sopọ nigbamii si console awọsanma.
  2. Ṣii Awọn alaye Apeere ki o tẹ Ṣatunkọ.
  3. Ni isalẹ ti oju-iwe naa, yan aaye iwọle fun apẹẹrẹ Wiwọle ni kikun si gbogbo awọn API awọsanma.

    Иншот
    A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

  4. Fipamọ awọn ayipada rẹ ki o ṣe ifilọlẹ apẹẹrẹ.

Ni kete ti VM ti pari ikojọpọ, sopọ si rẹ nipasẹ SSH ati rii daju pe asopọ naa waye laisi aṣiṣe. Lo aṣẹ naa:

gcloud alpha cloud-shell ssh

Asopọmọra aṣeyọri dabi nkan bi eyi
A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

Firanṣẹ si GKE

Niwọn bi a ti n tiraka ni gbogbo ọna ti o ṣeeṣe lati yipada patapata si IaC (Amayederun bi koodu), awọn faili docker wa ni ipamọ ni Git. Eleyi jẹ lori awọn ọkan ọwọ. Ati imuṣiṣẹ ni kubernetes jẹ apejuwe nipasẹ faili yaml, eyiti o lo nipasẹ iṣẹ yii nikan, eyiti funrararẹ tun dabi koodu. Eyi wa lati apa keji. Ni gbogbogbo, Mo tumọ si, ero naa jẹ eyi:

  1. A gba awọn iye ti awọn oniyipada BUILD_VERSION ati, ni iyan, awọn iye ti awọn oniyipada ti yoo kọja nipasẹ ENV.
  2. Ṣe igbasilẹ faili docker lati Git.
  3. Ṣe ina yaml fun imuṣiṣẹ.
  4. A po si mejeji ti awọn wọnyi awọn faili nipasẹ scp si awọsanma console.
  5. A kọ eiyan kan nibẹ ki o si Titari rẹ sinu iforukọsilẹ Apoti
  6. A lo faili imuṣiṣẹ fifuye si cuber.

Jẹ ki a jẹ pato diẹ sii. Ni kete ti a bẹrẹ sọrọ nipa ENV, lẹhinna ro pe a nilo lati kọja awọn iye ti awọn paramita meji: PARAM1 и PARAM2. A ṣafikun iṣẹ-ṣiṣe wọn fun imuṣiṣẹ, iru - Okun Paramita.

Иншот
A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

A yoo ṣe ina yaml pẹlu itọsọna ti o rọrun iwoyi lati faili. O ti ro, nitorinaa, pe o ni ninu faili docker rẹ PARAM1 и PARAM2wipe fifuye orukọ yoo jẹ oniyiapp, ati apoti ti o pejọ pẹlu ohun elo ti ẹya pàtó kan wa ninu Eiyan iforukọsilẹ loju ọna gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONnibo $BUILD_VERSION o kan yan lati inu atokọ jabọ-silẹ.

Akojọ ẹgbẹ

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

Aṣoju Jenkins lẹhin sisopọ lilo gcloud Alpha awọsanma-ikarahun ssh Ipo ibaraenisọrọ ko si, nitorinaa a firanṣẹ awọn aṣẹ si console awọsanma nipa lilo paramita naa --aṣẹ.

A nu folda ile ninu console awọsanma lati faili docker atijọ:

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

Gbe dockerfile tuntun ti a gba lati ayelujara sinu folda ile ti console awọsanma nipa lilo scp:

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

A gba, samisi ati Titari apoti naa si iforukọsilẹ Apoti:

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"

A ṣe kanna pẹlu faili imuṣiṣẹ. Jọwọ ṣe akiyesi pe awọn aṣẹ ti o wa ni isalẹ lo awọn orukọ irokuro ti iṣupọ nibiti imuṣiṣẹ naa ti waye (awsm-cluster) ati orukọ ise agbese (oniyi-ise agbese), nibiti iṣupọ naa wa.

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"

A ṣiṣẹ iṣẹ-ṣiṣe naa, ṣii iṣelọpọ console ati nireti lati rii apejọ aṣeyọri ti eiyan naa.

Иншот
A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

Ati lẹhinna imuṣiṣẹ aṣeyọri ti eiyan ti a ti ṣajọpọ

Иншот
A ṣẹda iṣẹ-ṣiṣe imuṣiṣẹ ni GKE laisi awọn afikun, SMS tabi iforukọsilẹ. Jẹ ki a yoju labẹ jaketi Jenkins

Mo mọọmọ foju pa eto naa Ingress. Fun idi kan ti o rọrun: ni kete ti o ba ṣeto iṣẹ ṣiṣe pẹlu orukọ ti a fun, yoo wa ni ṣiṣiṣẹ, laibikita iye awọn imuṣiṣẹ pẹlu orukọ yii ti o ṣe. O dara, ni gbogbogbo, eyi jẹ diẹ ti o kọja opin itan.

Dipo awọn ipinnu

Gbogbo awọn igbesẹ ti o wa loke jasi ko le ṣe, ṣugbọn fi sori ẹrọ diẹ ninu ohun itanna fun Jenkins, muuulion wọn. Ṣugbọn fun idi kan Emi ko fẹ awọn afikun. O dara, ni deede diẹ sii, Mo lo si wọn nikan nitori ainireti.

Ati ki o Mo kan fẹ lati gbe soke diẹ ninu awọn titun koko fun mi. Ọrọ ti o wa loke tun jẹ ọna lati pin awọn awari ti Mo ṣe lakoko ti o yanju iṣoro ti a ṣalaye ni ibẹrẹ. Pin pẹlu awọn ti o, bi rẹ, ni o wa ko ni gbogbo a dire Ikooko ni devops. Ti awọn awari mi ba ṣe iranlọwọ ni o kere ju ẹnikan, Emi yoo dun.

orisun: www.habr.com

Fi ọrọìwòye kun