áá»áœááºá¯ááºááá¯á·á ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážá¡ááœá²á·áá áºáá¯á០á¡ááœá²á·áá±á«ááºážáá±á¬ááºá០áááºážááá¯á·á á¡ááá®áá±ážááŸááºážá¡áá áºááᯠá ááºážáááºááẠáá»áœááºáá±á¬áºááá¯á·ááᯠáá±á¬ááºážááá¯áá¬áá±á¬á¡áá«á áááºážááẠááŒá®ážáá²á·áá±á¬áá±á·ááœáẠááááºážáááºážáá¶áá¬ážááá±á¬ áááºážááá¯á·á áá»áŸá±á¬ááºááœáŸá¬á¡áá áºááᯠá áááºáá²á·áááºá áá»áœááºáá±á¬áºáááºáá¬ážáááºá áááá Ạ20 ááá·áºá¡ááŒá¬ááœáẠá¡ááœááºááá¯á¡ááºáá±á¬ á¡áá¬áá áºáá¯ááᯠááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áº áá»áŸá±á¬ááºááœáŸá¬ááᯠá¡ááºááááºáá¯ááºááẠáá±á¬ááºážááá¯ááŸá¯áá áºáá¯ááᯠáááºáá¶áááŸááá²á·áá«áááºá áááºáááºážááá¯ážáá²á·áááºá áá±á¬ááºááẠáá¬áá®á¡áááºážáááºááŒá¬ááŒá®ážáá±á¬ááº...áá¬ááœá±áááºááŒá áºááá²ááá¯áᬠááá·áºááŸááºážááá¯ááºáá«ááŒá®...
áá«áááºáá¶ááááºá áá«áá±á¬áºáá±á¬áºáá»ááºážááẠ(á á±á¬á á±á¬á áááºáá¶áá²á·áá¬ááá¯ááºáá¬áž? ááá¯ááºáá°ážáá¬áž)á ááŒá®ážáá±á¬á· á¡ááœá²á·áá±á«ááºážáá±á¬ááºááœá±á áá«ááá¯á·ááŸá¬ CI/CD ááœá±á¡á¬ážáá¯á¶ážááᯠCI/CD ááŸááá²á· Jenkins áá¶áááºáá±á¬ááºááœáá·áºááŸááááºááá¯áá²á·á¡áá»ááºááᯠáá«áááºáá²á·áááºá áá°á·ááᯠá¡áá¯á¶ážáá»ááœáá·áºáá±ážááá¯ááºáá«á áá°ááá¯áá»ááºááá±á¬áẠ! áááºá áá¬áá áºáᯠáááááááááºá áá°ááᯠáá«ážáá áºáá±á¬áẠáá±ážááŒá®áž áá°áá áºáá±á·á á¬ážáááºá áá°áá áºáá±á¬ááºááᯠFed ááá¯á· áá±á«áºááẠáá°á·áá áºáááºáá¯á¶áž áá»áœá±ážáááá·áºáááºá ááŒá®ážááœá¬ážáááºá á¡áá¯ááºááœááºááŸáá·áºááœááºáá á¬ážáá«áKuber ááœáẠá¡á±á¬ááºááŒááºá áœá¬áááºáá±á¬ááºáá¬ážáá±á¬ áááºááá·áºáá¬ážááŸááºážáááᯠá¡ááºááºáá®áá±ážááŸááºážáá«ááŸááá±á¬ ááœááºááááºáá¬ááᯠá¡áá¯á¶ážáá»ááá¯ááºááŒá®áž áááºááá·áºáááºááá¯ážáá»á¬ážááá¯áááᯠááœáŸá²ááŒá±á¬ááºážááá¯ááºáááºááŒá áºáááºá ENV (áá»áœááºá¯ááºáá¡ááá¯ážá áá¿ááááá±áááá¬ááŸááºá á¡ááºá¹áááááºááá¬áá áºáŠážá ááᯠá€á á¬ááŒá±á¬ááºážááá¯áááºááŒá®ážáá±á¬áẠáá»áœááºá¯ááºá¡á¬áž áá°á·áááá¬ááºáá±á¬áºááá¯á· áááºááŸáá¯ážáááŸáá·áºááŒááŒá®áž ááŒááºááŒááºáá¬ážáá¬ážááŒáá·áºáááááº)á
ááá¯á·ááŒá±á¬áá·áº á€ááŸááºá á¯ááœáẠáá»áœááºá¯ááºáá±á·áá¬áá²á·áá¯á¶ááᯠááŒá±á¬ááŒáá«áááºá
- Jenkins ááŸá á¡áá¯ááºáá»á¬ážááᯠá¡áá¯ááºááá¯ááºááá¯áẠááá¯á·ááá¯áẠá¡ááŒá¬ážá¡áá¯ááºáá»á¬ážá០ááááºáá¯ááºáá«á
- Jenkins á¡á±ážáá»áá·áºááá·áºááœááºážáá¬ážáá±á¬ node áá áºáá¯á០cloud ááœááºááá¯ážáẠ(Cloud shell) ááá¯á· áá»áááºáááºáá«á
- á¡áá¯ááºáá¬áááºááᯠGoogle Kubernetes Engine ááá¯á· á¡áá¯á¶ážáá»áá«á
ááááºáá±á¬á· áá«áᬠá¡áááºážá¡áá»ááºáž ááœá²ááŒá¬ážáááºáá¶áááºáá°áá«á ááá·áºááœáẠá¡áááºážáá¯á¶áž Google cloud ááœáẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠá áá
áºá
áááºáá
áºááá¯ááºážááŸááááºáᯠáá°ááááŒá®ážá ááá¯á·ááŒá±á¬áá·áº áááºááẠáááºážáá¡áá¯á¶ážááŒá¯áá°ááŒá
áºááŒá®ážá ááá·áºááœáẠGCP á¡áá±á¬áá·áºáá
áºáá¯ááŸááááºá áá«áá±ááá·áº áá®ááŸááºá
á¯á¡ááŒá±á¬ááºážáá±á¬á· ááá¯ááºáá«áá°ážá
á€áááºááŸá¬ áá»áœááºá¯ááºááá±á¬ááºááẠááááºáááºá á¬ááœááºááŒá áºáááºá ááŒá áºáááºáá áºáá¯ááœáẠááá¯ááá¯á·áá±á¬ááŸááºá á¯áá»á¬ážááá¯áᬠáá±ážááá¯áá«áááº- ááŒá¿áá¬áá áºáá¯ááŸáá·áº áááºááá¯ááºáá²á·ááááºá áááºážááᯠáááºááá¯á·ááŒá±ááŸááºážááááºááᯠá¡á ááá¯ááºážááœáẠááááá²á·áá²á ááŒá±ááŸááºážáá»ááºááẠgoogled á¡áááºááá·áºáááŒá áºáá±á¬ááŒá±á¬áá·áºá á¡á áááºá¡ááá¯ááºážáá»á¬ážá¡ááá¯áẠgoogle áá¯ááºááŒá®áž áá±á¬ááºáá¯á¶ážááœáẠááŒá¿áá¬ááᯠááŒá±ááŸááºážáá²á·áááºá áá«ááŒá±á¬áá·áº á¡áá¬áááºááŸá¬ áá«áááºááá¯áá¯ááºáá²á·áááºááá¯áᬠáá±á·ááœá¬ážáá²á·á¡áá« á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá áºá á áá²á·áá áºá google ááŸá¬ áááºááŒá®áž á á¯á ááºážá áᬠáááá¯áá±á¬á·áá² ááááºáá¬á á¬ááœááºááœá±ááᯠááá¯ááºááá¯ááºáá±ážááá¯ááºáá¬á
ááááºááá¯ááºááŒá±á¬ááºážááŸááºážáááºážáá»ááº: 1. á¡áááºážááá¹áá¡ááœáẠ"áá»áœááºáá±á¬áºá¡ááœááº" áá¯áá±ážáá¬ážáá±á¬ááŸááºá ᯠá¡áá±á¬ááºážáá¯á¶ážá¡áá±á·á¡áá»áá·áº ááááºááá¯ááºáá«á ááŸááºáá»ááºáá»á¬ážááœáẠ"áá®ááá¯áá¯ááºááẠááá¯áá±á¬ááºážáááº" ááœá±ážáá»ááºá áá¬áá»á¬ážááᯠáááºááᬠáááºážáá¬áá«áááºá
2. ááŸááºá á¯á á¡áá¯á¶ážáá»á¡á áááºá¡ááá¯ááºážááᯠáá¬ážáᯠáá°ááá«áá áá»áœááºá¯ááºá ááááºááŸááºá á¯áá»á¬ážáá²á·ááá¯á·á á€á¡áá¬ááẠá¡á¬ážáááºážáá±á¬ áá¬ážááŒá±ááŸááºážáá»ááºááŒá áºáááºá
Jenkins ááŸá á¡áá¯ááºáááºáááºáá»á¬ážááᯠááá¯ááºážááá áºááŒáá·áº á¡ááºááááºáá¯ááºááŒááºážá
áááºážáá²á·áá±ážááœááºážááᯠáá«ááŒáá¯ááŒááºáááº- Dynamic á¡áá¯ááºá¡ááºááááºáá¯ááºááŒááºážá á¡á²áá«áá²á· áá¬ááá¯ááºáá²á á á¬ááŒá±á¬ááºážáá«áá¬áá®áá¬ááááºááá¯ážááᯠááá¯ááºááá¯ááºááá·áºááœááºážááŒá®áž áááºááœá¬ážááá¯ááºáá«á
áá«ááŒá±áááº- áá«ááááºáá»ááºážáááºá áá°ááá¯á· áááºážáá°áá²á·á¡áá« áá«áááŒáá¯ááºáá°áž- Mishaá ááŒáá·áºáá»ááºááŸá¯ áá»ááºáá±áááºá ââá¡áá¬á¡á¬ážáá¯á¶áž ááŒá®ážááœá¬ážááŒá®á áááºá áááºááŸá¬ááœá±áá±ááŒá®áž á¡áá¯ááºá áááºááŒááºážááá¯ááºáᬠááá·áºáááºáá»ááºá¡áá»áá¯á·á áááºááá¯ážááœáẠá¡ááŸá¬ážáá áºáá¯ááŸááá±áá«áááºá ááá¯á·ááŒá±á¬áá·áº áááºááá¯ááºááá»áŸ áááºááá¯ááºááá»áŸ áááááá±á¬ááºáá±á¬áẠáá¯ááºá á±áá»ááºáá«áááºá á¡áá¯á¶ážááŒá¯áá°ááᯠááœá±ážáá»ááºááẠáááºááá¯ážáá»á¬ážá á¬áááºážá¡á á¬áž áá±áá¬ááᯠááá¯ááºááá¯ááºáááºáá±á¬ááºááŒááºážá០áá¬ážáá®ážááẠááŒá áºááá¯ááºáá«áá ááœá±ážáá»ááºááŸá¯ááᯠáá»áœááºá¯ááºá á®á ááºáá«á
á¡á á®á¡á ááºááẠá€á¡áá¬ááŒá áºáááº- áá»áœááºá¯ááºááá¯á·ááẠJenkins ááœáẠá¡áá¯ááºáá áºáá¯ááᯠáááºáá®ážáá¬ážááŒá®ážá áá áááºáá®ááœáẠá á¬áááºážááŸáá¬ážááŸááºážáá áºáá¯ááᯠááœá±ážáá»ááºááá¯ááºááŒá®áž ááœááºááááºáá¬ááŸáá áºááá·áº ááœááºááááºáá¬ááá¯á·áá±ážááá¯á·ááá·áº ááá·áºáááºáá±á¬ááºáá»á¬ážá¡ááœáẠáááºááá¯ážáá»á¬ážááᯠáááºááŸááºááá¯ááºáááºá ENVááá¯á·áá±á¬áẠáááºážááẠááœááºááááºáá¬ááᯠá á¯áá±á¬ááºážááŒá®áž ááœááºááááºáá¬ááŸááºáá¯á¶áááºááŒááºážááá¯á· ááœááºážááá¯á·áááºá á¡á²áá®ááá±ááŒá®ážáá±á¬á· ááœááºááááºáá¬ááᯠcuber á¡ááŒá áºáá²á· áá¯ááºááœáŸááºáááºá ááá¬á á¡áá¯ááºááœáẠáááºááŸááºáá¬ážáá±á¬ áá±á¬ááºáá»á¬ážááŒáá·áº
Jenkins ááœáẠá¡áá¯ááºáá áºáá¯áááºáá®ážááŒááºážááŸáá·áº áááºááŸááºááŒááºážáá¯ááºáááºážá ááºááᯠáá»áœááºá¯ááºááá¯á· ááá·áºááœááºážá ááºážá á¬ážáááºááá¯ááºáá«á áááºážááẠá¡ááŒá±á¬ááºážá¡áá¬ááá¯ááºáá±á áá¯ááºáá±á¬ááºá áᬠá¡áááºááá·áºááŒá áºááŒá®áᯠáá»áœááºá¯ááºááá¯á· áá°ááá«áááºá áá¬ážááŸááºážáá»á¬ážááŒáá·áº á¡ááºááááºáá¯ááºáá¬ážáá±á¬á á¬áááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá¬ááŸá áºáᯠááá¯á¡ááºáááº- áŠážá á¬ážáá±áž ááá¬ážáááºáá¬ážááŸááºážáá¶áá«ááºáá»á¬ážááŸáá·áº ááááºážááŸááºáá²á·ááá¯á·áá±á¬ ááááºážááŸááºáá áºáá¯áá«ááŸááá±á¬ áááºááŸáá¡áááºážá¡ááŒá áºá á¬áááºáž ááœá±ážáá»ááºááŸá¯ ááá·áºáááºáá»áẠáá¬áááºáá áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá ááááºážááŸááºá¡á¬áž á¡áááºáá±ážááá¯ááºáá«á BUILD_VERSIONá¡ááá¡áá»ááŒá±á¬ááŸá¬ááá¯ááºáá°ážá áá«áá±ááá·áº á¡áááºážá¡ááŒá áºá á¬áááºážááᯠá¡áá®ážáááºáá±á·áá¬ááŒáá·áºáá¡á±á¬ááºá
ááœá±ážáá»ááºá áá¬ááœá± á¡áá»á¬ážááŒá®áž áááŸááá«áá°ážá á¡áá»ááºááŸá áºáá»áẠáá»ááºáá»ááºáž áááááá¬áááºá
- Jenkins á áááºážáá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡á¬áž áááºážáá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡á¬áž áá±ážáá±á¬ááºááá·áº á¡áá±ážááŸáááºáá±á¬ááºááœáá·áº API ááᯠá¡áá¯á¶ážááŒá¯áá«á
- á¡áá±ážááááºážááá¯ááºááœá²á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáá±á¬ááºážááá¯áá« (áá»áœááºá¯ááºááá¯á·áááá á¹á ááœáẠáááºážááẠá¡áá±ážáááŒá®ážáá±á¬ JFrog Artifactory ááŒá áºáááº)á
Jenkins á¡áá±ážááááºážá¡áá¯á¶ážááŒá¯ááœáá·áº API
ááá¯ááºáá¬áá±á¬á¡á
ááºá¡áá¬á¡áá ááŸááºáá»á¬ážáá±á¬ááŸááºážááŒáá»ááºáá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážááá¯áá«áááºá
áááá
á¬ááá¯ááºáá
áºááá¯ááºááᯠá¡ááá²á·áá¬áá¬ááŒááºááœáá·áºááŒá¯áá«áááºá
Jenkins ááẠáááºážá áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠá¡áá±ážá០á ááºááŒáá·áº áááºááá¯ááºáá±á¬ áááºáá±á¬ááºááœáá·áºá¡ááœáẠAPI áá áºáᯠáá¶á·ááá¯ážáá±ážáá«áááºá <âŠ> á¡áá±ážááááºážá¡áá¯á¶ážááŒá¯ááœáá·áºááᯠREST á ááá¯ááºáá¯á¶á á¶ááŒáá·áº áááºážááŸááºážáá¬ážáááºá ááá¯ááá¯áááºááŸá¬ á¡ááºá¹áá«áááºá¡á¬ážáá¯á¶ážá¡ááœáẠáá áºáá¯áááºážáá±á¬ entry point áááŸááá±á¬áºáááºáž "áá²á·ááá¯á·áá±á¬ URL á¡á á¬ážá.../api/"áááºááŸá¬áá²"..." ááá¯áááºááŸá¬ API á áœááºážáááºááᯠá¡áá¯á¶ážááŒá¯áá¬ážááá·áº á¡áá¬ááá¹áá¯ááᯠááá¯ááá¯áááºá
áá
áºáááºážá¡á¬ážááŒáá·áºááá¯ááá±á¬áºá áááºááŸááá»áœááºá¯ááºááá¯á·ááŒá±á¬áá±áá±á¬ ááŒáá·áºáá»ááºáá±ážáá¬áááºááᯠáááŸáááá¯ááºááŒá®ááŒá
áºáááºá http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build
ááá¯á·áá±á¬áẠá€áá¯ááºáááºážá¡ááœáẠAPI áá±áá»áœááºáá»ááºáá»á¬ážááᯠáááŸáááá¯ááºáá«ááŒá®á http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/
áá±á¬ááºáá áºáá¯á ááááºááá¯áááºáá¶áááŸááááºáááºááá·áºáá¯á¶á á¶á¡ááœááºááœá±ážáá»ááºá áá¬ááŸááááºá API ááẠá€ááá á¹á ááœáẠá á áºáá¯ááºááŒááºážááá¯áᬠááœáá·áºááŒá¯áá±á¬ááŒá±á¬áá·áº XML ááᯠá¡á¬áá¯á¶á áá¯ááºááŒáá«á áá¯á·á
á¡áá¯ááºá¡á¬ážáá¯á¶ážáá²á·á á¬áááºážááá¯áá¡á±á¬áẠááŒáá¯ážá á¬ážááŒáá·áºáá¡á±á¬ááºá ááááááºáá¬áááºááá¯áá² á áááºáááºá á¬ážááẠ(áá±á¬áºááŒáááºá·á¡áááº) ááŸáá·áº áááºážááááẠ(ááááº):
http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]
ááœá á»áá²á·ááá²
ááá¯ááááºááŸáá·áºá¡áá¯á¶ážáááºáá±á¬ run áá°áá»á¬ážááá¯áá¬á á áºáá¯ááºááŒáá«á áá¯á· á¡á±á¬ááºááŒááºááŸá¯. áááºááŒá±ááᯠáá¯á¶ážááŒáá·áºáá¡á±á¬áẠ&áááºáá¯ááºáá«á ááá·áºáááºáá»ááºáá áºáá¯á¡áá±ááŒáá·áº áááºážááŸáá·áºáá®áá»áŸáá±á¬ áááºááá¯ážáá áºáá¯áá®ááá¯á· áááºážááᯠááŒááºáááºážááœá¬ážáááºááŒá áºáááºá á¡á±á¬ááºááŒááºááŸá¯. áá¯ááºáá²á·áá¯ááºáá²á·á á¡ááŸá¯ááºááŸá áºáááºááá¯áááºááŸá¬ ááŒá±ááŒá¬áá»ááºáá áºáá¯ááŒá áºáááºá áá»áœááºá¯ááºááá¯á· á áááºááááºá á¬ážáá±á¬ á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºáá¯ááºáá«áááº-
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']
áá¡á±á¬ááºááŒááºáá°áá»á¬ážá
á¬áááºážá áááºáá¬ážááŒááºáá¬ááºáá¯á¶
á¡áá±ážááááºážáá¬áá¬ááŸá ááá¯ááºááœá²áá áºáá¯á០áá¬ážááŸááºážáá»á¬ážá á¬áááºáž
áá¬ážááŸááºážáá»á¬ážá á¬áááºážááᯠááá°ááẠáá¯ááááááºážáááºážáá áºáá¯ááŸááááºá Jenkins API ááᯠáááºáá¯á¶ážáá¬ááẠááá¯ááá±á¬áá»áááºá áá±á¬ááºážááŒá®á á¡áááºá á¡ááá®áá±ážááŸááºážááᯠá¡á±á¬ááºááŒááºá áœá¬áááºáá±á¬ááºáá²á·áá«á áááºážááᯠááá·áºáá»á±á¬áºáá±á¬ááá¯ááºááœá²ááŸá repository ááœáẠáá¯ááºááá¯ážááŒá®áž áá¬ážááŸááá¬ážááŒá±á¬ááºáž ááá¯ááá¯áááºá áá²á·ááá¯á·áááºá repository ááẠá¡áá¯ááºáá¯ááºáá±á¬ á¡ááá®áá±ážááŸááºážáá¬ážááŸááºážáá»á¬ážá áá°áááºážááá¯ááŸá±á¬ááºááŸá¯ááŒá áºáááºá ááŒáá¯ááºáááºá á¡ááºážá ááá¯ááŸá±á¬ááºááŸá¯ááŸá¬ áááºáá¬ážááŸááºážááŸááá² áá±ážááŒáá·áºáá¡á±á¬ááºá á¡áá±ážááááºážááá¯ááºááœá²ááᯠáá±á¬ááºá grep ááŸáá·áº awk áá¯ááºáá«áááºá áááºáá°áááᯠoneliner ááá¯á áááºáááºá á¬ážáá«á spoiler á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáááºá
áá
áºááŒá±á¬ááºážáááºáž á¡áááá·áºáá±ážáááºá
áá»á±ážáá°ážááŒá¯á á¡áá»ááºááŸá
áºáá»ááºááᯠááŸááºáá¬ážáá«- áá±á«ááºážá
á®ážááŸá áá»áááºáááºááŸá¯á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá»áœááºá¯ááºáá±ážáá±á¬ááºááŒá®áž ááá¯ááºááœá²á០áá¬ážááŸááºážá¡á¬ážáá¯á¶ážááᯠáááá¯á¡ááºáá² áá
áºáá¡ááœááºáž áááºáá®ážáá¬ážááá·áºá¡áá¬áá»á¬ážááá¯áᬠááœá±ážáá»ááºáá«áááºá ááá·áºá¡ááŒá
áºááŸááºááŸáá·áº ááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áºááá¯ááºáá®á
á±ááẠá¡áááá·áºááᯠáááºážááŒááºáá«-
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[^/]+' )
Jenkins ááœáẠá¡áá¯ááºáá»á¬ážááŸáá·áº á¡áá¯ááºááœá²á·á ááºážáá¯á¶ááá¯ááºááᯠá áá áºááá·áºááœááºážááŒááºážá
áá¬ážááŸááºážáá»á¬ážá á¬áááºážá á¡áááºážá¡ááŒá áºááᯠáá»áœááºá¯ááºááá¯á· ááŸá¬ááœá±ááœá±á·ááŸááá²á·áááºá ááᯠá¡áá¯ááºááœáẠááááºá á¬áááºážááᯠáá±á«ááºážááá·áºááá¯ááºááŒáá«á áá¯á·á áá»áœááºáá±á¬á·áºá¡ááœááºá áááá¬áááºááŸá¬ážáá±á¬ááŒá±ááŸááºážáá»ááºááŸá¬ á¡ááá®áá±ážááŸááºážáááºáá±á¬ááºááŒááºážáá¯ááºáááºážááœáẠá¡ááá·áºáá áºáá¯ááá·áºáááºááŒá áºáááºá ááááºááẠ"á¡á±á¬ááºááŒááºááŸá¯" ááŒá áºáá«á áá¯ááºáá±á¬ááºáááá·áº á¡ááá·áºááŒá áºáááºá
á á¯áá¯á¶ážáá¯ááºáá±á¬ááºá áᬠáááºáááºáá»á¬ážááá¯ááœáá·áºááŒá®áž á¡á±á¬ááºááŒá±ááá¯á· ááœáŸá±á·áá«á ááá¯ááºáá»á¬ážááá¯ááŸáááºáá«- áááºáá±á¬ááºááŸá¯á¡ááá·áº -> áááºááŸááºáá»ááºá¡ááá·áº (áá áºáá¯áááºáž). á¡ááá·áºáááºáááºáá»á¬ážááœááºá á¡ááŒá±á¡áá±á¡á¬ážááœá±ážáá»ááºáá«á áááºááŸááááºáá±á¬ááºááŸá¯á¡ááŒá±á¡áá±áááºááá¯ážáááºááŸááºáá«á á¡á±á¬ááºááŒááºááŸá¯áá¯ááºáá±á¬ááºáá»áẠá¡á±á¬ááºááŒááºáá»áŸáẠáá±á¬ááºááœááºááááºá shell command ááá¯ááœáá·áºáá«á.
á¡áá¯áááºáž áá»á±á¬áºá
áá¬á¡ááá¯ááºážáá±á«á·á Jenkins ááẠá¡áá¯ááºááœá²á·á
ááºážáá¯á¶áá»á¬ážááᯠááá¯ááºáá»á¬ážááœáẠááááºážáááºážáá¬ážáááºá XML áá±á¬áºáááºá áááºážáá
áºáá»áŸá±á¬áẠhttp://пÑÑÑ-ЎП-заЎаМОÑ/config.xml
ááá¯á·ááŒá±á¬áá·áº áááºááẠconfiguration ááá¯ááºááá¯áá±á«ááºážáá¯ááºáá¯ááºáᬠááá¯á¡ááºáááᯠáááºážááŒááºááŒá®áž áááºááá¬ážááá·áºáá±áá¬ááá¯á· ááŒááºááá·áºááá¯ááºáááºá
áá¬ážááŸááºážáá»á¬ážá á¬áááºážá¡ááœáẠáá«áá¬áá®áá¬áá áºáᯠáááºáá®ážáááºáᯠá¡áááºááœáẠááá±á¬áá°áá®áá²á·áááºááᯠáááááá«á BUILD_VERSION?
configuration ááá¯ááºááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž á¡áá²ááŸá¬ ááŒáá·áºááŒáá·áºáá¡á±á¬ááºá Parameter ááẠáá±áá¬ááŸáá·áº ááá¯áá»ááºáá±á¬ á¡áá»áá¯ážá¡á á¬ážááŒá áºááŒá±á¬ááºáž áá±áá»á¬á á±áááºá
Spoiler á¡á±á¬ááºááœáẠScreenshot
áááºá config.xml á¡ááá¯ááºážá¡á
ááẠáá°áá®áá±ááá«áááºá ááœá±ážáá»ááºááŸá¯ááŒááºá
ááºá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááŸááœá²á áá»ááºááŸááá±áá±ážáááºá
áá±áá»á¬áá¬áž? áá«áá²á áááºáá±á¬ááºááŸá¯á¡á±á¬ááºááŒááºááẠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº script áá±ážááŒáá·áºáá¡á±á¬ááºá
script ááẠáá¬ážááŸááºážáá»á¬ážá
á¬áááºážááᯠáááºáá¶áááŸááááºááŒá
áºááŒá®ážá ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááá¯ááºááᯠáá±á«ááºážáá¯ááºáá¯ááºáᬠááá¯á¡ááºááá·áºáá±áá¬ááœáẠáá¬ážááŸááºážá
á¬áááºážááᯠáááºážááœááºáá±ážááŒá®áž ááŒááºááá·áºáááºááŒá
áºáááºá áá¯ááºáá²á·á ááŸááºáááºá áá¬ážááŸááºážáá»á¬ážá
á¬áááºážááŸáááŒá®ážáá¬áž áá±áá¬ááœáẠXML ááœáẠáá¬ážááŸááºážáá»á¬ážá
á¬áááºážááᯠáá±ážáá« (á
ááá
áºááᯠááááá¯á¶áž á
áááºááŒá®ážáá±á¬áẠá¡áá¬áááºááœáẠááŒá
áºáááá·áºáááº)á ááá¹áá¬áá±á«áºááŸá¬ áá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážááœá±ááᯠááŒááºážááŒááºážáááºááẠá¡á¬ážáá±ážáá²á· ááááááºááœá± ááŸááá±áá²ááá¯áᬠáá»áœááºáá±á¬áº áááá«áááºá áá«á áá°ááá¯á·áá²á· áááá¯ááºáá°ážá ááá·áºááœááºážáá«á
spoiler á¡á±á¬ááºááœááºá á¡áááºáá±á¬áºááŒáá« á¡á á®á¡á á¥áºááᯠá¡ááŒáá·áºá¡ááá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áá¯ááºááᯠáá»áœááºá¯ááºáááºááŒáá«áááºá
á¡áá±ážááááºážáá¬áá¬ááŸá ááá¯áá«áá áºáá¯á០áá¬ážááŸááºážáá»á¬ážá á¬áááºážááᯠááœááºáááá·áºááá¯á· áá±ážáá«á
#!/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
Jenkins ááŸáá¬ážááŸááºážáá»á¬ážááá°ááŒááºážáááœá±ážáá»ááºááŸá¯ááᯠáááºááŸá áºáááºááŒá®áž áá»áœááºá¯ááºáá²á·ááá¯á·ááẠáááºáá»ááºážáá«áá spoiler á¡á±á¬ááºááœáẠáá°áá®áá±á¬áá¯ááºááŒá áºáááºá ááá¯á·áá±á¬áº Jenkins ááŸá á¬áááºážááŒá áºáááº-
Jenkins á០config ááá¯á· áá¬ážááŸááºážáá»á¬ážá
á¬áááºážááá¯áá±ážáá«á
áá«ááᯠáááááŒá¯áá«- áá»áœááºá¯ááºá á
á¯áá±ážááŸá¯á¡áááºááœáẠáá±á¬áºáá¶áá
áºáá¯ááŒáá·áº ááá¯ááºážááŒá¬ážáá¬ážáá±á¬ áá¶áá«ááºáá
áºáá¯ááŸáá·áº áá¬ážááŸááºážáá¶áá«ááºáá
áºáᯠáá«áááºáá«áááºá ááá¯á·ááŒá±á¬áá·áº awk ááẠáááá¯á¡ááºáá±á¬ á¡á
áááºá¡ááá¯ááºážááᯠááŒááºáá±á¬ááºáááºá áááºááá¯ááºááá¯ááºá¡ááœááºá ááá·áºááá¯á¡ááºáá»ááºáá»á¬ážááŸáá·áºááá¯ááºáá®á
á±ááẠá€ááá¯ááºážááá¯ááŒá±á¬ááºážáá«á
#!/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
áá®á¡áá¯áá®á¡áá á¡áááºá áááºááẠá¡áááºáá±á¬áºááŒáá« á¥ááá¬áá»á¬ážááᯠá¡ááŒá±áá¶á áá±ážáá¬ážáá±á¬ áá¯ááºááᯠá ááºážáááºááŒá®ážáá«áá ááŒáá·áºáá»ááºááŒááºáž áá¯ááºáááºážááœáẠáá¬ážááŸááºážáá»á¬ážáá«ááŸááá±á¬ drop-down list áá áºáᯠááŸáááá·áºáá«áááºá áááºážááẠspoiler á¡á±á¬ááºááŸá screenshot ááœááºáá²á·ááá¯á·ááŒá áºáááºá
áá¬ážááŸááºážáá»á¬ážá
á¬áááºážááᯠááŸááºáááºá
áœá¬ ááŒáá·áºá
áœááºáá«á
á¡á¬ážáá¯á¶ážá¡áááºááŒá±ááẠscript áá²ááᯠcopy-paste áá¯ááºáá«á shell command ááá¯ááœáá·áºáá«á á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááááºážáááºážáá«á
Cloud shell ááá¯á· áá»áááºáááºáá±áááºá
ááœááºááááºáá¬áá»á¬ážááœáẠá á¯áá±á¬ááºážáá°áá»á¬ážááŸááááºá áá»áœááºá¯ááºááá¯á·ááẠAnsible ááᯠáá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážáá±ážááá¯á·ááŒááºážáááááá¬ááŸáá·áº ááœá²á·á ááºážááŸá¯ááá¯ááºáá¬áááºáá±áá»á¬á¡ááŒá Ạá¡áá¯á¶ážááŒá¯áá«áááºá ááá¯á·ááŒá±á¬áá·áºá ááœááºááááºáá¬áá»á¬ážáááºáá±á¬ááºááŒááºážááŸáá·áºáááºáááºáá¬áá»áŸáẠááœá±ážáá»ááºá áá¬áá¯á¶ážáá¯ááᯠáááááá¬áááº- Docker ááœáẠDocker ááá¯ááá·áºááœááºážáá«á Ansible áááºáááºáá±ááá·áºá ááºááœáẠDocker ááá¯ááá·áºááœááºážáá«á ááá¯á·ááá¯áẠcloud ááœááºááá¯ážááºááœáẠááœááºááááºáá¬áá»á¬ážáááºáá±á¬ááºáá«á á€áá±á¬ááºážáá«ážááœáẠJenkins á¡ááœáẠááááºá¡ááºáá»á¬ážá¡ááŒá±á¬ááºáž ááŸá¯ááºááááºáá±ááẠáá»áœááºá¯ááºááá¯á· ááá±á¬áá°áá«áááºá ááŸááºáááá¬áž
áá«áá¯á¶ážááŒááºáá²á·áááº- áá±á¬ááºážááŒá®á ááœááºááááºáá¬áá»á¬ážááᯠcloud ááœááºááá¯ážááºááœáẠá á¯áá±á¬ááºážááá¯ááºáá±á¬ááŒá±á¬áá·áº á¡áááºááŒá±á¬áá·áº á áááºá¡ááŸá±á¬áá·áºá¡ááŸááºááŒá áºááááºážá ááá·áºááŸááºážá¡á±á¬ááºáá¬ážáá«á cloud ááœááºááá¯ážááºááœáẠJenkins ááœááºááááºáá¬áá»á¬ážááᯠá á¯áá±á¬ááºážááŒá®áž áááºážááá¯á·ááᯠááá¯áá±áá¬á០cuber áá²ááá¯á· ááœáŸáá·áºáááºááá¯áá«áááºá ááá¯á·á¡ááŒááºá Google ááẠáááºážáá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶á¡ááœááºáž á¡ááœááºááŒáœááºááá±á¬áá»ááºáááºáá»á¬ážááŸáááŒá®áž ááŒáá·áºáá»ááºááŸá¯á¡ááŒááºááŸá¯ááºážá¡áá±á«áº á¡áá»áá¯ážááŸáá á±ááá·áº á¡áá»áá¯ážáááºáá±á¬ááºááŸá¯áá»á¬ážááŸááááºá
cloud ááœááºááá¯ážááºááá¯á· áá»áááºáááºáááºá áááºááẠá¡áá¬ááŸá áºáᯠááá¯á¡ááºáááº- gcloud ááŸáá·áº áááá¯ááºááœáá·áºáá»á¬ážááᯠááá°áá«á Google Cloud API á€áá°áá®áá±á¬áá»áááºáááºááŸá¯ááŒá¯áá¯ááºááá·áº VM á¥ááá¬á¡ááœááºá
Google cloud ááŸáá¯á¶ážááá»áááºáááºáááºá
á®á
ááºáá°áá»á¬ážá¡ááœááº
Google ááẠáááºážááááºáá±á¬ááºááŸá¯áá»á¬ážááœáẠá¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ááá¯ááºáᬠááœáá·áºááŒá¯áá»ááºááᯠááááºááẠááŒá
áºááá¯ááºááŒá±ááᯠááœáá·áºááŒá¯áááºá áááºážááẠ*nix ááá¯áááºáááºáá±ááŒá®áž console ááá¯ááºááá¯ááºáá«ááŸááá«á áá±á¬áºáá®á
ááºááŸááẠconsole ááá¯á· áá»áááºáááºááá¯ááºáááºááŒá
áºáááºá
á€ááŸááºá á¯ááá±á¬ááºá¡ááœááºážá á€ááŒá¿áá¬ááᯠááá¯ááá¯á¡áá±ážá áááºáá±á¬áºááŒááẠááá¯á¡ááºáá«á ááŸááºáá»ááºáá»á¬ážááœáẠáá±ážáá«á áá²á¡áá¯á¶á¡áá±á¬ááºáááẠáá®á¡ááŒá±á¬ááºážá¡áá¬áá²á· áááºáááºááŒá®áž ááœááºážáá¶áá±ážáá«áááºá
á¡ááœáá·áºá¡áá±ážáá»á¬ážáá±ážááẠá¡ááœááºáá¯á¶ážáááºážáááºážááŸá¬ áááºá¡ááºáá¬áá±á·á áºááŸáááá·áºááŒá áºáááºá
- cloud ááœááºááá¯ážááºááá¯á· áá±á¬ááºáááºááœá²áá»áááºáááºááá·áº VM instance ááᯠáááºáá«á
- Instance Details ááá¯ááœáá·áºááŒá®áž ááŸáááºáá«á ááŒááºááŒá¯.
- á
á¬áá»ááºááŸá¬áá¡á±á¬ááºááŒá±ááœááºá instance access áááºáááºááá¯ááœá±ážáá»ááºáá«á Cloud API áá»á¬ážá¡á¬ážáá¯á¶ážááá¯á· á¡ááŒáá·áºá¡ááááºáá±á¬ááºááœáá·áº.
á ááááºáá¯á¶
- áááºáááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááá¯ááááºážáááºážááŒá®áž áá¬ááááá¯ááœáá·áºáá«á
VM ááᯠáááºááŒá®ážáááºááŸáá·áºá SSH ááŸáá áºááá·áº áááºážááŸáá·áºáá»áááºáááºááŒá®áž áá»áááºáááºááŸá¯ á¡ááŸá¬ážá¡ááœááºážáááŸááá² ááŒá áºáá±á«áºááŒá±á¬ááºáž áá±áá»á¬áá«á á±á á¡áááá·áºááá¯áá¯á¶ážáá«-
gcloud alpha cloud-shell ssh
á¡á±á¬ááºááŒááºáá±á¬áá»áááºáááºááŸá¯áá
áºáá¯ááẠá€áá²á·ááá¯á·áá±á¬áá¯á¶ááŸááááºá
GKE ááá¯á· á¡áá¯á¶ážáá»áá«á
áá»áœááºá¯ááºááá¯á·ááẠIaC (Infrastucture á¡ááŒá ẠCode á¡ááŒá áº) ááá¯á· áá¯á¶ážáá¯á¶ážááŒá±á¬ááºážááẠááŒá áºááá¯ááºááá»áŸ áááºážáááºážáá±á«ááºážá á¯á¶ááŒáá·áº ááŒáá¯ážá á¬ážáá±áá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·á docker ááá¯ááºáá»á¬ážááᯠGit ááœáẠááááºážáááºážáá¬ážáá«áááºá áá«á ááááºááŸá¬á ááŸáá·áº kubernetes ááœáẠááŒáá·áºáá»ááºááŒááºážá¡á¬áž áááºážááá¯ááºááá¯ááºáá¯ááºááŸáá·áºáá°áá±á¬ á€áá¯ááºáááºážááŸáá¬áá»áŸáẠá¡áá¯á¶ážááŒá¯ááá·áº yaml ááá¯ááºááŒáá·áº áá±á¬áºááŒáá«áááºá áá«á áá áºáááºááá«á áá±áá¯áá»á¡á¬ážááŒáá·áº áá»áœááºáá±á¬áºááá¯ááá¯áááºááŸá¬á á¡á á®á¡á ááºááŸá¬ á€ááá¯á·ááŒá áºáááºá
- ááááºážááŸááºáá»á¬ážááááºááá¯ážáá»á¬ážááá¯áá°áááºá BUILD_VERSION ááŒááºáááºážááœá¬ážááá·áº variable áá»á¬ážá áááºááá¯ážáá»á¬ážááᯠááœá±ážáá»ááºááá¯ááºáááºá ENV.
- Dockerfile ááᯠGit ááŸáá±á«ááºážáá¯ááºáá¯ááºáá«á
- á¡áá¯á¶ážááŒá¯áááºá¡ááœáẠyaml ááá¯áá¯ááºáá¯ááºáá«á
- á€ááá¯ááºááŸá áºáá¯áá¯á¶ážááᯠscp ááŸáááá·áº cloud ááœááºááá¯ážááºááá¯á· á¡ááºáá¯ááºáá¯ááºáá«áááºá
- á¡á²áá®ááŸá¬ ááœááºááááºáá¬áá áºáá¯ááᯠáá±á¬ááºááŒá®áž ááœááºááááºáᬠááŸááºáá¯á¶áááºá á¬áááºážáá²ááᯠááœááºážááá·áºáááºá
- áá»áœááºá¯ááºááá¯á·ááẠload deployment ááá¯ááºááᯠcuber ááá¯á· á¡áá¯á¶ážáá»áááºá
ááá¯áááá»áá¡á±á¬ááºá ááŒá®ážáá¬áá²á· áá«ááá¯á·á¡ááŒá±á¬ááºážááœá± á ááŒá®ážááŒá±á¬áá±áᬠENVááá¯á·áá±á¬áẠparameter ááŸá áºáá¯ááááºááá¯ážáá»á¬ážááá¯áá»áœááºá¯ááºááá¯á·ááŒááºáááºážáááºááá¯á¡ááºáááºááá¯áá«á áá¯á·á PARAM1 О PARAM2. ááŒáá·áºáá»ááºááŒááºážá¡ááœáẠáááºážááá¯á·ááá¯ááºáááºážáá¬áááºááᯠáá»áœááºá¯ááºááá¯á·ááá·áºáá«á á¡áá»áá¯ážá¡á á¬áž- á á¬áááºážáá«áá¬áá®áá¬.
á
ááááºáá¯á¶
áá»áœááºá¯ááºááá¯á·ááẠááá¯ážááŸááºážáá±á¬áááºážááŒá±á¬ááºážááŒááºááœáŸááºážáá»ááºááŒáá·áº yaml ááá¯áá¯ááºáá¯ááºáá«áááºá áá²á·áááºáᶠááá¯. áááºá dockerfile ááœáẠááá·áºááœááºááŸáááẠáᯠáá°ááá«áááºá PARAM1 О PARAM2load name ááŒá áºáá«áááá·áºáááºá á¡áááºážáá±á¬ááºážáá²á·á¡ááºááºááŸáá·áº áááºááŸááºáá¬ážáá±á¬áá¬ážááŸááºážá áá»áŸá±á¬ááºááœáŸá¬ááŸáá·áºá¡áá° á á¯á ááºážáá¬ážáá±á¬ ááœááºááááºáá¬ááẠáááºááŸááá±áá«áááºá ááœááºááááºáá¬á á¬áááºáž áááºážáá¯áááºááŸá¬ gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONáááºááŸá¬ $BUILD_VERSION drop-down list ááŸáá² ááœá±ážáá»ááºáá²á·áááºá
á¡áááºážáá°á á¬áááºáž
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
Jenkins á¡á±ážáá»áá·áºááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž áá»áááºáááºáá«á gcloud alpha cloud-shell ssh á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯áá¯ááºááᯠááááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠááá·áºáááºáá±á¬ááºááá¯á¡áá¯á¶ážááŒá¯á cloud console ááá¯á· á¡áááá·áºáá»á¬ážáá±ážááá¯á·áá«áááºá -- á¡áááá·áº.
áá»áœááºá¯ááºááá¯á·ááẠdockerfile á¡áá±á¬ááºážá០cloud ááœááºááá¯ážááºááŸá home folder ááᯠááŸááºážáá áºáááº-
gcloud alpha cloud-shell ssh --command="rm -f Dockerfile"
scp ááᯠá¡áá¯á¶ážááŒá¯á cloud console á home folder ááœáẠáááºáááºá áœá¬áá±á«ááºážáá¯ááºáá¯ááºáá¬ážáá±á¬ dockerfile ááᯠáá¬ážááŸááá«á
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"
deployment file áá²á·áááºáž á¡áá¬ážáá°áá«áá²á á¡á±á¬ááºáá±á¬áºááŒáá« ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááẠááŒáá·áºáá»ááºááŸá¯ ááŒá áºááœá¬ážááá·áº á¡á á¯á¡áá±ážá á¡áá¯á¡áá±á¬ááºá¡áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒá±á¬ááºáž áá»á±ážáá°ážááŒá¯á áááááŒá¯áá« (awsm-cluster) ááŸáá·áº ááá±á¬áá»ááºá¡ááẠ(á¡áááºážáá±á¬ááºážáá²á· ááá±á¬áá»ááº) á¡á á¯á¡áá±ážáááºááŸááá¬áá±áá¬á
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. ááá¯ážááŸááºážáá±á¬á¡ááŒá±á¬ááºážááŒáá»ááºáá áºáá¯á¡ááœááº- áááºáááºááŸááºááŒá®ážáááºááŸáá·áº ááá¬á áá±ážáá¬ážááá·áºá¡áááºááŒáá·áºá áááºá€á¡áááºááŒáá·áº áááºáá»áŸááẠááŒáá·áºáá»ááºáá¯ááºáá±á¬ááºáá±áá«á á± áááºážááẠáááºáááºáááºáááºáá±áááºááŒá áºáááºá áá±áá°áá»á¡á¬ážááŒáá·áºá á€áááºááŸá¬ áááá¯ááºážá á¡ááá¯ááºážá¡áá¬ááẠá¡áááºážáááºáá¬ááœááºáááºá
á¡á á¬ážáá±á¬ááºáá»ááºá
á¡áááºáá±á¬áºááŒáá«á¡ááá·áºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá¯ááºáá±á¬ááºááá¯ááºáá±á¬áºáááºáž áááºážááá¯á·á muuulion ááŒá áºáá±á¬ Jenkins á¡ááœáẠááááºá¡ááºá¡áá»áá¯á·ááᯠááá¯ážááá¯ážááŸááºážááŸááºáž ááá·áºááœááºážáá«á áá«áá±ááá·áº á¡ááŒá±á¬ááºážáá áºáá¯áá¯ááŒá±á¬áá·áº Plugins ááœá±ááᯠáááŒáá¯ááºáá°ážá áá±á¬ááºážááŒá®á ááá¯ááŒá®ážááááááááŒá±á¬áááẠáá«áá°ááá¯á·ááᯠá áááºáá»ááºá¡á¬ážáááºáá±áá¯á¶áá²á· á¡á¬ážááá¯ážáááºá
ááŒá®ážáá±á¬á· áá«á·á¡ááœáẠáá±á«ááºážá
ááºá¡áá
áºáá
áºáá¯ááᯠáá±á¬ááºááá¬ááŒáá¯ááºáááºá á¡áááºáá±á¬áºááŒáá« á
á¬áá¬ážááẠá¡á
ááá¯ááºážááœáẠáá±á¬áºááŒáá¬ážáá±á¬ ááŒá¿áá¬ááᯠááŒá±ááŸááºážá
ááºááœáẠáá»áœááºá¯ááºááœá±á·ááŸááá²á·áá±á¬ ááœá±á·ááŸááá»ááºáá»á¬ážááᯠáá»áŸáá±ááẠáááºážáááºážáá
áºáá¯áááºážááŒá
áºáááºá áá°áá²á·áá°áá²á· áá°ááœá±áá²á· áá»áŸáá±ááá¯ááºáá«á áá«á·áá²á·ááœá±á·ááŸááá»ááºá á¡áááºážáá¯á¶áž áá
áºáá±á¬ááºáá±á¬ááºááᯠáá°áá®áá±ážááẠáá«áá»á±áááºáááá·áºáááºá
source: www.habr.com