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:
- Hoʻololi hou i nā hana ma Jenkins mai ka hana ponoʻī a mai nā hana ʻē aʻe;
- Hoʻohui i ka console cloud (Cloud shell) mai kahi node i hoʻokomo ʻia ka luna Jenkins;
- 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
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
ʻ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
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
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
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
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.
- E hooki i ka VM mai kahi e hoʻopili ai ʻoe i ka console cloud.
- E wehe i ka Instance Details a kaomi hoololi.
- 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
- 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
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:
- 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.
- Hoʻoiho i ka dockerfile mai Git.
- E hana i ka yaml no ka hoʻolaha ʻana.
- Hoʻouka mākou i kēia mau faila ʻelua ma o scp i ka console cloud.
- Kūkulu mākou i kahi pahu ma laila a hoʻokuʻu iā ia i loko o ka waihona Container
- 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
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
A laila ka holomua ʻana o ka pahu i hui ʻia
Kuiopili
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