Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Hakan ya fara ne lokacin da jagoran ƙungiyar ɗaya daga cikin ƙungiyoyin ci gabanmu suka nemi mu gwada sabon aikace-aikacen su, wanda aka ajiye a ranar da ta gabata. Na buga shi. Bayan kamar mintuna 20, an sami buƙatar sabunta aikace-aikacen, saboda an ƙara wani abu mai mahimmanci a wurin. na sabunta Bayan wasu sa'o'i biyu ... da kyau, kuna iya tunanin abin da ya fara faruwa a gaba ...

Dole ne in yarda, Ina da kasala (ba na shigar da wannan a baya ba? A'a?), Kuma da aka ba da gaskiyar cewa tawagar take kaiwa zuwa Jenkins, a cikin abin da muke da dukan CI / CD, na yi tunani: bar shi tura as yadda yake so ! Na tuna da wata wasa: a ba mutum kifi ya ci kwana ɗaya; a kira mutum ya ci abinci za a ci shi duk tsawon rayuwarsa. Ya tafi wasa dabaru a kan aikin, wanda zai iya tura akwati mai kunshe da aikace-aikacen kowane sigar da aka samu nasarar ginawa cikin Kuber da canja wurin kowane ƙima zuwa gare ta. ENV (kakana, masanin ilimin falsafa, malamin Ingilishi a da, yanzu zai karkata yatsansa zuwa haikalinsa ya dube ni sosai bayan karanta wannan jimla).

Don haka, a cikin wannan bayanin zan gaya muku yadda na koya:

  1. Ƙaddamar da sabunta ayyuka a Jenkins daga aikin kanta ko daga wasu ayyuka;
  2. Haɗa zuwa na'ura mai kwakwalwa (Cloud harsashi) daga kumburi tare da wakilin Jenkins da aka shigar;
  3. Sanya kayan aiki zuwa Injin Kubernetes Google.


A gaskiya, ni, ba shakka, kasancewa mai ɗan rashin hankali ne. Ana ɗauka cewa kana da aƙalla ɓangaren abubuwan more rayuwa a cikin girgijen Google, don haka, kai ne mai amfani da shi kuma, ba shakka, kana da asusun GCP. Amma wannan ba shine abin da wannan bayanin ke nufi ba.

Wannan ita ce takardar yaudarata ta gaba. Ina so in rubuta irin waɗannan bayanan ne kawai a cikin akwati ɗaya: Na fuskanci matsala, tun da farko ban san yadda zan magance ta ba, maganin ba a googled da shiri ba, don haka na yi google a sassa kuma na warware matsalar. Kuma ta yadda a nan gaba, idan na manta yadda na yi shi, ba sai na sake google komai gunki-daki in hada shi tare ba, na rubuta wa kaina irin wannan zanen yaudara.

Disclaimer: 1. An rubuta bayanin kula "don kaina", don rawar mafi kyau baya amfani. Ina farin cikin karanta "zai fi kyau a yi shi ta wannan hanya" zažužžukan a cikin sharhin.
2. Idan sashin da aka yi amfani da shi yana dauke da gishiri, to, kamar duk bayanan da na gabata, wannan shine maganin gishiri mai rauni.

Tsayawa yana sabunta saitunan ayyuka a Jenkins

Na hango tambayar ku: mene ne alakar sabuntawar aiki mai tsauri da ita? Shigar da ƙimar ma'aunin kirtani da hannu kuma a kashe ka tafi!

Na amsa: Ina da raƙuman gaske, ba na son shi lokacin da suka yi gunaguni: Misha, ƙaddamarwa yana rushewa, komai ya tafi! Kun fara dubawa, kuma akwai typo a cikin ƙimar wasu sigogin ƙaddamar da ɗawainiya. Saboda haka, na fi son yin komai da kyau yadda ya kamata. Idan yana yiwuwa a hana mai amfani daga shigar da bayanai kai tsaye ta hanyar ba da jerin ƙimar da za a zaɓa daga, to, na tsara zaɓin.

Shirin shine wannan: mun ƙirƙiri aiki a Jenkins, wanda, kafin ƙaddamarwa, za mu iya zaɓar sigar daga jerin, ƙididdige ƙimar sigogin da aka wuce zuwa akwati ta hanyar. ENV, sannan ta tattara kwandon ta tura ta cikin Registry Container. Sannan daga nan aka harba kwantena a cikin cuber kamar aikin aiki tare da sigogi da aka ƙayyade a cikin aikin.

Ba za mu yi la'akari da tsarin ƙirƙira da kafa aiki a Jenkins ba, wannan ba batu ba ne. Za mu ɗauka cewa aikin yana shirye. Don aiwatar da jerin abubuwan da aka sabunta tare da nau'ikan, muna buƙatar abubuwa biyu: jerin tushen da ke akwai tare da lambobi masu inganci na priori da m kamar haka. Sigar zaɓi cikin aikin. A cikin misalinmu, bari a saka ma mai canjin suna BUILD_VERSION, ba za mu tsaya a kansa daki-daki ba. Amma bari mu dubi jerin tushen.

Babu zaɓuɓɓuka masu yawa. Nan take abubuwa biyu suka fado a rai:

  • Yi amfani da API ɗin samun nisa wanda Jenkins ke bayarwa ga masu amfani da shi;
  • Nemi abin da ke cikin babban fayil ɗin ma'ajiya mai nisa (a cikin yanayinmu wannan JFrog Artifatory ne, wanda ba shi da mahimmanci).

API ɗin Jenkins Remote access

Bisa ga ingantaccen al'adar da aka kafa, zan fi son in guje wa dogon bayani.
Zan ƙyale kaina kawai fassarar kyauta na yanki na sakin layi na farko shafi na farko na takardun API:

Jenkins yana ba da API don samun damar karanta na'ura mai nisa zuwa aikinsa. <…> Ana ba da damar shiga nesa a cikin salo mai kama da REST. Wannan yana nufin cewa babu wurin shigarwa guda ɗaya ga duk fasalulluka, amma a maimakon haka URL kamar ".../api/", ku"..." yana nufin abin da ake amfani da damar API zuwa gare shi.

A wasu kalmomi, idan aikin turawa da muke magana a yanzu yana samuwa a http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, to ana samun buhun API na wannan aikin a http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Na gaba, muna da zaɓi a cikin wane nau'i don karɓar fitarwa. Bari mu mai da hankali kan XML, tunda API kawai yana ba da izinin tacewa a cikin wannan yanayin.

Bari mu gwada kawai don samun jerin duk ayyukan da ke gudana. Muna sha'awar sunan taron ne kawai (nuni Sunan) da sakamakonsa (sakamakon):

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

Shin ya yi aiki?

Yanzu bari mu tace kawai waɗancan gudu waɗanda suka ƙare da sakamakon SUCCESS. Mu yi amfani da hujja &ban kuma a matsayin ma'auni za mu wuce ta hanyar zuwa darajar da ba ta kai ba SUCCESS. Na iya. Labari mara kyau biyu shine sanarwa. Mun ware duk abin da ba ya sha'awar mu:

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

Hoton hoto na jerin masu nasara
Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Da kyau, kawai don jin daɗi, bari mu tabbatar cewa tacewa bai yaudare mu ba (matattarar ba ta taɓa yin ƙarya ba!) Da kuma nuna jerin “marasa nasara”:

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

Hoton hoto na jerin waɗanda ba su yi nasara ba
Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Jerin sigogin daga babban fayil akan sabar mai nisa

Akwai hanya ta biyu don samun jerin nau'ikan. Ina son shi har ma fiye da samun damar Jenkins API. To, domin idan an yi nasarar gina aikace-aikacen, yana nufin an shirya shi kuma an sanya shi a cikin ma'ajin a cikin babban fayil ɗin da ya dace. Kamar, ma'adana ita ce tsohuwar ma'adanar nau'ikan aikace-aikace. Kamar. To, bari mu tambaye shi abin da iri ne a cikin ajiya. Za mu nannade, grep da kuma awk babban fayil mai nisa. Idan wani yana sha'awar oneliner, to yana ƙarƙashin mai ɓarna.

Umurnin layi daya
Da fatan za a lura da abubuwa biyu: Na wuce bayanan haɗin kai a cikin taken kuma ba na buƙatar duk sigogin daga babban fayil ɗin, kuma na zaɓi waɗanda aka ƙirƙira a cikin wata ɗaya kawai. Shirya umarnin don dacewa da gaskiyar ku da buƙatunku:

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

Saita ayyuka da fayil ɗin daidaita aiki a Jenkins

Mun gano tushen jerin sigogin. Yanzu bari mu haɗa jerin abubuwan da aka samo a cikin aikin. A gare ni, bayyanannen bayani shine ƙara mataki a cikin aikin gina aikace-aikacen. Matakin da za a aiwatar idan sakamakon ya kasance "nasara".

Buɗe saitunan ɗawainiya kuma gungura zuwa ƙasa. Danna maballin: Ƙara matakin ginawa -> Matsayin sharadi (ɗaya ɗaya). A cikin saitunan mataki, zaɓi yanayin Matsayin gini na yanzu, saita darajar SUCCESS, aikin da za a yi idan an yi nasara Gudun umarnin harsashi.

Kuma yanzu bangaren fun. Jenkins yana adana saitunan aiki a cikin fayiloli. A cikin tsarin XML. Tare da hanya http://путь-до-задания/config.xml Don haka, zaku iya zazzage fayil ɗin sanyi, gyara shi yadda ya kamata sannan ku mayar da shi inda kuka samo shi.

Ka tuna, mun yarda a sama cewa za mu ƙirƙiri siga don jerin nau'ikan BUILD_VERSION?

Bari mu zazzage fayil ɗin sanyi kuma mu duba cikinsa. Kawai don tabbatar da cewa siga yana cikin wuri da nau'in da ake so.

Screenshot a ƙarƙashin ɓarna.

Ya kamata juzu'in config.xml ɗinku yayi kama da haka. Sai dai abin da ke cikin ɓangaren zaɓi ya ɓace har yanzu
Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Ka tabbata? Shi ke nan, bari mu rubuta rubutun da za a aiwatar idan ginin ya yi nasara.
Rubutun zai karɓi jerin nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan nau'ikan, zazzage fayil ɗin daidaitawa, rubuta jerin juzu'in cikinsa a cikin inda muke buƙata, sannan a mayar da shi. Ee. Haka ne. Rubuta jerin nau'ikan a cikin XML a wurin da aka riga an sami jerin nau'ikan (zai kasance a nan gaba, bayan ƙaddamar da rubutun na farko). Na san har yanzu akwai matsananciyar magoya bayan maganganun yau da kullun a cikin duniya. Ba nasu bane. Da fatan za a shigar xmlstarler zuwa na'ura inda za'a gyara saitin. Ga alama a gare ni cewa wannan ba irin wannan babban farashi ba ne da za a biya don guje wa gyara XML ta amfani da sed.

A ƙarƙashin mai ɓarna, Ina gabatar da lambar da ke aiwatar da jerin abubuwan da ke sama gaba ɗaya.

Rubuta jerin sifofi daga babban fayil akan uwar garken nesa zuwa daidaitawa

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

Idan kun fi son zaɓi na samun nau'ikan Jenkins kuma kun kasance malala kamar ni, to a ƙarƙashin mai ɓarna shine lambar guda ɗaya, amma jeri daga Jenkins:

Rubuta jerin nau'ikan daga Jenkins zuwa tsarin saiti
Kawai a tuna da wannan: Sunan taro na ya ƙunshi jerin jerin lambobi da lambar sigar, wanda hanji ya raba. Saboda haka, awk yana yanke sashin da ba dole ba. Don kanka, canza wannan layin don dacewa da bukatun ku.

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

A ka'idar, idan kun gwada lambar da aka rubuta bisa ga misalan da ke sama, to a cikin aikin turawa ya kamata ku riga kuna da jerin abubuwan da za ku iya saukewa tare da sigogi. Kamar a cikin hoton allo a ƙarƙashin mai ɓarna.

Jerin nau'ikan da aka kammala daidai
Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Idan komai ya yi aiki, to kwafi-manna rubutun a ciki Gudun umarnin harsashi kuma ajiye canje-canje.

Haɗa zuwa Cloud harsashi

Muna da masu tarawa a cikin kwantena. Muna amfani da Mai yiwuwa azaman kayan aikin isar da aikace-aikacen mu da manajan daidaitawa. Don haka, idan ana maganar ginin kwantena, zaɓuɓɓuka guda uku suna zuwa a hankali: shigar da Docker a Docker, shigar da Docker akan injin da ke aiki Mai yiwuwa, ko gina kwantena a cikin na'ura mai kwakwalwa. Mun yarda mu yi shiru game da plugins don Jenkins a cikin wannan labarin. Ka tuna?

Na yanke shawarar: da kyau, tun da ana iya tattara kwantena "daga cikin akwatin" a cikin na'ura mai kwakwalwa, to me yasa damuwa? Tsaftace shi, dama? Ina so in tattara kwantena Jenkins a cikin na'ura mai ba da hanya tsakanin hanyoyin sadarwa, sa'an nan kuma kaddamar da su a cikin cuber daga can. Bugu da ƙari, Google yana da tashoshi masu wadata a cikin kayan aikin sa, wanda zai yi tasiri mai amfani akan saurin turawa.

Don haɗi zuwa na'ura mai ba da hanya tsakanin hanyoyin sadarwa, kuna buƙatar abubuwa biyu: gcloud da samun dama ga Google Cloud API ga misalin VM wanda za a yi wannan haɗin kai da shi.

Ga waɗanda suka yi shirin haɗa ba daga Google girgije kwata-kwata
Google yana ba da damar yuwuwar kashe izinin mu'amala a cikin ayyukan sa. Wannan zai baka damar haɗi zuwa na'ura mai kwakwalwa koda daga na'urar kofi, idan yana gudana * nix kuma yana da na'ura mai kwakwalwa da kanta.

Idan akwai bukatar in rufe wannan batu dalla-dalla a cikin tsarin wannan bayanin, rubuta a cikin sharhi. Idan mun sami isassun kuri'u, zan rubuta sabuntawa kan wannan batu.

Hanya mafi sauƙi don ba da haƙƙoƙi ita ce ta hanyar haɗin yanar gizo.

  1. Dakatar da misalin VM wanda daga baya zaku haɗa zuwa na'ura mai ba da hanya tsakanin hanyoyin sadarwa.
  2. Bude Bayanin Misali kuma danna gyara.
  3. A kasan shafin, zaɓi wurin samun damar misali Cikakken damar zuwa duk Cloud APIs.

    Screenshot
    Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

  4. Ajiye canje-canjenku kuma kaddamar da misalin.

Da zarar VM ya gama lodawa, haɗa shi ta hanyar SSH kuma tabbatar cewa haɗin yana faruwa ba tare da kuskure ba. Yi amfani da umarnin:

gcloud alpha cloud-shell ssh

Haɗin mai nasara yana kama da wani abu kamar wannan
Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Tukar zuwa GKE

Tunda muna ƙoƙari ta kowace hanya mai yuwuwa don canzawa gaba ɗaya zuwa IaC (Infrasture as a Code), ana adana fayilolin docker ɗin mu a Git. Wannan a gefe guda ne. Kuma ƙaddamarwa a cikin kubernetes an kwatanta shi ta hanyar fayil ɗin yaml, wanda kawai wannan aikin ke amfani da shi, wanda kansa ma kamar code ne. Wannan daga wancan bangaren ne. Gabaɗaya, ina nufin, shirin shine:

  1. Muna ɗaukar ƙimar masu canji BUILD_VERSION kuma, na zaɓi, ƙimar masu canji waɗanda za a wuce ta ENV.
  2. Zazzage fayil ɗin docker daga Git.
  3. Ƙirƙirar yaml don turawa.
  4. Muna loda waɗannan fayilolin guda biyu ta hanyar scp zuwa na'ura mai kwakwalwa ta girgije.
  5. Muna gina akwati a can kuma mu tura shi cikin rajistar Kwantena
  6. Muna amfani da fayil ɗin jigilar kaya zuwa cuber.

Bari mu zama mafi takamaiman. Da zarar mun fara magana ENV, to, a ce muna buƙatar wuce ƙimar sigogi biyu: PARAM1 и PARAM2. Muna ƙara aikin su don turawa, nau'in - Sigar Sigar.

Screenshot
Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Za mu samar da yaml tare da juyawa mai sauƙi Kira da fayil. An ɗauka, ba shakka, cewa kana da a cikin dockerfile PARAM1 и PARAM2cewa load sunan zai zama abin mamaki, da akwati da aka haɗa tare da aikace-aikacen ƙayyadaddun sigar yana cikin Rijistar kwantena kan hanya gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONinda $BUILD_VERSION kawai aka zaba daga jerin abubuwan da aka saukar.

Jerin ƙungiyar

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

Wakilin Jenkins bayan haɗawa ta amfani da gcloud alfa girgije-harsashi ssh Yanayin ma'amala ba ya samuwa, don haka muna aika umarni zuwa na'ura mai kwakwalwa ta girgije ta amfani da siga --umarni.

Muna share babban fayil ɗin gida a cikin na'ura mai ba da hanya tsakanin hanyoyin sadarwa daga tsohon dockerfile:

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

Sanya dockerfile da aka zazzage sabo a cikin babban fayil ɗin girgije na girgije ta amfani da scp:

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

Muna tattarawa, yiwa alama da tura akwati zuwa wurin rajistar Kwantena:

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"

Muna yin haka tare da fayil ɗin turawa. Lura cewa umarnin da ke ƙasa suna amfani da sunaye na ƙagaggen gungu inda turawa ke faruwa (ausm-cluster) da sunan aikin (m-aiki), inda gungu yake.

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"

Muna gudanar da aikin, buɗe kayan aikin wasan bidiyo kuma muna fatan ganin taron babban akwati mai nasara.

Screenshot
Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Sa'an nan kuma nasarar ƙaddamar da kwandon da aka haɗa

Screenshot
Muna ƙirƙirar aikin turawa a GKE ba tare da plugins, SMS ko rajista ba. Bari mu kalli a ƙarƙashin jaket na Jenkins

Na yi watsi da saitin da gangan Ingress. Don dalili ɗaya mai sauƙi: da zarar kun saita shi aikin aiki tare da suna, zai ci gaba da aiki, komai yawan turawa da wannan sunan da kuka yi. To, a dunkule, wannan kadan ya wuce iyakar tarihin.

Maimakon yanke shawara

Duk matakan da ke sama tabbas ba za a yi su ba, amma kawai shigar da wasu plugins don Jenkins, muuulion ɗin su. Amma saboda wasu dalilai ba na son plugins. To, dai-dai da dai-dai, na yi amfani da su ne kawai saboda rashin bege.

Kuma ina so kawai in ɗauko mini wani sabon batu. Rubutun da ke sama kuma hanya ce ta raba binciken da na yi yayin warware matsalar da aka bayyana a farkon. Raba tare da waɗanda, kamar shi, ba kwata-kwata ba ne kerkeci a cikin ɓangarorin. Idan bincikena ya taimaka aƙalla wani, zan yi farin ciki.

source: www.habr.com

Add a comment