Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

Ua hoʻomaka ia i ka wā i noi ai ke alakaʻi o kekahi o kā mākou hui hoʻomohala iā mākou e hoʻopuka i kā lākou noi hou, i hoʻopaʻa ʻia i ka lā ma mua, ma ke ʻano hoʻāʻo. Ua kau au. Ma hope o 20 mau minuke, ua loaʻa kahi noi e hoʻonui i ka noi, no ka mea, ua hoʻohui ʻia kahi mea pono loa ma laila. Ua hou au. Ma hope o nā hola ʻelua... ʻoi, hiki iā ʻoe ke koho i ka mea i hoʻomaka e hana aʻe...

Pono wau e ʻae, ua palaualelo loa wau (ʻaʻole anei au i ʻae i kēia ma mua? ʻAʻole?), A hāʻawi ʻia i ka hiki ke alakaʻi i nā hui iā Jenkins, kahi i loaʻa iā mākou nā CI / CD āpau, manaʻo wau: e hoʻonoho iā ia e like me e like me kona makemake ! Hoʻomanaʻo wau i kahi ʻakaʻaka: hāʻawi i ke kanaka i iʻa a ʻai ʻo ia no kahi lā; e kāhea i kahi kanaka Fed a e hānai ʻia ʻo ia i kona ola a pau. A hele aku la pāʻani hoʻopunipuni ma ka hana, hiki iā ia ke kau i kahi pahu i loaʻa i ka noi o nā mana i kūkulu ʻia i loko o Kuber a hoʻoili i nā waiwai i laila. ʻO ENV (ʻO koʻu kupunakāne, he philologist, he kumu ʻōlelo Pelekania i ka wā ma mua, e wili i kona manamana lima ma kona luakini a nānā pono mai iaʻu ma hope o ka heluhelu ʻana i kēia ʻōlelo).

No laila, ma kēia memo e haʻi aku wau iā ʻoe pehea wau i aʻo ai:

  1. Hoʻololi hou i nā hana ma Jenkins mai ka hana ponoʻī a mai nā hana ʻē aʻe;
  2. Hoʻohui i ka console cloud (Cloud shell) mai kahi node i hoʻokomo ʻia ka luna Jenkins;
  3. E hoʻouka i ka ukana hana ma Google Kubernetes Engine.


ʻOiaʻiʻo, ʻo wau, ʻoiaʻiʻo, he ʻano hoʻopunipuni wau. Ua manaʻo ʻia aia ʻoe ma kahi liʻiliʻi o ka ʻōnaehana ma ke ao Google, a no laila, ʻo ʻoe ka mea hoʻohana a, ʻoiaʻiʻo, he moʻokāki GCP kāu. Akā ʻaʻole ia ka mea e pili ana i kēia memo.

ʻO kēia kaʻu palapala hoʻopunipuni aʻe. Makemake wale au e kākau i kēlā mau memo i hoʻokahi hihia: Ua loaʻa iaʻu kahi pilikia, ʻaʻole wau i ʻike mua pehea e hoʻoponopono ai, ʻaʻole i hoʻomākaukau ʻia ka hopena, no laila ua huli au i nā ʻāpana a hoʻopau i ka pilikia. A i ka wā e hiki mai ana, ke poina iaʻu i kaʻu hana ʻana, ʻaʻole pono iaʻu e google hou i nā mea āpau a hui pū, kākau wau iaʻu iho i nā pepa hoʻopunipuni.

Akahana: 1. Ua kākau ʻia ka memo "noʻu iho", no ke kuleana maikaʻiʻoi ʻaʻole pili. Hauʻoli wau i ka heluhelu ʻana i nā koho "ʻoi aku ka maikaʻi o ka hana ʻana i kēia ala" i nā ʻōlelo.
2. Inā manaʻo ʻia he paʻakai ka ʻāpana i hoʻohana ʻia o ka memo, a laila, e like me kaʻu mau memo mua, he wai paʻakai nāwaliwali kēia.

Hoʻohou hou i nā hoʻonohonoho hana ma Jenkins

ʻIke au i kāu nīnau: he aha ka pili o ka hoʻonui ʻana i ka hana me ia? E hoʻokomo lima i ka waiwai o ke kaula string a hele aku!

Pane au: Ua palaualelo loa au, ʻaʻole au makemake i ka wā e hoʻopiʻi ai lākou: Misha, ua hāʻule ka hoʻolaha, ua pau nā mea āpau! Hoʻomaka ʻoe e nānā, a aia kekahi typo i ka waiwai o kekahi ʻāpana hoʻomaka hana. No laila, makemake wau e hana i nā mea āpau me ka hiki. Inā hiki ke pale i ka mea hoʻohana mai ke komo pololei ʻana i ka ʻikepili ma ka hāʻawi ʻana i kahi papa inoa o nā waiwai e koho ai, a laila hoʻonohonoho wau i ke koho.

ʻO kēia ka hoʻolālā: hana mākou i kahi hana ma Jenkins, kahi, ma mua o ka hoʻomaka ʻana, hiki iā mākou ke koho i kahi mana mai ka papa inoa, e kuhikuhi i nā waiwai no nā ʻāpana i hāʻawi ʻia i ka ipu ma o ʻO ENV, a laila hōʻiliʻili ʻo ia i ka ipu a hoʻokuʻu iā ia i loko o ka Container Registry. A laila hoʻokuʻu ʻia ka ipu i loko o ka cuber as hana pāʻoihana me nā palena i kuhikuhi ʻia ma ka hana.

ʻAʻole mākou e noʻonoʻo i ke kaʻina hana o ka hana ʻana a me ka hoʻonohonoho ʻana i kahi hana ma Jenkins, ʻaʻole kēia kumuhana. E manaʻo mākou ua mākaukau ka hana. No ka hoʻokō ʻana i kahi papa inoa hou me nā mana, pono mākou i ʻelua mau mea: kahi papa inoa kumu i loaʻa me nā helu mana mua a me kahi ʻano like. Koho koho i ka hana. I kā mākou laʻana, e kapa ʻia ka inoa BUILD_VERSION, ʻaʻole mākou e kamaʻilio kikoʻī. Akā, e nānā pono kākou i ka papa inoa kumu.

ʻAʻole nui nā koho. ʻElua mau mea i manaʻo koke ʻia:

  • E hoʻohana i ka API komo mamao i hāʻawi ʻia e Jenkins i kāna mea hoʻohana;
  • E noi i nā ʻike o ka waihona waihona mamao (i kā mākou hihia ʻo JFrog Artifactory kēia, ʻaʻole ia he mea nui).

API komo mamao ʻo Jenkins

Wahi a ka moʻomeheu maikaʻi loa, makemake wau e pale i nā wehewehe lōʻihi.
E ʻae wau iaʻu iho i unuhi manuahi o kahi ʻāpana o ka paukū mua ʻaoʻao mua o ka palapala API:

Hāʻawi ʻo Jenkins i API no ka hiki ke heluhelu ʻia e ka mīkini mamao i kāna hana. <…> Hāʻawi ʻia ke komo mamao ma kahi ʻano like me REST. ʻO ia hoʻi, ʻaʻohe wahi komo hoʻokahi i nā hiʻohiʻona a pau, akā he URL e like me ".../api/", Ma hea"..." 'o ia hoʻi ka mea i hoʻohana ʻia ai nā mana API.

I nā huaʻōlelo ʻē aʻe, inā loaʻa ka hana deployment a mākou e kamaʻilio nei i kēia manawa http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, a laila, loaʻa nā puʻupuʻu API no kēia hana ma http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

A laila, loaʻa iā mākou kahi koho i ke ʻano e loaʻa ai ka hopena. E noʻonoʻo kākou i ka XML, no ka mea, hiki wale i ka API ke kānana i kēia hihia.

E ho'āʻo wale kākou e kiʻi i ka papa inoa o nā holo hana a pau. Makemake wale mākou i ka inoa hui (inoa hōʻike) a me kona hopena (result):

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

Ua hana?

I kēia manawa, e kānana kāua i kēlā mau holo i pau i ka hopena KEKAHI. E hoʻohana kākou i ka hoʻopaʻapaʻa & wehe a ma ke ʻano he ʻāpana, e hele mākou i ke ala i kahi waiwai ʻaʻole like KEKAHI. Ae 'ae. ʻO ka ʻōlelo ʻino ʻelua he ʻōlelo. Hoʻokuʻu mākou i nā mea a pau i makemake ʻole iā mākou:

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

Kiʻi kiʻi o ka papa inoa o ka holomua
Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

ʻAe, no ka leʻaleʻa wale nō, e hōʻoia mākou ʻaʻole i hoʻopunipuni ka kānana iā mākou (ʻaʻole wahaheʻe nā kānana!) A hōʻike i kahi papa inoa o nā mea "kūpono ʻole":

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

Kiʻi kiʻi o ka papa inoa o nā mea i holomua ʻole
Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

Ka papa inoa o nā mana mai kahi waihona ma kahi kikowaena mamao

Aia kekahi ala ʻelua e loaʻa ai kahi papa inoa o nā mana. Makemake au iā ia ma mua o ke komo ʻana i ka Jenkins API. ʻAe, no ka mea inā ua hoʻokumu maikaʻi ʻia ka noi, ʻo ia ka mea i hoʻopili ʻia a waiho ʻia i loko o ka waihona i loko o ka waihona kūpono. E like me, ʻo kahi waihona kahi mālama paʻamau o nā mana hana o nā noi. Like. ʻAe, e nīnau kākou iā ia he aha nā mana i loko o ka waihona. Hoʻopili mākou, grep a awk i ka waihona mamao. Inā makemake kekahi i ka oneliner, aia ma lalo o ka mea hao.

Hoʻokahi laina kauoha
E ʻoluʻolu e hoʻomaopopo i nā mea ʻelua: Ke hāʻawi nei au i nā kikoʻī pili i ke poʻo a ʻaʻole pono wau i nā mana āpau mai ka waihona, a koho wau i nā mea i hana ʻia i loko o hoʻokahi mahina. Hoʻoponopono i ke kauoha e kūpono i kāu mau mea maoli a me kou pono:

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

Hoʻonohonoho i nā hana a me ka faila hoʻonohonoho hana ma Jenkins

Ua ʻike mākou i ke kumu o ka papa inoa o nā mana. E hoʻokomo i ka papa inoa o ka hopena i loko o ka hana. Noʻu, ʻo ka hoʻonā ʻike ʻia ʻo ka hoʻohui ʻana i kahi ʻanuʻu i ka hana kūkulu noi. ʻO ka ʻanuʻu e hoʻokō ʻia inā "holomua" ka hopena.

E wehe i nā hoʻonohonoho hana hui a ʻōwili i lalo loa. Kaomi ma nā pihi: Hoʻohui i ka hana kūkulu -> Kūlana kūlana (hoʻokahi). Ma nā hoʻonohonoho ʻanuʻu, koho i ke kūlana Kūlana kūkulu i kēia manawa, hoonoho i ka waiwai KEKAHI, ka hana e hana ʻia inā kūleʻa E holo i ke kauoha shell.

A i kēia manawa ka ʻāpana leʻaleʻa. Mālama ʻo Jenkins i nā hoʻonohonoho hana ma nā faila. Ma ka palapala XML. Ma ke ala http://путь-до-задания/config.xml No laila, hiki iā ʻoe ke hoʻoiho i ka faila hoʻonohonoho, hoʻoponopono iā ia e like me ka mea e pono ai a hoʻihoʻi i kahi āu i loaʻa ai.

E hoʻomanaʻo, ua ʻae mākou ma luna e hana mākou i kahi ʻāpana no ka papa inoa o nā mana BUILD_VERSION?

E hoʻoiho i ka faila hoʻonohonoho a nānā i loko. E hōʻoia wale i ka paʻa ʻana o ka parameter a me ke ʻano makemake.

Kiʻi ma lalo o ka spoiler.

Pono ke ʻano o kāu ʻāpana config.xml. ʻAʻole naʻe nā ʻike o nā mea koho
Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

He ʻoiaʻiʻo kēnā? ʻO ia wale nō, e kākau kākou i palapala e hoʻokō ʻia inā holomua ka kūkulu ʻana.
E loaʻa i ka palapala kahi papa inoa o nā mana, e hoʻoiho i ka faila hoʻonohonoho, e kākau i ka papa inoa o nā mana i loko o kahi e pono ai mākou, a laila e hoʻihoʻi. ʻAe. Pololei kēnā. E kākau i kahi papa inoa o nā mana ma XML ma kahi i loaʻa ai kahi papa inoa o nā mana (e hiki mai ana, ma hope o ka hoʻomaka mua ʻana o ka palapala). Ua ʻike au aia nō ka poʻe makemake nui i nā ʻōlelo maʻamau i ka honua. Aole au no lakou. E ʻoluʻolu e hoʻokomo xmlstarler i ka mīkini kahi e hoʻoponopono ʻia ai ka config. Me he mea lā ʻaʻole kēia he kumukūʻai nui e uku e pale aku i ka hoʻoponopono XML me ka hoʻohana ʻana i ka sed.

Ma lalo o ka spoiler, ke hōʻike nei au i ke code e hoʻokō nei i ke kaʻina o luna i kona holoʻokoʻa.

Kākau i ka papa inoa o nā mana mai kahi waihona ma ka kikowaena mamao i ka 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

Inā makemake ʻoe i ke koho o ka loaʻa ʻana o nā mana mai Jenkins a ua palaualelo ʻoe e like me aʻu, a laila ma lalo o ka mea hao ke code like, akā he papa inoa mai Jenkins:

E kākau i kahi papa inoa o nā mana mai Jenkins i ka config
E hoʻomanaʻo wale i kēia: aia koʻu inoa hui i kahi helu kaʻina a me kahi helu mana, i hoʻokaʻawale ʻia e kahi kolone. No laila, ʻoki ʻo awk i ka ʻāpana pono ʻole. Nou iho, e hoʻololi i kēia laina e kūpono i kāu mau pono.

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

Ma ke kumumanaʻo, inā ua hoʻāʻo ʻoe i ke code i kākau ʻia e pili ana i nā hiʻohiʻona ma luna, a laila ma ka hana hoʻolālā pono ʻoe e loaʻa i kahi papa inoa hāʻule me nā mana. Ua like ia ma ka screenshot ma lalo o ka mea hao.

Hoʻopau pololei i ka papa inoa o nā mana
Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

Inā holo pono nā mea a pau, a laila kope i ka palapala i loko E holo i ke kauoha shell a mālama i nā hoʻololi.

Hoʻokuʻi ʻia i Cloud shell

Loaʻa iā mākou nā ʻohi i loko o nā pahu. Hoʻohana mākou iā Ansible e like me kā mākou mea hoʻopuka noi noi a me ka luna hoʻonohonoho. No laila, i ka wā e pili ana i ke kūkulu ʻana i nā ipu, ʻekolu mau koho i hiki mai i ka noʻonoʻo: e hoʻokomo iā Docker ma Docker, e hoʻokomo iā Docker ma kahi mīkini e holo ana iā Ansible, a i ʻole kūkulu i nā ipu i loko o kahi console cloud. Ua ʻae mākou e noho mālie e pili ana i nā plugins no Jenkins i kēia ʻatikala. Hoʻomanaʻo?

Ua hoʻoholo wau: maikaʻi, no ka mea hiki ke hōʻiliʻili ʻia nā pahu "ma waho o ka pahu" i ka console cloud, no ke aha e pilikia ai? E mālama maʻemaʻe, ʻeā? Makemake au e hōʻiliʻili i nā pahu Jenkins i loko o ka console cloud, a laila hoʻokuʻu iā lākou i loko o ka cuber mai laila. Eia kekahi, loaʻa iā Google nā ​​kahawai waiwai nui i loko o kāna ʻoihana, e loaʻa ka hopena maikaʻi i ka wikiwiki o ka hoʻolaha.

No ka hoʻohui ʻana i ka console cloud, pono ʻoe i ʻelua mau mea: gcloud a me nā kuleana komo i Paona Google Google no ka laʻana VM e hana ʻia ai kēia pili like.

No ka poʻe e hoʻolālā e hoʻopili ʻaʻole mai ke ao Google
ʻAe ʻo Google i ka hiki ke hoʻopau i ka ʻae pili i kāna mau lawelawe. E ʻae kēia iā ʻoe e hoʻopili i ka console mai kahi mīkini kofe, inā e holo ana ʻo *nix a loaʻa iā ia kahi console.

Inā he pono iaʻu e uhi i kēia pilikia i nā kikoʻī hou aku i loko o ke kāʻei o kēia memo, e kākau i nā manaʻo. Inā loaʻa iā mākou nā koho balota, e kākau wau i kahi mea hou no kēia kumuhana.

ʻO ke ala maʻalahi loa e hāʻawi i nā kuleana ma o ka pūnaewele pūnaewele.

  1. E hooki i ka VM mai kahi e hoʻopili ai ʻoe i ka console cloud.
  2. E wehe i ka Instance Details a kaomi hoololi.
  3. Ma ka lalo loa o ka ʻaoʻao, koho i ke ʻano o ka hiki ke komo Loaʻa piha i nā Cloud API āpau.

    Kuiopili
    Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

  4. E mālama i kāu mau hoʻololi a hoʻomaka i ka laʻana.

Ke pau ka hoʻouka ʻana o ka VM, e hoʻopili iā ia ma o SSH a e hōʻoia i ka pili ʻana me ka hewa ʻole. E hoʻohana i ke kauoha:

gcloud alpha cloud-shell ssh

ʻO kahi pilina kūleʻa e like me kēia
Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

E hoʻouka iā GKE

No ka mea ke hoʻoikaika nei mākou i nā ala āpau e hoʻololi piha iā IaC (Infrastucture as a Code), mālama ʻia kā mākou faila docker ma Git. Aia kēia ma ka lima hoʻokahi. A ua wehewehe ʻia ka hoʻolaha ʻana i nā kubernetes e kahi faila yaml, i hoʻohana ʻia e kēia hana, ʻo ia hoʻi e like me ke code. No kela aoao keia. Ma ka laulā, ʻōlelo wau, ʻo ka papahana kēia:

  1. Lawe mākou i nā waiwai o nā mea hoʻololi BUILD_VERSION a, ke koho ʻia, nā waiwai o nā mea hoʻololi e hele ʻia ʻO ENV.
  2. Hoʻoiho i ka dockerfile mai Git.
  3. E hana i ka yaml no ka hoʻolaha ʻana.
  4. Hoʻouka mākou i kēia mau faila ʻelua ma o scp i ka console cloud.
  5. Kūkulu mākou i kahi pahu ma laila a hoʻokuʻu iā ia i loko o ka waihona Container
  6. Hoʻopili mākou i ka faila hoʻoili ukana i ka cuber.

E ʻoi aku ka kikoʻī. I ka manawa i hoʻomaka ai mākou e kamaʻilio e pili ana ʻO ENV, a laila e manaʻo mākou e hāʻawi i nā waiwai o nā ʻāpana ʻelua: PARAM1 и PARAM2. Hoʻohui mākou i kā lākou hana no ka waiho ʻana, ʻano - Anana kaula.

Kuiopili
Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

E hana mākou i ka yaml me kahi kuhikuhi maʻalahi hoʻopiʻi e waiho. Ua manaʻo ʻia, ʻoiaʻiʻo, aia ʻoe i kāu dockerfile PARAM1 и PARAM2ʻo ia ka inoa haawe awesomeapp, a aia ka pahu i hui ʻia me ka hoʻohana ʻana i ka mana i kuhikuhi ʻia Kakau waihona ma ke ala gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONkahi $BUILD_VERSION ua koho wale ʻia mai ka papa inoa hāʻule iho.

Papa inoa hui

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

ʻO Jenkins agent ma hope o ka hoʻohui ʻana i ka hoʻohana ʻana gcloud alpha cloud-shell ssh ʻAʻole i loaʻa ka mode interactive, no laila hoʻouna mākou i nā kauoha i ka console cloud me ka hoʻohana ʻana i ka parameter --kauoha.

Hoʻomaʻemaʻe mākou i ka waihona home ma ka console cloud mai ka dockerfile kahiko:

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

E kau i ka dockerfile hou i hoʻoiho ʻia ma ka waihona home o ka ʻoluʻolu kapua e hoʻohana ana i ka scp:

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

E hōʻiliʻili mākou, e kau a paʻi i ka ipu i ke kākau inoa Container:

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"

Hana like mākou me ka faila hoʻolaha. E ʻoluʻolu e hoʻohana i nā kauoha ma lalo nei i nā inoa fictitious o ka puʻupuʻu kahi i hoʻoili ʻia ai (awsm-huihui) a me ka inoa papahana (mea-hana weliweli), kahi i loaʻa ai ka pūʻulu.

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"

Holo mākou i ka hana, wehe i ka console output a manaʻolana e ʻike i ka hui kūleʻa o ka ipu.

Kuiopili
Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

A laila ka holomua ʻana o ka pahu i hui ʻia

Kuiopili
Hana mākou i kahi hana hoʻolālā ma GKE me ka ʻole o nā plugins, SMS a i ʻole ke kau inoa ʻana. E nānā kākou ma lalo o ka lole o Jenkins

Ua noʻonoʻo wau i ka nānā ʻole i ka hoʻonohonoho Pau. No hoʻokahi kumu maʻalahi: i ka manawa āu i hoʻonohonoho ai hana pāʻoihana me ka inoa i hāʻawi ʻia, e hoʻomau ʻia ka hana, ʻaʻole pili i ka nui o nā hoʻolaha me kēia inoa āu e hana ai. ʻAe, ma keʻano laulā, he mea liʻiliʻi kēia ma mua o ke ʻano o ka mōʻaukala.

ʻO kahi o nā manaʻo

ʻAʻole paha i hana ʻia nā ʻanuʻu a pau, akā hoʻokomo wale i kahi plugin no Jenkins, kā lākou muuulion. Akā no kekahi kumu ʻaʻole wau makemake i nā plugins. ʻAe, ʻoi aku ka pololei, ke hoʻohana nei au iā lākou ma muli o ka desperation.

A makemake wau e kiʻi i kekahi kumuhana hou noʻu. ʻO ka kikokikona ma luna nei kekahi ala e kaʻana like i nā ʻike aʻu i hana ai i ka hoʻoponopono ʻana i ka pilikia i wehewehe ʻia ma ka hoʻomaka. E kaʻana like me ka poʻe e like me ia, ʻaʻole loa he ʻīlio hae i devops. Inā kōkua kaʻu mau ʻike i kekahi, e hauʻoli wau.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka