áá áá á¨ááá¨á á¨á ááľ á¨áááľ áĄáľááťá˝á áĄáľá á᪠á¨áááľ á ááľ á áŽáá´ááá á¨á°áŤááľá á á˛áąá áá°áá áŞáŤá¸áá áĽááľáááľá˝ á˛á ááá ááᢠááĽááááᢠᨠ20 á°áááá˝ á áá, áááá¨áťáá ááááá áĽáŤá á°á¨á°, ááááŤáąá á áŁá á áľááá á¨áá ááá áĽá፠á°á¨ááŻá. á á°áľáŠáᢠá¨áá áááľ á°á áłáľ á áá... á°á áᣠááĽá áá ááá áĽáá°ááᨠááááľ áľá˝ááá ...
áĽá ááá á á ááĽá ᣠáĽá á áŁá á°áá áá (áá á áá°á áĽáŹ á áá°áá ááŠá? á áá°áá?) áĽá á¨áĄáľá ááŞáá˝ áá° áááŞááľ ááłá¨áť áľááá¸á ááá˝áá CI/á˛á˛ áľááá á á°áĽáŠáĄ áĽáą áĽáá° áá°ááŤáľ ááááąááľá˘ áĽáą á¨áááááá áŤá á! á ááľ áááľ áľá á ááᥠáá ááľ á°á áᣠáľá á áá ááľ áá áá áá; á°áá Fed áĽáá áá°áá áĽá á áááąá á áá ááááŁáᢠáĽá áá° á áľáŤá áá áá´áá˝á ááŤááąá á°áłáŤ áááł á¨á°á°áŤáá áááááá áĽáľá áá° áŠá¤á á¨ááŤáľáᣠáĽá áááááá áĽá´áľ áá° áĽáą á¨ááŤáľá°ááá ááŤáŁ ENV (á áŤá´áŁ áááááľáľáŁ á¨áĽááááá á áľá°á᪠á áĽááľ ááᣠá áá áŁáąá áá° áá á°áą á áᨠáĽá áá á áá¨áá° ááá áŤáá áĽáŠ á áá á ááá˝ áááá¨áąá áá áá˘)
áľááá ᣠá áá ááľáłááť ááľáĽ áĽáá´áľ áĽáá°á°ááአáĽáááŤá˝ááááĄ-
- á áááŞááľ ááľáĽ áľáŤáá˝á á¨áŤáą áľáŤ ááá á¨ááá˝ áľáŤáá˝ á á°áááá áŤááá;
- á¨áááŞááľ ááŞá á¨á°áŤáá áľ ááľááá ááááľ áá° á°áá áŽááśá (ááááľ áźá) áŤááá;
- á¨áľáŤ áŤá áá° ááá áŠá áááľáľ áá°á á á°ááá˘
á áĽáááąáŁ áĽáᣠá áĽáááĽáŁ á áá á á¨ááłáá ááᢠááá á°áá ááľáĽ á˘áŤááľ á¨áá á¨á° áááľ á ááłáŽá˝ áĽááłááľ ááááłáᣠáĽá áľááá
áĽááľá á°á ááá áááľ áĽá á áĽááἠá¨áá˛á áá፠á áááľá˘ áá áá
ááľáłááť áľáá፠á áá°áá.
áá á¨áĽá ááŁá á¨ááá áá áŞáŤ áá¨ááľ ááᢠá á ááľ ááłá áá áĽáá°áá áŤá ááľáłááťáá˝á áĽáť ááťá áĽááááá: á˝áá á ááĽáá áá á, ááááŞáŤ áá áĽáá´áľ áááłáľ áĽááłááĽá á ááá á áá á, áááľáá ááá áá ááá á áá°á°á¨áá, áľááá á á¨áá ááá á áľááá áĽá á áá¨á¨áťá á˝ááŠá ááłááľ. áĽá ááá°áṠᣠáĽáá´áľ áĽáá°á°áŤá áľá¨áłá ᣠáááá ááá áĽáá°áá google ááľá¨á áĽá á á ááľ áá áá ááá á áá á á áĽáá ᣠááŤá´ áĽáá°áá áŤá á¨ááá áá áŞáŤ áá¨ááśá˝á áĽá˝áááá˘
á¨áá á°áľ áá: 1. ááľáłááťá á¨á°ááá "ááŤá´" áá, á áá ááἠááááľ á áá°áá áá. á á áľá°áŤá¨áśáš ááľáĽ "á áá ááááľ á˘á°á¨á ááťáá" á¨áááá á ááŤáŽá˝ á ááá ἠá°áľá°á áá.
2. á¨á°á°áá á¨á á¨ááľáłááťá ááá áĽáá° á¨á ááá áŤá, áĽáá° ááá á¨ááľá ááľáłááťááź, áá á°áŤá á¨á¨á áááľá áá.
á áááŞááľ ááľáĽ á¨áľáŤ á ááĽáŽá˝á á á°áááá á áááá áá
áĽáŤáá á á áľááľá á ááťááᥠá°áááá á¨áľáŤ áááá á¨áą áá áá áááááľ á áá? á¨ááĽá¨ááá áááŞáŤáá áá áĽáŤáľá áŤáľáᥠáĽá áŤáĽá!
áĽá áááľ áĽá°áŁáá: áĽá á áĽááἠá°áá áá, á˛áŤáá¨ááá á ááá°áá: ááť, áá°ááŤáą áĽá¨á°á áḠáá, ááá ááá á ááˇá! áááá¨áľ áľáááŤáá ᣠáĽá á á ááłááľ á¨á°ááŁá ááľáááŞáŤ áááŞáŤ áĽá´áľ ááľáĽ á¨áľá¨áŁ á áᢠáľááá , áááá ááá á á°áťá áá á á áĽááľ ááľá¨á áĽáááŁáá. á ááľáŠ á¨ááááĄáľá á¨áĽá´áśá˝ áááá á ááľá áľ á°á ááá á ááĽáł ááἠáĽááłáŤáľáᣠáá¨áá¨á á¨á°áťá áááŤáá á á°áŤáááá˘
áá áą áá áá-á áááŞááľ ááľáĽ áĽáŤ áĽáááĽáŤáá ᣠá¨ááááá á ááľ á¨áááአááľáĽ áĽáŞáľá áĽááááŁáá ᣠáá° ááŤáŁá ááá°ááá áááŞáŤáá˝ áĽá´áśá˝á áááᚠᢠENV, á¨ááŤá ááŤáŁáá áá°á áľáŁá áĽá áá° áŽáá´ááá áááἠááľáĽ áááá. á¨á፠áĽáá á áŠá¤á ááľáĽ ááááŤá á¨áľáŤ áŤá á áľáŤá ááľáĽ á¨á°ááášáľ áááŞáŤáá˝ áá.
á áááŞááľ ááľáĽ áĽáŤ á¨ááá á áĽá á¨áááá áá°áľá á¨áááľ ááľáĽ á áááŁá ᣠáá á¨áááľ áá ááᢠáľáŤá ááá áááá áĽááááłáá. á¨á°áťáťááá áááá á¨áľáŞáśá˝ áá ááá°áá á áááľ áááŽá˝ áŤáľááááááĄ- áŤá ááŁá ááá áááá á¨á áľá፠á¨áá°áŤ á¨áľáŞáľ ááĽáŽá˝ áĽá áĽáá° á°ááááᢠá¨áá፠áááŞáŤ á á°ááŁáŠ ááľáĽ. á áĽá ááłá ááľáĽ, á°ááááá áľá áá°á á BUILD_VERSIONᣠá áááá á ááááĽá áľáᢠáá áááŠá ááááŠá á áá áĽáá áĽáááááá˘
áĽá á ááŤáŽá˝ á¨ááᢠáá˛áŤá áááľ áááŽá˝ áá° á áĽááŽá á¸á ááĄáĄ-
- áááŞááľ áá°á ááááš á¨ááŤááá áá á¨áááľ ááłá¨áť á¤áá á á°á ááá¤
- á¨áááľ áá¨ááť áá á°áŠá áááśá˝ áá áá (á áĽá áááł áá JFrog Artifctory áá ᣠáá á áľááá á áá°áá)á˘
á¨áááŞááľ á¨áááľ ááłá¨áť á¤áá á
á á°áá°á¨á°á áĽá
á á áŁá áĽáŠ áá áá°á¨áľ, á¨á
á ááĽáŤáŞáŤáá˝á ááľáááľ áĽáááŁáá.
áĽá ááŤá´ áĽáá
áłáá á¨áááááŤá á ááá˝ ááŤá áá áľááá áĽáť ááá˘
áááŞááľ ááááľ áá˝á ááá ἠááá˝á á°ááŁáŤáááą á¤áá á áŤáááŁáᢠ<âŚ> á¨áááľ ááłá¨áť á¨áááá á REST á áááľá ááᤠááᢠáá áááľ áááá áŁá áŞáŤáľ á ááľá á¨ááá˘áŤ ááĽáĽ á¨ááᣠááááá áĽáá° " áŤá URL.../api/", á¨áľ"..." áááľ á¨á¤áá á á˝ááłáá˝ á¨á°á°áá áŠá áľ ááá ááá˘
á áá á ááááᣠá áá áĽá¨á°ááááá áŤááá á¨áá°ááŤáľ á°ááŁá á áá á¨ááá á¨áá http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build
ᣠá¨á፠ááá
á°ááŁá á¨á¤áá á áá˝áŤáá˝ á áá áááá http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/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']
á¨á°áłáŤáá¸á áááá á
á˝á áłá áá˝ áĽááł
á°á áᣠááááááľ áŤá áᣠááŁáŞáŤá áĽááłááłááá áĽáá¨ááἠ(ááŁáŞáŤáá˝ á ááŤá˝ á ááášá!) áĽá âáŤáá°áłáŤáá¸áâ á¨áááá áááá áĽááłááĄ-
http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result='SUCCESS']
áŤáá°áłáŤáá¸á áááá á
á˝á áłá áá˝ áĽááł
á áááľ á áááá áá áŤáá á áá ááľáĽ áŤá áľáŞáśá˝ áááá
áľáŞáśá˝ áááá áááááľ ááá°á ááááľ á á. á¨áááŞááľ á¤áá á á¨ááľá¨áľ á¨á áá ááľááááᢠá°á á, ááááŤáąá á áááŹá˝á á á°áłáŤ áááł á¨á°áááŁ, á¨áłá¸á áĽá á á°áá˘á á áá ááľáĽ áŁáá áá¨ááť ááľáĽ á°ááá§á áááľ áá. áĽáá°áŁ áá¨ááť ááŁáŞá á¨áľáŤ áľáŞáśá˝ áá¨ááť ááᢠáĽáá°. á°á á, á áá¨ááť ááľáĽ áá ááááľ áľáŞáśá˝ áĽááłá áĽáá ááá. á¨áááľ áá á°áŠá áĽáá áááááᣠáŤááá áĽá áĽááłáłá¸áááᢠááá á°á á á ááľáááá áá ááááľ áŤáá ᣠá¨á፠áĽáą á á á ááš áľá ááá˘
á ááľ ááľáá áľááá
áĽáŁááá áááľ áááŽá˝á áŤáľá°áá-á¨áááááąá ááááŽá˝ á áááą ááľáĽ á áłáááá áĽá áááá áľáŞáśá˝ á¨á ááá ááľáĽ á áŤáľááááá, áĽá á á ááľ áá ááľáĽ á¨á°áá áŠáľá áĽáť áĽáááŁáá. á¨áĽáááłáá˝á áĽá ááááśá˝á áá áĽáá˛áľáá áľáááá áŤááľááĄ
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[^/]+' )
á áááŞááľ ááľáĽ áľáŤáá˝á áĽá á¨áľáŤ áá á áááá á áááááľ áá
á¨áľáááá˝á áááá ááá á áááá. á áá á¨á°áááá áááá áá° áĽáŤá áĽááŤá°áľá˘ ááĽá ááá˝ á¨ááá áááľá á áá°áá áŞáŤ áááŁáł á°ááŁá ááľáĽ á ááľ á°á¨á áá¨áá áá áᢠáá¤áą "áľáŹáľ" á¨áá á¨ááá¸áá áĽááá.
á¨áľáĽá°áŁ áĽáŤ á áá áśá˝á ááááą áĽá áá° áłá˝ áŤá¸áĽááᢠá ááŤáŽáš áá á á áŤáľáá: á¨áááŁáł á°á¨á áŤáá -> áááłá á°á¨á (áá á). á á°á¨á á áá áśá˝ ááľáĽ, áááłáá ááá¨áĄ á¨á áá á¨áááŁáł áááł, áááá áŤááá áľáŹáľ, á¨á°áłáŤ á¨ááá°á°á áĽááá á¨áźá áľáááá áŤááą.
áĽá á áá á áľá°áłá˝ áááᢠáááŞááľ á¨áĽáŤ áá
áŽá˝á á áááá˝ ááľáĽ áŤá¨ááťáᢠá á¤ááľá¤áá¤á á
áá¸áľá˘ á ááááľ áá http://ĐżŃŃŃ-Đ´Đž-СаданиŃ/config.xml
á áá
áá á¨áľ á¨áá
á¨áľ áááá ááá¨áľ, áĽáá° á áľáááááą á ááľááľ áĽá áŤááá áľ áŚáł ááááľ áá˝áá.
áŤáľáłááąáŁ ááľáááá˝ áááá áááŞáŤ áĽáá°ááááĽá á¨áá á°áľááá°áá BUILD_VERSION?
á¨áá á¨áľ áááá á ááá°á áá° ááľáĽ áĽáá¨áᢠáááŞáŤá á áŚáłá áááŠá áĽá á¨áááááá á áááľ áááá ááá¨ááἠáĽáť áá.
á á˝á áłá áá˝ áĽááł á¨áá áá¸áą á áłá˝á˘
á¨áĽááľá config.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
á¨áááŞááľ áľáŞáśá˝á á¨ááááľ á ááŤáá á¨áá¨áĽá áĽá áĽáá°á á°áá á¨ááá á á áĽáá áľá á ááľ á áááľ áŽáľ á á ááá áá á¨áááŞááľ áááááĄ-
á¨áááŞááľ áá° áááአáľáŞáśá˝ áááá ááťá
áá
áá áĽáť áááľ ááľáĽ áŤáľááĄáĄ á¨áľáĽá°áŁáŹ áľá á á
á°á á°á¨á°á ááĽá áĽá á áŽáá á¨ááá á¨áľáŞáľ ááĽá áŤáŤáľáłáᢠá áá
áá á¨áľ á áá á ááľááááá ááá ááááŁá. ááŤáľá
ᣠááááľá
á áááááľ áá
á ááľáá áááá˘
#!/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
á ááľá ááłáĽ ᣠá¨áá áŁááľ ááłááá˝ áá á ááááŽá á¨á°áťááá áŽáľ á¨áá°á ᣠá¨á፠á áá°ááŤáľ á°ááŁá ááľáĽ ááľááá á¨áľáŞáśá˝ áá á°áááá áááá áááááľ áááŁá ᢠáá á á áĽáá áľá áŁáá á á˝á áłá áá˝ áĽááł ááľáĽ áĽááłá ááá˘
á áľááá á¨á°á ááá áľáŞáśá˝ áááá
ááá ááá á¨á°áŤáŁ á¨á፠áľááŞááąá áá áą á¨áźá áľáááá áŤááą áĽá áááŚá˝á áŤáľáááĄ.
ᨠCloud shell áá á áááááľ áá
á áŽáá´áááŽá˝ ááľáĽ á°áĽáłá˘áá˝ á áá. áĽáá° á áááŹá˝á áá á¨á˘áŤ ááłáŞáŤá˝á áĽá áá á¨áľ á áááŁáŞá áĽáá ááááᢠá áá áá á¨áľ áŽáá´áááŽá˝á áááĽáŤáľ á˛áŤáľáĄ áŚáľáľ á ááŤáŽá˝ áá° á áĽááŽá á¸á áááŁáᥠDocker in Docker á ááŤáᣠDockerá á Ansible á áá ፠áá˝á áá ááŤá ááá áŽáá´áááŽá˝á á ááááľ áŽááśá ááľáĽ ááááĄá˘ á áá á˝áá ááľáĽ áľá áááŞááľ á°á°áŞáá˝ áá ááááľ á°áľááá°ááᢠá áľáłááľ?
áĽá áá°ááŠ: á°á á ᣠâá¨áłáĽá ááâ áŽáá´áááŽá˝ á á°áá áŽááśá ááľáĽ áá°á á°áĄ áľááá˝á áłá˛áŤ ááá áá¨áĽáš? áá˝á á á ááᣠá áá°á? á¨áááŞááľ áŽáá´áááŽá˝á á ááááľ áŽááśá ááľáĽ áá°áĽá°áĽ áĽááááá, áĽá á¨á፠áá° áŞáŠá á á áľááłá¸á. á¨áá á á áá ááá á áá á¨á° áááľ á ááłáŽá˝ ááľáĽ á áŁá á¨á áá¸á á°ááŚá˝ á ááľ, áá á á áá°ááŤáľ ááĽááľ áá á áá á°á˝áĽá ááá¨áá.
á¨ááááľ áŽááśá áá ááááááľ áááľ áááŽá˝ áŤáľáááááłááĄ- gcloud áĽá á¨ááłá¨áť ááĽáśá˝ áá° ááá ááááľ á¤áá á áá á°ááłáłá áááááľ á¨áá áŤá áľ á VM ááłá.
á¨Google á°áá áłááá ááááááľ áá°áĄ
Google á á áááááśáš ááľáĽ á ááá°ááá áááľá á¨áá°áá¨á áĽáľá ááá
áłáᢠáá
* nix áĽá¨áá° á¨áá áĽá áŽááśá áĽáŤáą áŤáá á¨áĄá áá˝á áĽááłá á¨áŽááśá áá áĽáá˛ááá áŤáľá˝áááłáá˘
á áá ááľáłááť áááá ááľáĽ áá áá ááłá á á áá áááá áĽááľá¸áá á¨ááŤáľáááá á¨áá á á áľá°áŤá¨áśáš ááľáĽ ááá ᢠá á áľáá˝ áŤááá á áá áááľ áá ááťáťáŤ áĽá˝áááá˘
ááĽáśá˝á áááľá áľ ááá ááááľ á¨áľá á áááá˝ ááá˘
- á ááá á á¨á°áá áŽááśá áá á¨ááááá áľá á¨VM ááłá áŤááá˘
- á¨á áĽááľ ááááŽá˝á ááááą áĽá á á áŤáľáá á áľá°áŤá¨á.
- á¨ááš ááá áá á¨á áĽááľ ááłá¨áť áá°áá ááá¨áĄ á¨ááá á¨á°áá á¤áá ááá˝ áá ááłá¨áť.
.ĐĐ˝ŃĐžŃ
- áááŚá˝áá áŤáľááᥠáĽá ááłááá áŤáľáááŠá˘
áŞá¤á ááŤáá áĽáá°á¨á¨á° á á¤áľá¤áľá¤á˝ á áŠá áŤááááľ áĽá áááááą áŤá ááá áľá á°áľ áá¨á°áąá áŤá¨áááĄá˘ áľáááá á°á áááĄ-
gcloud alpha cloud-shell ssh
á¨á°áłáŤ áááááľ áá
á áááľáá
áá° GKE á á°ááŤ
áá° IaC (áá á¨á° áááľ áĽáá° áŽáľ) áááá¨á á ááá ááááľ áĽá¨áŁáá áŤáá á ááá á¨áĽá áśá¨á áááá˝ á ááľ ááľáĽ ááááŁáᢠáá á á ááľ á áŠá ááᢠáĽá á kubernetes ááľáĽ áá°ááŤáľ á yaml ááá ááááťá ᣠá áá á°ááŁá áĽáť áĽá á áá áááá ᣠáĽáą áŤáą áĽáá° áŽáľ ááᢠáá á¨áááá ááá áá. á á á ááá áĽá áą á¨áá¨á°áá áááĄ-
- á¨á°ááááŽá˝á áááá˝ áĽáááľáłáá BUILD_VERSION áĽá, áĽáá° á ááŤá, á¨áá°ááá á°ááááŽá˝ áĽá´áśá˝ ENV.
- á¨ááľáłááť á°áĽá°áŠá ᨠGit áŤáááąá˘
- ááá°ááŤáľ yaml ááá áŠá˘
- áĽááá á áááąáá áááá˝ á scp áá° á°áá áŽááśá áĽáá°á áá¸áááá˘
- áĽá፠áŽáá´ááá áĽááááŁáá áĽá áá° áŽáá´ááá áááἠááľáĽ áĽáááááá
- á¨ááŤá áááá áá° áŞáŠá á áĽáá°ááĽáŤáá.
á¨á áá ááá˝ áĽáááᢠá ááľ áá áááŤáľ á¨áááá ENVá¨áááľ áááŞáŤáá˝ áĽá´áśá˝á ááá á ááĽá áĽáá á- PARAM1 и PARAM2. á°ááŁáŤá¸áá ááá°ááŤáľ áĽáá¨ááŤáá ᣠáá°áᥠ- á¨ááĽá¨ááá áááŞáŤ.
.ĐĐ˝ŃĐžŃ
á ááá á á áŁáŤ á á áŁáŤ yaml áĽááááŤááᢠáľáĽáá áá° ááá. á áśáá°á áááá ááľáĽ áĽááłáááľ ááłá°áŁáᢠPARAM1 и PARAM2á¨ááŤá áľá áĽáá°ááá ááŠá á á, áĽá á¨á°á°á á°á á ááŤáŁ á¨á°á áá°á áľáŞáľ áľáá ፠áá á°ááˇá á¨ááŤáŁ áááἠá ááááľ áá gcr.io/á áľá°áá á á/á áŞá á á-$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"
á°ááŁáŠá áĽááŤááłáá, á¨áŽááśá áá¤áąá áĽáá¨áá°ááá áĽá á¨áĽááá áľáŹáłá áľáĽá°áŁ ááá¨áľ á°áľá áĽáá°áááá.
.ĐĐ˝ŃĐžŃ
áĽá á¨ááŤá á¨á°á°á á°á áá ááŤáŁ á á°áłáŤ áááł áááááľ
.ĐĐ˝ŃĐžŃ
áá áĽáŹ á ááĽáŠá á˝á á ááŠáľ Ingress. á á ááľ ááá ááááŤáľ: á áá´ áŤáááŠáľ á¨áľáŤ áŤá á á°á°á¨á áľáᣠá áá áľá á¨áąáá áŤá á áá°ááŤáľ á˘áŤáŤááą áĽáá°á°áŤ áááŤáᢠáĽááá˛á ᣠá á á áááᣠáá á¨áłáŞá áá°á áľáá˝ á áá ááá˘
á¨áá°áá°á ááá
á¨áá áŤááľ ááá áĽááááá˝ ááááŁáľ áá°á¨á á áá˝áá áá áᣠááá áá á ááá á ááłááľ áááá á Jenkins á°áááᢠáá á áá ááááŤáľ á°á°áŞáá˝á á áááľáᢠá°á áᣠá áľáááᣠáá° áĽáááą á¨áááŤá á á°áľá ááá¨áĽ áĽáť ááá˘
áĽá ááĽá á á˛áľ áááľ áááłáľ áĽááłááᢠá¨áá áŤáá á˝áá áá ááááŞáŤ áá á¨á°ááá¸áá á˝áá áĽá¨ááłá áŤáááá¸áá áááśá˝ á¨ááŤááá áľ ááááľ ááᢠáĽáá° áĽáą á ááá á áááľ á°áŁáŞ á°áŠá áááá áŤáŤááᢠáááśáź á˘áŤááľ á ááľá á°á á¨á¨áąá á°áľá°á áĽááááá˘
ááá: hab.com