เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบซเบปเบงเบซเบ™เป‰เบฒเบ—เบตเบกเบ‚เบญเบ‡เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ—เบตเบกเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ‚เปเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ—เบปเบ”เบชเบญเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบซเบกเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบšเบฑเบ™เบˆเบธเปƒเบ™เบกเบทเป‰เบเปˆเบญเบ™. เบ‚เป‰เบญเบเบ›เบฐเบเบฒเบ”เบกเบฑเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบฐเบกเบฒเบ™ 20 เบ™เบฒเบ—เบต, เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบ›เบฑเบšเบ›เบธเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบ‚เป‰เบญเบเบ•เปเปˆเบญเบฒเบเบธ. เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบชเบญเบ‡โ€‹เบชเบฒเบกโ€‹เบŠเบปเปˆเบงโ€‹เป‚เบกเบ‡ ... เบ”เบต, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบ”เบปเบฒโ€‹เป„เบ”เป‰โ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เบ•เปเปˆโ€‹เป„เบ› ...

เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบญเบกเบฎเบฑเบšเบงเปˆเบฒเบ‚เป‰เบญเบเบ‚เบตเป‰เบ„เป‰เบฒเบ™เบซเบผเบฒเบ (เบ‚เป‰เบญเบเบเบญเบกเบฎเบฑเบšเบกเบฑเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบฑเป‰เบ™เบšเป? เบšเปเปˆเปเบกเปˆเบ™เบšเป?), เปเบฅเบฐเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบœเบนเป‰เบ™เปเบฒเบ—เบตเบกเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ Jenkins, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบต CI / CD เบ—เบฑเบ‡เบซเบกเบปเบ”, เบ‚เป‰เบญเบเบ„เบดเบ”เบงเปˆเบฒ: เปƒเบซเป‰เบฅเบฒเบงเปƒเบŠเป‰เป€เบ›เบฑเบ™. เบซเบผเบฒเบโ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹! เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบทเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™ joke: เปƒเบซเป‰โ€‹เบœเบนเป‰โ€‹เบŠเบฒเบโ€‹เบ›เบฒโ€‹เปเบฅเบฐโ€‹เป€เบ‚เบปเบฒโ€‹เบˆเบฐโ€‹เบเบดเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบกเบทเป‰โ€‹เบซเบ™เบถเปˆเบ‡; เป‚เบ—เบซเบฒเบ„เบปเบ™ Fed เปเบฅเบฐเบฅเบฒเบงเบˆเบฐเบ–เบทเบ Fed เบ•เบฐเบซเบผเบญเบ”เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบฅเบฒเบง. เปเบฅเบฐเป„เบ› เบซเบผเบดเป‰เบ™ tricks เปƒเบ™เบงเบฝเบเป€เบฎเบฑเบ”เบ‡เบฒเบ™เบ—เปเบฒ, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบชเบฒเบกเบฒเบ”เบ›เบฑเบšเปƒเบŠเป‰ container เบ—เบตเปˆเบกเบตเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เบธเบเบฅเบธเป‰เบ™เบ—เบตเปˆเบชเป‰เบฒเบ‡เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Kuber เปเบฅเบฐเป‚เบญเบ™เบ„เปˆเบฒเปƒเบ”เป†เบเบฑเบšเบกเบฑเบ™. ENV (เบžเปเปˆเบ•เบนเป‰เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ™เบฑเบเบ›เบฑเบ”เบŠเบฐเบเบฒ, เบ„เบนเบชเบญเบ™เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™, เบ”เบฝเบงเบ™เบตเป‰เป„เบ”เป‰เบšเบดเบ”เบ™เบดเป‰เบงเบกเบทเบ‚เบญเบ‡เบฅเบฒเบงเปƒเบชเปˆเบงเบฑเบ”เบ‚เบญเบ‡เบฅเบฒเบงเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบ‚เป‰เบญเบเบขเปˆเบฒเบ‡เบชเบฐเปเบ”เบ‡เบญเบญเบเบซเบผเบฑเบ‡เบˆเบฒเบเบญเปˆเบฒเบ™เบ›เบฐเป‚เบซเบเบเบ™เบตเป‰).

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบšเบฑเบ™เบ—เบถเบเบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเป€เบˆเบปเป‰เบฒเบงเปˆเบฒเบ‚เป‰เบญเบเบฎเบฝเบ™เปเบ™เบงเปƒเบ”:

  1. เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเปƒเบ™ Jenkins เบˆเบฒเบเบงเบฝเบเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบซเบผเบทเบˆเบฒเบเบงเบฝเบเบญเบทเปˆเบ™เป†;
  2. เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš cloud console (Cloud shell) เบˆเบฒเบ node เบ—เบตเปˆเบกเบตเบ•เบปเบงเปเบ—เบ™ Jenkins เบ•เบดเบ”เบ•เบฑเป‰เบ‡;
  3. เบ™เบณเปƒเบŠเป‰เบงเบฝเบเบเบฑเบš Google Kubernetes Engine.


เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ, เปเบ™เปˆเบ™เบญเบ™, เป€เบ›เบฑเบ™เบ„เบปเบ™เบ—เบตเปˆเบšเปเปˆเบกเบฑเบ. เบกเบฑเบ™เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปƒเบ™ Google cloud, เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐ, เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบกเบตเบšเบฑเบ™เบŠเบต GCP. เปเบ•เปˆเบ™เบฑเป‰เบ™เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเบ™เบตเป‰เปเบกเปˆเบ™เบเปˆเบฝเบงเบเบฑเบš.

เบ™เบตเป‰เปเบกเปˆเบ™เป€เบญเบเบฐเบชเบฒเบ™ cheat เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบ‚เป‰เบญเบ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบšเบฑเบ™เบ—เบถเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™เบเปเบฅเบฐเบ™เบตเบซเบ™เบถเปˆเบ‡: เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒ, เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚, เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเปเปˆเปเบกเปˆเบ™ googled เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”, เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ googled เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฒเบเบชเปˆเบงเบ™เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป„เบ”เป‰. เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเบฅเบทเบกเบงเบดเบ—เบตเบ—เบตเปˆเบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบกเบฑเบ™, เบ‚เป‰เบญเบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ google เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเบเบฑเบ™, เบ‚เป‰เบญเบเบ‚เบฝเบ™เปเบœเปˆเบ™ cheat เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡.

เบ›เบฐเบ•เบดเป€เบชเบ”: 1. เบšเบฑเบ™เบ—เบถเบเป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™ "เบชเปเบฒเบฅเบฑเบšเบ•เบปเบ™เป€เบญเบ‡", เบชเปเบฒเบฅเบฑเบšเบžเบฒเบฅเบฐเบšเบปเบ”เบšเบฒเบ” best practice เบšเปเปˆเป„เบ”เป‰เบ™เบณเปƒเบŠเป‰. เบ‚เป‰เบญเบเบ”เบตเปƒเบˆเบ—เบตเปˆเบˆเบฐเบญเปˆเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ "เบกเบฑเบ™เบˆเบฐเบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปเบšเบšเบ™เบตเป‰" เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™.
2. เบ–เป‰เบฒเบชเปˆเบงเบ™เบ—เบตเปˆเปƒเบŠเป‰เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ–เบทเบเบ–เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เป€เบเบทเบญ, เบ„เบทเบเบฑเบšเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบญเบฑเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เป€เบเบทเบญเบ—เบตเปˆเบญเปˆเบญเบ™เปเบญ.

เบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบงเบฝเบเปƒเบ™ Jenkins เปเบšเบšเป„เบ”เบ™เบฒเบกเบดเบ

เบ‚เป‰เบญเบเป€เบซเบฑเบ™เบ„เปเบฒเบ–เบฒเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ: เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบงเบฝเบเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบกเบฑเบ™เปเบ™เบงเปƒเบ”? เปƒเบชเปˆเบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เปเบฅเบฐเบ›เบดเบ”เบ—เปˆเบฒเบ™เป„เบ›!

เบ‚เป‰เบญเบเบ•เบญเบšเบงเปˆเบฒ: เบ‚เป‰เบญเบเบ‚เบตเป‰เบ„เป‰เบฒเบ™เปเบ—เป‰เป†, เบ‚เป‰เบญเบเบšเปเปˆเบกเบฑเบเบกเบฑเบ™เป€เบกเบทเปˆเบญเบžเบงเบเป€เบ‚เบปเบฒเบˆเบปเปˆเบกเบงเปˆเบฒ: Misha, เบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡เบเปเบฒเบฅเบฑเบ‡เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡, เบ—เบธเบเบขเปˆเบฒเบ‡เบซเบฒเบเป„เบ›! เบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเบŠเบญเบเบซเบฒ, เปเบฅเบฐเบกเบตเบเบฒเบ™เบžเบดเบกเบœเบดเบ”เปƒเบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบšเบฒเบ‡เบงเบฝเบ. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเบกเบฑเบเป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบซเป‰เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบเบปเบ‡เป‚เบ”เบเบเบฒเบ™เปƒเบซเป‰เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฅเบทเบญเบเป€เบญเบปเบฒเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเบˆเบฑเบ”เบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบ.

เปเบœเบ™เบเบฒเบ™เปเบกเปˆเบ™เบ™เบตเป‰: เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบงเบฝเบเปƒเบ™ Jenkins, เปƒเบ™เบ™เบฑเป‰เบ™, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบชเบฐเบšเบฑเบšเบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, เบฅเบฐเบšเบธเบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™. ENV, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบเบฑเบšเบเปเบฒเบžเบฒเบŠเบฐเบ™เบฐเปเบฅเบฐ pushes เบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Container Registry. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบˆเบฒเบเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™, เบšเบฑเบ™เบˆเบธเป„เบ”เป‰เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™ cuber เป€เบ›เบฑเบ™ เบžเบฒเบฅเบฐเบงเบฝเบ เบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบงเบฝเบ.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบฅเบฐเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบงเบฝเบเป€เบฎเบฑเบ”เบ‡เบฒเบ™เบ—เปเบฒเปƒเบ™ Jenkins, เบ™เบตเป‰เปเบกเปˆเบ™เบ™เบญเบเบซเบปเบงเบ‚เปเป‰. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบงเบฝเบเบ‡เบฒเบ™เปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบก. เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบ”เป‰เบงเบเบชเบฐเบšเบฑเบš, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบญเบ‡เบขเปˆเบฒเบ‡: เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเบเบฑเบšเบ•เบปเบงเป€เบฅเบเป€เบงเบตเบŠเบฑเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบ•เบปเบงเปเบ›เป€เบŠเบฑเปˆเบ™: เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ เปƒเบ™โ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปƒเบซเป‰เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเบŠเบทเปˆ BUILD_VERSION, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบญเบฒเป„เบชเบขเบนเปˆเบเบฑเบšเบกเบฑเบ™เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”. เปเบ•เปˆเปƒเบซเป‰เป€เบฎเบปเบฒเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบšเบดเปˆเบ‡เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ.

เบšเปเปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบซเบผเบฒเบเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™. เบชเบญเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เป„เบ”เป‰โ€‹เบกเบฒโ€‹เป€เบ–เบดเบ‡โ€‹เบ—เบฑเบ™โ€‹เบ—เบตโ€‹:

  • เปƒเบŠเป‰ API เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบฅเบเบฐเป„เบเบ—เบตเปˆ Jenkins เบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เบกเบฑเบ™;
  • เบฎเป‰เบญเบ‡เบ‚เปเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป‚เบŸเบ™เป€เบ”เบต repository เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ™เบตเป‰เปเบกเปˆเบ™ JFrog Artifactory, เปเบกเปˆเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™).

Jenkins API เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบฅเบเบฐเป„เบ

เบญเบตเบ‡เบ•เบฒเบกเบ›เบฐเป€เบžเบ™เบตเบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบง.
เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบŸเบฃเบตโ€‹เบ‚เบญเบ‡โ€‹เบชเปˆเบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบงเบฑเบโ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹ เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เป€เบญเบเบฐเบชเบฒเบ™ API:

Jenkins เบชเบฐเปœเบญเบ‡ API เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ—เบตเปˆเบญเปˆเบฒเบ™เป„เบ”เป‰เบˆเบฒเบเป„เบฅเบเบฐเป„เบเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบกเบฑเบ™. <โ€ฆ> เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบฒเบ‡เป„เบเปเบกเปˆเบ™เปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบฎเบนเบšเปเบšเบš REST-like. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบšเปเปˆเบกเบตเบˆเบธเบ”เบ”เบฝเบงเบชเปเบฒเบฅเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบ•เปˆเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ URL เป€เบŠเบฑเปˆเบ™ ".../api/", เบšเปˆเบญเบ™เบ—เบตเปˆ"..." เปเบฒเบเป€เบ–เบดเบ‡เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ” API เบ–เบทเบเบ™เบณเปƒเบŠเป‰.

เป€เบงเบปเป‰เบฒเบญเบตเบเบขเปˆเบฒเบ‡ เปœเบถเปˆเบ‡, เบ–เป‰เบฒเบงเบฝเบเบ‡เบฒเบ™เบเบฒเบ™ เบ™เบณ เปƒเบŠเป‰เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒ เบเบณ เบฅเบฑเบ‡เป€เบงเบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, whistles API เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบฎเบนเบšเปเบšเบšเปƒเบ”เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”. เปƒเบซเป‰เบชเบธเบกเปƒเบชเปˆ XML, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ 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']

เบžเบฒเบšเบซเบ™เป‰เบฒเบˆเปเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”
เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เบ”เบต, เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบกเปˆเบงเบ™, เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบšเปเปˆเป„เบ”เป‰เบซเบฅเบญเบเบฅเบงเบ‡เบžเบงเบเป€เบฎเบปเบฒ (เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบšเปเปˆเป€เบ„เบตเบเบ•เบปเบงเบฐ!) เปเบฅเบฐเบชเบฐเปเบ”เบ‡เบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ "เบšเปเปˆเบชเปเบฒเป€เบฅเบฑเบ”":

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

เบžเบฒเบšเบซเบ™เป‰เบฒเบˆเปเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบœเบนเป‰เบ—เบตเปˆเบšเปเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”
เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เบฅเบฒเบเบŠเบทเปˆเป€เบงเบตเบŠเบฑเบ™เบˆเบฒเบเป‚เบŸเบ™เป€เบ”เบตเปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบ—เบฒเบ‡เป„เบ

เบกเบตเบงเบดเบ—เบตเบ—เบตเบชเบญเบ‡เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบšเบฑเบš. เบ‚เป‰เบญเบเบกเบฑเบเบกเบฑเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ Jenkins API. เบ”เบต, เป€เบžเบฒเบฐเบงเปˆเบฒเบ–เป‰เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™, เบกเบฑเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบซเบธเป‰เบกเบซเปเปˆเปเบฅเบฐเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เปƒเบ™เป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš, repository เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฐเบšเบฑเบšเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบกเบฑเบ. เปเบฅเป‰เบง, เปƒเบซเป‰เบ–เบฒเบกเบฅเบฒเบงเบงเปˆเบฒเบกเบตเบฅเบธเป‰เบ™เปƒเบ”เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐ curl, 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.

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบชเปˆเบงเบ™เบกเปˆเบงเบ™. Jenkins เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบงเบฝเบเบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ. เปƒเบ™เบฎเบนเบšเปเบšเบš XML. เบ•เบฒเบกเบ—เบฒเบ‡ http://ะฟัƒั‚ัŒ-ะดะพ-ะทะฐะดะฐะฝะธั/config.xml เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปเบเป‰เป„เบ‚เบกเบฑเบ™เบ•เบฒเบกเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เปเบฅเบฐเป€เบญเบปเบฒเบกเบฑเบ™เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™.

เบˆเบทเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบปเบเบฅเบปเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเป‰เบฒเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบšเบฑเบš BUILD_VERSION?

เปƒเบซเป‰เบ”เบฒเบงเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ™เบกเบฑเบ™. เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเปเบฅเบฐเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™.

เบžเบฒเบšเบซเบ™เป‰เบฒเบˆเปเบžเบฒเบเปƒเบ•เป‰ spoiler.

เบŠเบดเป‰เบ™เบชเปˆเบงเบ™ config.xml เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ„เบงเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™. เบเบปเบเป€เบงเบฑเป‰เบ™เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบเบฑเบ‡เบ‚เบฒเบ”เบซเบฒเบเป„เบ›
เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เป€เบˆเบปเป‰เบฒโ€‹เปเบ™เปˆโ€‹เปƒเบˆโ€‹เบšเปเปˆ? เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบซเป‰เบ‚เบฝเบ™ script เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ–เป‰เบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”.
script เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบšเบฑเบš, เบ”เบฒเบงเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบ‚เบฝเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบกเบฑเบ™เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™. เปเบกเปˆเบ™เปเบฅเป‰เบง. เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡. เบ‚เบฝเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเปƒเบ™ XML เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเปเบฅเป‰เบง (เบˆเบฐเป€เบ›เบฑเบ™เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบชเบฐเบ„เบดเบš). เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบฎเบนเป‰โ€‹เบงเปˆเบฒโ€‹เบเบฑเบ‡โ€‹เบกเบต fans เบขเปˆเบฒเบ‡โ€‹เบฎเบธเบ™โ€‹เปเบฎเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบญเบญเบโ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹เปƒเบ™โ€‹เป‚เบฅเบ. เบ‚เป‰เบญเบเบšเปเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบเบฐเบฅเบธเบ™เบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡ xmlstarler เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบ—เบตเปˆ config เบˆเบฐเบ–เบทเบเปเบเป‰เป„เบ‚. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบเบšเปเปˆเปเบกเปˆเบ™เบฅเบฒเบ„เบฒเปƒเบซเบเปˆเบ—เบตเปˆเบˆเบฐเบˆเปˆเบฒเบเป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เปเบเป‰เป„เบ‚ XML เป‚เบ”เบเปƒเบŠเป‰ sed.

เบžเบฒเบเปƒเบ•เป‰ spoiler, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเปเบฒเบ”เบฑเบšเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”.

เบ‚เบฝเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบฎเบธเปˆเบ™เบˆเบฒเบเป‚เบŸเบ™เป€เบ”เบตเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเป„เบ›เบซเบฒ 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

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบชเบฐเบšเบฑเบšเบˆเบฒเบ 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

เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ‚เบฝเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™เบงเบฝเบเบ‡เบฒเบ™เบเบฒเบ™เบ™เปเบฒเป„เบ›เปƒเบŠเป‰, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบšเบšเป€เบฅเบทเปˆเบญเบ™เบฅเบปเบ‡เบเบฑเบšเบชเบฐเบšเบฑเบš. เบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบทเบขเบนเปˆเปƒเบ™ screenshot เบžเบฒเบเปƒเบ•เป‰ spoiler เป„เบ”เป‰.

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบฐเบšเบฑเบšเบชเปเบฒเป€เบฅเบฑเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡
เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เบ–เป‰เบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เบฑเบ”เบฅเบญเบ - เบงเบฒเบ‡เบชเบฐเบ„เบดเบšเปƒเบชเปˆ เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ shell เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡.

เบเบณเบฅเบฑเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš Cloud shell

เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบœเบนเป‰เป€เบเบฑเบšเปƒเบ™เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต. เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ Ansible เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบˆเบฑเบ”เบชเบปเปˆเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ เปเบฅเบฐเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ•เบฒเบกเบ™เบฑเป‰เบ™เปเบฅเป‰เบง, เป€เบกเบทเปˆเบญเป€เบงเบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต, เบชเบฒเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบกเบฒเบชเบนเปˆเปƒเบˆ: เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Docker เปƒเบ™ Docker, เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Docker เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเปƒเบŠเป‰ Ansible, เบซเบผเบทเบชเป‰เบฒเบ‡ containers เปƒเบ™ cloud console. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบปเบเบฅเบปเบ‡เบ—เบตเปˆเบˆเบฐเบกเบดเบ”เบ‡เบฝเบšเบเปˆเบฝเบงเบเบฑเบš plugins เบชเปเบฒเบฅเบฑเบš Jenkins เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰. เบˆเบทเปˆ?

เบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ: เบ”เบต, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต "เบญเบญเบเบˆเบฒเบเบเปˆเบญเบ‡" เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบขเบนเปˆเปƒเบ™ cloud console, เปเบฅเป‰เบงเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบˆเบถเปˆเบ‡เบฅเบปเบšเบเบงเบ™? เบฎเบฑเบเบชเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”, เบšเปเปˆเปเบกเปˆเบ™เบšเป? เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบšเบฑเบ™เบˆเบธ Jenkins เปƒเบ™ cloud console, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ cuber เบˆเบฒเบเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, Google เบกเบตเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ—เบตเปˆเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™เบซเบผเบฒเบเบžเบฒเบเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เปเปˆเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰.

เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš cloud console, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบญเบ‡เบขเปˆเบฒเบ‡: gcloud เปเบฅเบฐเบชเบดเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ Google Cloud API เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡ VM เบ—เบตเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ”เบฝเบงเบเบฑเบ™เบ™เบตเป‰เบˆเบฐเบ–เบทเบเป€เบฎเบฑเบ”.

เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบšเปเปˆเป„เบ”เป‰เบกเบฒเบˆเบฒเบ Google cloud เป€เบฅเบตเบ
Google เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เบเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปเบšเบšเป‚เบ•เป‰เบ•เบญเบšเปƒเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™. เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš console เป„เบ”เป‰เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบเบฒเป€เบŸ, เบ–เป‰เบฒเบกเบฑเบ™เปเบฅเปˆเบ™ *nix เปเบฅเบฐเบกเบต console เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡.

เบ–เป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบ‚เป‰เบญเบเบเบงเบกเป€เบญเบปเบฒเบšเบฑเบ™เบซเบฒเบ™เบตเป‰เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เบเบญเบšเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ™เบตเป‰, เบ‚เบฝเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™. เบ–เป‰เบฒเบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฑเบšเบ„เบฐเปเบ™เบ™เบชเบฝเบ‡เบžเบฝเบ‡เบžเป, เบ‚เป‰เบญเบเบˆเบฐเบ‚เบฝเบ™เบญเบฑเบšเป€เบ”เบ”เบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰.

เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเปƒเบซเป‰เบชเบดเบ”เบ—เบดเปเบกเปˆเบ™เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ•เปŒ.

  1. เบขเบธเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡ VM เบˆเบฒเบเบ—เบตเปˆเบ•เปเปˆเบกเบฒเบ—เปˆเบฒเบ™เบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš cloud console.
  2. เป€เบ›เบตเบ”เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ เปเบฅเบฐเบ„เบฅเบดเบ เบ›เปˆเบฝเบ™เปเบ›เบ‡.
  3. เบขเบนเปˆเบฅเบธเปˆเบกเบชเบธเบ”เบ‚เบญเบ‡เปœเป‰เบฒ, เป€เบฅเบทเบญเบเบ‚เบญเบšเป€เบ‚เบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ Cloud APIs เบ—เบฑเบ‡เปเบปเบ”.

    เบžเบฒเบš เปœเป‰เบฒ เบˆเป
    เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

  4. เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเป€เบ›เบตเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡.

เป€เบกเบทเปˆเบญ VM เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เป‚เบซเบผเบ”, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบกเบฑเบ™เบœเปˆเบฒเบ™ SSH เปเบฅเบฐเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡:

gcloud alpha cloud-shell ssh

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰
เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เบ™เบณเปƒเบŠเป‰เบเบฑเบš GKE

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบžเบฐเบเบฒเบเบฒเบกเปƒเบ™เบ—เบธเบเบงเบดเบ—เบตเบ—เบฒเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ IaC (เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”), เป„เบŸเบฅเปŒ docker เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ Git. เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบกเบทเบซเบ™เบถเปˆเบ‡. เปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ kubernetes เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเป‚เบ”เบเป„เบŸเบฅเปŒ yaml, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆเป‚เบ”เบเบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰, เป€เบŠเบดเปˆเบ‡เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบเบฑเบ‡เบ„เป‰เบฒเบเบ„เบทเบฅเบฐเบซเบฑเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบกเบฒเบˆเบฒเบเบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ, เปเบœเบ™เบเบฒเบ™เปเบกเปˆเบ™เบ™เบตเป‰:

  1. เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ› BUILD_VERSION เปเบฅเบฐ, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ—เบตเปˆเบˆเบฐเบœเปˆเบฒเบ™ ENV.
  2. เบ”เบฒเบงเป‚เบซเบฅเบ” dockerfile เบˆเบฒเบ Git.
  3. เบชเป‰เบฒเบ‡ yaml เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰.
  4. เบžเบงเบเป€เบฎเบปเบฒเบญเบฑเบšเป‚เบซเบฅเบ”เบ—เบฑเบ‡เบชเบญเบ‡เป„เบŸเบฅเปŒเบ™เบตเป‰เบœเปˆเบฒเบ™ scp เป„เบ›เบ—เบตเปˆ cloud console.
  5. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เปเบฅเบฐเบเบนเป‰เบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบฐเบšเบฝเบ™ Container
  6. เบžเบงเบเป€เบฎเบปเบฒเบ™เปเบฒเปƒเบŠเป‰เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบเบฑเบš cuber.

เปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเบชเบฐเป€เบžเบฒเบฐเบซเบผเบฒเบ. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš ENV, เปเบฅเป‰เบงเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบœเปˆเบฒเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™: PARAM1 ะธ PARAM2. เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰, เบ›เบฐเป€เบžเบ” - เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเบฒเบ.

เบžเบฒเบš เปœเป‰เบฒ เบˆเป
เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเป‰เบฒเบ‡ yaml เบ”เป‰เบงเบเบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‡เปˆเบฒเบเป† echo เบเบทเปˆเบ™. เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เปเบกเปˆเบ™เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบขเบนเปˆเปƒเบ™ dockerfile เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ PARAM1 ะธ PARAM2เบงเปˆเบฒเบŠเบทเปˆเบเบฒเบ™เป‚เบซเบผเบ”เบˆเบฐเป€เบ›เบฑเบ™ เปเบญเบฑเบšเบ—เบตเปˆเบเบญเบ”เบขเป‰เบฝเบก, เปเบฅเบฐเบšเบฑเบ™เบˆเบธเบ›เบฐเบเบญเบšเบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เบขเบนเปˆเปƒเบ™ เบ—เบฐเบšเบฝเบ™เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต เบเปเบฒโ€‹เบฅเบฑเบ‡โ€‹เป„เบ› gcr.io/awesomeapp/awesomeapp-$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

เบ•เบปเบงเปเบ—เบ™ Jenkins เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ gcloud alpha cloud-shell ssh เป‚เปเบ”เป‚เบ•เป‰เบ•เบญเบšเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบชเบปเปˆเบ‡เบ„เบณเบชเบฑเปˆเบ‡เป„เบ›เบซเบฒ cloud console เป‚เบ”เบเปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต -- เบ„เปเบฒเบชเบฑเปˆเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เป‚เบŸเบ™เป€เบ”เบตเบซเบผเบฑเบเปƒเบ™ cloud console เบˆเบฒเบ dockerfile เป€เบเบปเปˆเบฒ:

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

เบงเบฒเบ‡ dockerfile เบ—เบตเปˆเบ”เบฒเบงเป‚เบซเบผเบ”เบกเบฒเปƒเปเปˆเป†เบขเบนเปˆเปƒเบ™เป‚เบŸเบ™เป€เบ”เบตเบซเบผเบฑเบเบ‚เบญเบ‡ cloud console เป‚เบ”เบเปƒเบŠเป‰ scp:

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

เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒ, เปเบ—เบฑเบเปเบฅเบฐเบŠเบธเบเบ”เบฑเบ™เปƒเบซเป‰เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเป„เบ›เบ—เบตเปˆเบ—เบฐเบšเบฝเบ™ 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"

เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป„เบŸเบฅเปŒ deployment. เบเบฐโ€‹เบฅเบธโ€‹เบ™เบฒโ€‹เบชเบฑเบ‡โ€‹เป€เบเบ”โ€‹เบงเปˆเบฒโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ‚เป‰เบฒเบ‡โ€‹เบฅเบธเปˆเบกโ€‹เบ™เบตเป‰โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบŠเบทเปˆโ€‹เบ›เบญเบกโ€‹เบ‚เบญเบ‡โ€‹เบเบธเปˆเบกโ€‹เบ—เบตเปˆโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™ (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"

เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบงเบฝเบเบ‡เบฒเบ™, เป€เบ›เบตเบ”เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡ console เปเบฅเบฐเบซเบงเบฑเบ‡เบงเปˆเบฒเบˆเบฐเป€เบซเบฑเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบžเบฒเบŠเบฐเบ™เบฐเบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เบžเบฒเบš เปœเป‰เบฒ เบˆเป
เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เปเบฅเบฐโ€‹เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบชเบปเบšโ€‹เบœเบปเบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบžเบฒโ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹

เบžเบฒเบš เปœเป‰เบฒ เบˆเป
เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเบงเบฝเบเปƒเบ™ GKE เป‚เบ”เบเบšเปเปˆเบกเบต plugins, SMS เบซเบผเบทเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เป€เบชเบทเป‰เบญเบเบฑเบ™เบซเบ™เบฒเบงเบ‚เบญเบ‡ Jenkins

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบˆเบ”เบ•เบฐเบ™เบฒเบšเปเปˆเบชเบปเบ™เปƒเบˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Ingress. เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบ™เบถเปˆเบ‡: เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ•เบฑเป‰เบ‡เบกเบฑเบ™เบ‚เบถเป‰เบ™ เบžเบฒเบฅเบฐเบงเบฝเบ เบ”เป‰เบงเบเบŠเบทเปˆเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰, เบกเบฑเบ™เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰, เบšเปเปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบŠเบทเปˆเบ™เบตเป‰เบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”. เบ”เบต, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”.

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเบซเบฅเบธเบš

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡ plugin เบšเบฒเบ‡เบชเปเบฒเบฅเบฑเบš Jenkins, muuulion เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เป€เบซเบ”เบœเบปเบ™เบ‚เป‰เบญเบเบšเปเปˆเบกเบฑเบ plugins. เบ”เบต, เบซเบผเบฒเบเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ resort เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบญเบญเบเบˆเบฒเบ desperation.

เปเบฅเบฐเบ‚เป‰เบญเบเบžเบฝเบ‡เปเบ•เปˆเบขเบฒเบเป€เบญเบปเบฒเบซเบปเบงเบ‚เปเป‰เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบ. เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบเบฑเบ‡เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเปเบšเปˆเบ‡เบ›เบฑเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบšเบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เปเบšเปˆเบ‡เบ›เบฑเบ™เบเบฑเบšเบœเบนเป‰เบ—เบตเปˆ, เป€เบŠเบฑเปˆเบ™เป€เบ‚เบปเบฒ, เบšเปเปˆเปเบกเปˆเบ™ wolf เบฎเป‰เบฒเบเปเบฎเบ‡เบขเบนเปˆเปƒเบ™ devops. เบ–เป‰เบฒเบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบšเบ‚เบญเบ‡เบ‚เป‰เบญเบเบŠเปˆเบงเบเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบšเบฒเบ‡เบ„เบปเบ™, เบ‚เป‰เบญเบเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบชเบธเบ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™