ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ืขืก ืึทืœืข ืกื˜ืึทืจื˜ืขื“ ื•ื•ืขืŸ ื“ื™ ืžืึทื ืฉืึทืคึฟื˜ ืคื™ืจืŸ ืคื•ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื˜ื™ืžื– ื’ืขื‘ืขื˜ืŸ ืื•ื ื“ื– ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ื–ื™ื™ืขืจ ื ื™ื™ึทืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ืงืึทื ื˜ื™ื™ื ื“ ืื™ืŸ ื“ืขื ื˜ืึธื’ ืคืจื™ืขืจ. ืื™ืš ืึทืจื™ื™ึทื ื’ืขืฉื™ืงื˜ ืขืก. ื ืืš ื‘ืขืจืš 20 ืžื™ื ื•ื˜ ื”ืื˜ ืžืขืŸ ื‘ืืงื•ืžืขืŸ ื ื‘ืงืฉื” ืฆื• ืืคื“ืขื™ื˜ื™ืจืŸ ื“ื™ ืืคืœื™ืงืืฆื™ืข, ื•ื•ื™ื™ืœ ื“ืืจื˜ ืื™ื– ืฆื•ื’ืขืœื™ื™ื’ื˜ ื’ืขื•ื•ืืจืŸ ื ื’ืืจ ื ื•ื™ื˜ื™ื’ืข ื–ืืš. ืื™ืš ื”ืื‘ ื‘ืื ื™ื™ื˜. ื ืึธืš ื ืึธืš ืึท ืคึผืึธืจ ืคื•ืŸ ืฉืขื” ... ื ื•, ืื™ืจ ืงืขื ืขืŸ ื˜ืจืขืคืŸ ื•ื•ืึธืก ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืคึผืึทืกื™ืจืŸ ื•ื•ื™ื™ึทื˜ืขืจ ...

ืื™ืš ืžื•ื– ืžื•ื“ื” ื–ื™ื™ืŸ, ืื™ืš ื‘ื™ืŸ ื’ืื ืฅ ืคื•ื™ืœ (ื”ืื‘ ืื™ืš ื“ืืก ื ื™ืฉื˜ ืžื•ื“ื” ื’ืขื•ื•ืขืŸ ืคืจื™ืขืจ? ื ื™ื™ืŸ?), ืื•ืŸ ืฆื•ืœื™ื‘ ื“ืขื ื•ื•ืืก ื“ื™ ืžืึทื ืฉืึทืคึฟื˜ ืคื™ืจื˜ ื”ืึธื‘ืŸ ืฆื•ื˜ืจื™ื˜ ืฆื• ื“ื–ืฉืขื ืงื™ื ืก, ืื™ืŸ ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ืึทืœืข ืกื™ / ืกื™, ืื™ืš ื’ืขื“ืึทื ืง: ืœืึธื–ืŸ ืื™ื ืฆืขื•ื•ื™ืงืœืขืŸ ื•ื•ื™ ื•ื•ื™ืคื™ืœ ืขืจ ื•ื•ื™ืœ ! ื›ืณื”ืื‘ ื–ื™ืš ื“ืขืจืžืื ื˜ ื ืฐื™ืฅ: ื’ื™ื‘ ื ืžืืŸ ื ืคื™ืฉ ืื•ืŸ ืขืจ ืฐืขื˜ ืขืกืŸ ื ื˜ืื’; ืจื•ืคืŸ ืึท ืžืขื ื˜ืฉ ืคืขื“ ืื•ืŸ ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคืขื“ ืึทืœืข ื–ื™ื™ืŸ ืœืขื‘ืŸ. ืื•ืŸ ื’ืขื’ืื ื’ืขืŸ ืฉืคึผื™ืœ ื˜ืจื™ืงืก ืื•ื™ืฃ ื“ืขืจ ืึทืจื‘ืขื˜, ื•ื•ืึธืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ื‘ื™ื›ื•ืœืช ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืžื™ื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ืงื™ื™ืŸ ื”ืฆืœื—ื” ื’ืขื‘ื•ื™ื˜ ื•ื•ืขืจืกื™ืข ืื™ืŸ ืงื•ื‘ืขืจ ืื•ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืงื™ื™ืŸ ื•ื•ืึทืœื•ืขืก ืฆื• ืขืก ENV (ืžื™ื™ืŸ ื–ื™ื™ื“ืข, ืึท ืคื™ืœืึธืœืึธื’, ืึทืŸ ืขื ื’ืœื™ืฉืขืจ ืœืขืจืขืจ ืื™ืŸ ื“ืขืจ ืคืึทืจื’ืึทื ื’ืขื ื”ื™ื™ื˜, ื”ืึธื˜ ืื™ืฆื˜ ื’ืขื“ืจื™ืžืœื˜ ื–ื™ื™ืŸ ืคื™ื ื’ืขืจ ืฆื• ื–ื™ื™ืŸ ื˜ืขืžืคึผืœ ืื•ืŸ ืึธื ืงื•ืงืŸ ืžื™ืจ ื–ื™ื™ืขืจ ืื•ื™ืกื“ืจื™ืงืœืขืš ื ืึธืš ืœื™ื™ืขื ืขืŸ ื“ืขื ื–ืึทืฅ).

ืึทื–ื•ื™, ืื™ืŸ ื“ืขื ื˜ืึธืŸ ืื™ืš ื•ื•ืขื˜ ื–ืึธื’ืŸ ืื™ืจ ื•ื•ื™ ืื™ืš ื’ืขืœืขืจื ื˜:

  1. ื“ื™ื ืึทืžื™ืฉ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื–ืฉืึธื‘ืก ืื™ืŸ Jenkins ืคึฟื•ืŸ ื“ืขืจ ืึทืจื‘ืขื˜ ื–ื™ืš ืึธื“ืขืจ ืคึฟื•ืŸ ืื ื“ืขืจืข ื“ื–ืฉืึธื‘ืก;
  2. ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ื™ ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ (ื•ื•ืึธืœืงืŸ ืฉืึธืœ) ืคึฟื•ืŸ ืึท ื ืึธื“ืข ืžื™ื˜ ื“ื™ Jenkins ืึทื’ืขื ื˜ ืื™ื ืกื˜ืึทืœื™ืจืŸ;
  3. ืฆืขื•ื•ื™ืงืœืขืŸ ื•ื•ืขืจืงืœืึธื•ื“ ืฆื• Google Kubernetes Engine.


ืื™ืŸ ืคืึทืงื˜, ืื™ืš ื‘ื™ืŸ, ืคื•ืŸ ืงื•ืจืก, ื–ื™ื™ึทืขื ื“ื™ืง ืขืคึผืขืก ื•ืžืœืขื’ืึทืœ. ืขืก ืื™ื– ืื ื’ืขื ื•ืžืขืŸ ืึทื– ืื™ืจ ื”ืึธื‘ืŸ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืื™ืŸ ื“ื™ Google ื•ื•ืึธืœืงืŸ, ืื•ืŸ, ื“ืขืจื™ื‘ืขืจ, ืื™ืจ ื–ืขื ื˜ ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืื•ืŸ, ืคื•ืŸ ืงื•ืจืก, ืื™ืจ ื”ืึธื‘ืŸ ืึท GCP ื—ืฉื‘ื•ืŸ. ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ื•ื•ืึธืก ื“ืขื ื‘ืึทืžืขืจืงื•ื ื’ ืื™ื– ื•ื•ืขื’ืŸ.

ื“ืึธืก ืื™ื– ืžื™ื™ืŸ ื•ื•ื™ื™ึทื˜ืขืจ ืึธืคึผื ืึทืจืŸ ื‘ืœืึทื˜. ืื™ืš ื•ื•ื™ืœ ื ืืจ ืฉืจื™ื™ื‘ืŸ ืื–ืขืœื›ืข ื”ืขืจื•ืช ืื™ืŸ ืื™ื™ืŸ ืคืืœ: ืื™ืš ื”ืื‘ ื’ืขื˜ืจืืคืขืŸ ืžื™ื˜ ื ืคืจืื‘ืœืขื, ืื™ืš ื”ืื‘ ืœื›ืชื—ื™ืœื” ื ื™ืฉื˜ ื’ืขื•ื•ืื•ืกื˜ ื•ื•ื™ืื–ื•ื™ ืขืก ืฆื• ืœื™ื™ื–ืŸ, ื“ื™ ืœื™ื™ื–ื•ื ื’ ืื™ื– ื ื™ืฉื˜ ื’ืขื’ื•ื’ืœื˜ ื’ืขื•ื•ืืจืŸ ืคืืจื˜ื™ืง, ื“ืขืจืคืืจ ื”ืื‘ ืื™ืš ืขืก ื’ืขื’ื•ื’ืœื˜ ืื™ืŸ ื˜ื™ื™ืœ ืื•ืŸ ืฆื•ื ืกื•ืฃ ื’ืขืœื™ื™ื–ื˜ ื“ืขื ืคืจืื‘ืœืขื. ืื•ืŸ ื›ื“ื™ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคื˜, ื•ื•ืขืŸ ืื™ืš ืคืืจื’ืขืกื˜ ื•ื•ื™ ืื–ื•ื™ ืื™ืš ื”ืื‘ ืขืก ื’ืขื˜ื•ืŸ, ื“ืืจืฃ ืื™ืš ื ื™ืฉื˜ ื ืื›ืืžืืœ ืืœืขืก ืฉื˜ื™ืง ืคืืจ ืฉื˜ื™ืง ืื•ืŸ ืขืก ืฆื•ื–ืืžืฉื˜ืขืœืŸ, ืฉืจื™ื™ื‘ ืื™ืš ื–ื™ืš ืื–ืขืœื›ืข ื˜ืฉืขื˜ ืฉื™ืฅ.

ืึธืคึผืœื™ื™ืงืขื ื•ื ื’: 1. ื“ื™ ืฆืขื˜ืœ ืื™ื– ื’ืขืฉืจื™ื‘ืŸ "ืคึฟืึทืจ ื–ื™ืš", ืคึฟืึทืจ ื“ื™ ืจืึธืœืข ื‘ืขืกื˜ืขืจ ืคื™ืจ ื˜ื•ื˜ ื ื™ืฉื˜ ืฆื•ืœื™ื™ื’ืŸ. ืื™ืš ื‘ื™ืŸ ืฆื•ืคืจื™ื“ืŸ ืฆื• ืœื™ื™ืขื ืขืŸ ื“ื™ "ืขืก ื•ื•ืึธืœื˜ ื’ืขื•ื•ืขืŸ ื‘ืขืกืขืจ ืฆื• ื˜ืึธืŸ ื“ืึธืก" ืึธืคึผืฆื™ืขืก ืื™ืŸ ื“ื™ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ.
2. ืื•ื™ื‘ ื“ืขืจ ื’ืขื•ื•ืขื ื“ื˜ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื˜ืึธืŸ ืื™ื– ื’ืขื”ืืœื˜ืŸ ื–ืึทืœืฅ, ื“ืขืžืึธืœื˜, ื•ื•ื™ ืึทืœืข ืžื™ื™ืŸ ืคืจื™ืขืจื“ื™ืงืŸ ื”ืขืจื•ืช, ื“ืึธืก ืื™ื– ืึท ืฉื•ื•ืึทืš ื–ืึทืœืฅ ืœื™ื™ื–ื•ื ื’.

ื“ื™ื ืึทืžื™ืฉ ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ืึทืจื‘ืขื˜ ืกืขื˜ื˜ื™ื ื’ืก ืื™ืŸ Jenkins

ืื™ืš ืคืึธืจื•ื™ืกื–ืึธื’ืŸ ื“ื™ื™ืŸ ืงืฉื™ื: ื•ื•ืึธืก ื”ืื˜ ื“ื™ื ืึทืžื™ืฉ ืึทืจื‘ืขื˜ ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ืฆื• ื˜ืึธืŸ ืžื™ื˜ ืื™ื? ืึทืจื™ื™ึทืŸ ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ ื“ื™ ืฉื˜ืจื™ืงืœ ืคึผืึทืจืึทืžืขื˜ืขืจ ืžืึทื ื™ื•ืึทืœื™ ืื•ืŸ ืึทื•ื•ืขืง!

ืื™ืš ืขื ื˜ืคึฟืขืจ: ืื™ืš ื‘ื™ืŸ ื˜ืึทืงืข ืคื•ื™ืœ, ืื™ืš ื”ืึธื‘ ื ื™ื˜ ืœื™ื‘ ื•ื•ืขืŸ ื–ื™ื™ ื‘ืึทืงืœืึธื’ืŸ ื–ื™ืš: ืžื™ืฉืึท, ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ื– ืงืจืึทืฉื˜, ืึทืœืฅ ืื™ื– ื ื™ื˜ืึธ! ืื™ืจ ืึธื ื”ื™ื™ื‘ ืงื•ืงืŸ, ืื•ืŸ ืขืก ืื™ื– ืึท ื˜ื™ืคึผืึธ ืื™ืŸ ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ ืขื˜ืœืขื›ืข ืึทืจื‘ืขื˜ ืงืึทื˜ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจ. ื“ืขืจื™ื‘ืขืจ, ืื™ืš ื‘ืขืกืขืจ ืฆื• ื˜ืึธืŸ ืึทืœืฅ ื•ื•ื™ ื™ืคื™ืฉืึทื ื˜ืœื™ ื•ื•ื™ ืžืขื’ืœืขืš. ืื•ื™ื‘ ืขืก ืื™ื– ืžืขื’ืœืขืš ืฆื• ืคืึทืจืžื™ื™ึทื“ืŸ ื“ื™ ื‘ืึทื ื™ืฆืขืจ ืคื•ืŸ ืึทืจื™ื™ึทืŸ ื“ืึทื˜ืŸ ื’ืœื™ื™ึทืš ื“ื•ืจืš ื’ืขื‘ืŸ ืึทื ืฉื˜ืึธื˜ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืึทืœื•ืขืก ืฆื• ืงืœื™ื™ึทื‘ืŸ ืคื•ืŸ, ืื™ืš ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ื“ื™ ืกืขืœืขืงืฆื™ืข.

ื“ืขืจ ืคึผืœืึทืŸ ืื™ื– ื“ืึธืก: ืžื™ืจ ืžืึทื›ืŸ ืึท ืึทืจื‘ืขื˜ ืื™ืŸ Jenkins, ืื™ืŸ ื•ื•ืึธืก, ืื™ื™ื“ืขืจ ืœืึธื ื˜ืฉื™ื ื’, ืžื™ืจ ืงืขืŸ ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ืึท ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ืขืจ ืจืฉื™ืžื”, ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื•ื•ืึทืœื•ืขืก ืคึฟืึทืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื“ื•ืจืš ENV, ื“ืขืžืึธืœื˜ ืขืก ืงืึทืœืขืงืฅ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ืŸ ืคึผื•ืฉื™ื– ืขืก ืื™ืŸ ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ืจืขื’ื™ืกื˜ืจื™. ื“ืขืจื ืึธืš ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ื– ืœืึธื ื˜ืฉื˜ ืื™ืŸ ืงื•ื‘ืขืจ ื•ื•ื™ ื•ื•ืขืจืงืœืึธื•ื“ ืžื™ื˜ ื“ื™ ืคึผืึทืจืึทืžืขื˜ืขืจืก ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ืึทืจื‘ืขื˜.

ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืคื•ืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืื•ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึท ืึทืจื‘ืขื˜ ืื™ืŸ Jenkins, ื“ืึธืก ืื™ื– ืึทื•ื•ืขืง-ื˜ืขืžืข. ืžื™ืจ ื•ื•ืขืœืŸ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ื“ื™ ืึทืจื‘ืขื˜ ืื™ื– ื’ืจื™ื™ื˜. ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืึท ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ืจืฉื™ืžื” ืžื™ื˜ ื•ื•ืขืจืกื™ืขืก, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื•ื•ื™ื™ ื˜ื™ื ื’ื–: ืึท ื™ื’ื–ื™ืกื˜ื™ื ื’ ืžืงื•ืจ ืจืฉื™ืžื” ืžื™ื˜ ืึท ืคึผืจื™ืึธืจื™ ื’ื™ืœื˜ื™ืง ื•ื•ืขืจืกื™ืข ื ื•ืžืขืจืŸ ืื•ืŸ ืึท ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ื•ื•ื™ ื‘ืจื™ืจื” ืคึผืึทืจืึทืžืขื˜ืขืจ ืื™ืŸ ื“ืขืจ ืึทืจื‘ืขื˜. ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืœืึธื–ืŸ ื“ื™ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ื–ื™ื™ืŸ ื’ืขื”ื™ื™ืกืŸ BUILD_VERSION, ืžื™ ืจ ืฐืขืœ ืŸ ื“ืขืจื•ื™ืฃ ื ื™ืฉ ื˜ ืคืืจืฉื˜ืฒืŸ . ืึธื‘ืขืจ ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ื ืขืขื ื˜ืขืจ ืงื•ืง ืื™ืŸ ื“ื™ ืžืงื•ืจ ืจืฉื™ืžื”.

ืขืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ืึทื–ื•ื™ ืคื™ืœืข ืึธืคึผืฆื™ืขืก. ืฆื•ื•ื™ื™ ื–ืื›ืŸ ื–ืขื ืขืŸ ืžื™ื“ ื’ืขืงื•ืžืขืŸ ืื™ืŸ ืžื™ื™ื ื•ื ื’:

  • ื ื™ืฆืŸ ื“ื™ ืจื™ืžืึธื•ื˜ ืึทืงืกืขืก ืึทืคึผื™ ืึทื– Jenkins ืึธืคืคืขืจืก ืฆื• ื–ื™ื™ืŸ ื™ื•ื–ืขืจื–;
  • ื‘ืขื˜ืŸ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ื•ื•ื™ื™ึทื˜ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ื˜ืขืงืข (ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ ื“ืึธืก ืื™ื– JFrog Artifactory, ื•ื•ืึธืก ืื™ื– ื ื™ืฉื˜ ื•ื•ื™ื›ื˜ื™ืง).

Jenkins ืจื™ืžืึธื•ื˜ ืึทืงืกืขืก API

ืœื•ื™ื˜ ื“ืขืจ ื’ืขื’ืจื™ื ื“ืขื˜ืข ืื•ื™ืกื’ืขืฆื™ื™ื›ื ื˜ืข ื˜ืจืื“ื™ืฆื™ืข ื•ื•ืืœื˜ ืื™ืš ื‘ืขืกืขืจ ื’ืขื•ื•ืืœื˜ ืื•ื™ืกืžื™ื™ื“ืŸ ืœืื ื’ืข ืขืจืงืœืขืจื•ื ื’ืขืŸ.
ืื™ ืš ืฐืข ืœ ื–ื™ ืš ื“ืขืจืœื•ื™ื‘ ืŸ ื ื ืจ ื ืคืจืฒืข ืจ ืื™ื‘ืขืจื–ืขืฆื•ื  ื’ ืคื• ืŸ ื ืฉื˜ื™ืง ืœ ืคื• ืŸ ืขืจืฉื˜ ืŸ ืคืืจืื’ืจืืฃ ืขืจืฉื˜ืขืจ ื‘ืœืึทื˜ ืคื•ืŸ ืึทืคึผื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ:

Jenkins ื’ื™ื˜ ืึทืŸ ืึทืคึผื™ ืคึฟืึทืจ ื•ื•ื™ื™ึทื˜ ืžืึทืฉื™ืŸ ืœื™ื™ื ืขื•ื•ื“ื™ืง ืึทืงืกืขืก ืฆื• ื–ื™ื™ืŸ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™. <...> ื•ื•ื™ื™ึทื˜ ืึทืงืกืขืก ืื™ื– ื’ืขืคึฟื™ื ื˜ ืื™ืŸ ืึท REST-ื•ื•ื™ ืกื˜ื™ืœ. ื“ืึธืก ืžื™ื™ื ื˜ ืึทื– ืขืก ืื™ื– ืงื™ื™ืŸ ืื™ื™ืŸ ืคึผืึธื–ื™ืฆื™ืข ืคื•ื ื˜ ืฆื• ืึทืœืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ, ืึธื‘ืขืจ ืึทื ืฉื˜ืึธื˜ ืึท URL ื•ื•ื™ ".../ืึทืคึผื™/", ื•ื•ืื• "..." ืžื™ื˜ืœ ื“ื™ ื›ื™ื™ืคืขืฅ ืฆื• ื•ื•ืึธืก ื“ื™ API ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ื–ืขื ืขืŸ ื’ืขื•ื•ืขื ื“ื˜.

ืื™ืŸ ืื ื“ืขืจืข ื•ื•ืขืจื˜ืขืจ, ืื•ื™ื‘ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ื•ื•ืึธืก ืžื™ืจ ืื™ืฆื˜ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ืื™ื– ื‘ื ื™ืžืฆื ืื™ืŸ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, ื“ืขืžืึธืœื˜ ื“ื™ ืึทืคึผื™ ื›ื•ื•ื™ืกืึทืœื– ืคึฟืึทืจ ื“ืขื ืึทืจื‘ืขื˜ ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื ืื™ืŸ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

ื•ื•ื™ื™ึทื˜ืขืจ, ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื‘ืจื™ืจื” ืื™ืŸ ื•ื•ืึธืก ืคืึธืจืขื ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜. ืœืึธืžื™ืจ ืคืึธืงื•ืก ืื•ื™ืฃ XML, ื•ื•ื™ื™ึทืœ ื“ื™ API ื‘ืœื•ื™ื– ืึทืœืึทื•ื– ืคึฟื™ืœื˜ืจื™ืจื•ื ื’ ืื™ืŸ ื“ืขื ืคืึทืœ.

ืœืึธืžื™ืจ ื ืึธืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ ืึทืœืข ืึทืจื‘ืขื˜ ืœื•ื™ืคื˜. ืžื™ืจ ื–ืขื ืขืŸ ื‘ืœื•ื™ื– ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื ืึธืžืขืŸ (displayName) ืื•ืŸ ื–ื™ื™ึทืŸ ืจืขื–ื•ืœื˜ืึทื˜ (ื˜ืึทื›ืœืขืก):

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 ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ื ื•, ื ืึธืจ ืคึฟืึทืจ ืฉืคึผืึทืก, ืœืึธื–ืŸ ืื•ื ื“ื– ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ื“ื™ ืคื™ืœื˜ืขืจ ื”ืื˜ ื ื™ืฉื˜ ืึธืคึผื ืึทืจืŸ ืื•ื ื“ื– (ืคื™ืœื˜ืขืจืก ืงื™ื™ื ืžืึธืœ ืœื™ื’ืŸ!) ืื•ืŸ ื•ื•ื™ื™ึทื–ืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ "ื ื™ื˜ ื’ืขืจืึธื˜ืŸ" ืึธื ืขืก:

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

ืกืงืจืขืขื ืฉืึธื˜ ืคื•ืŸ ื“ืขืจ ืจืฉื™ืžื” ืคื•ืŸ ื ื™ื˜-ื’ืขืจืึธื˜ืŸ ืึธื ืขืก
ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ืึท ื˜ืขืงืข ืื•ื™ืฃ ืึท ื•ื•ื™ื™ึทื˜ ืกืขืจื•ื•ืขืจ

ืขืก ืื™ื– ืึท ืฆื•ื•ื™ื™ื˜ ื•ื•ืขื’ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก. ืื™ืš ื•ื•ื™ ืขืก ืืคื™ืœื• ืžืขืจ ื•ื•ื™ ืึทืงืกืขืก ื“ื™ Jenkins API. ื ื•, ื•ื•ื™ื™ึทืœ ืื•ื™ื‘ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื”ืฆืœื—ื” ื’ืขื‘ื•ื™ื˜, ืขืก ืžื™ื˜ืœ ืึทื– ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืคึผืึทืงื™ื“ื–ืฉื“ ืื•ืŸ ื’ืขืฉื˜ืขืœื˜ ืื™ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืื™ืŸ ื“ื™ ืฆื•ื ืขืžืขืŸ ื˜ืขืงืข. ื•ื•ื™, ืึท ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืื™ื– ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืกื˜ืึธืจื™ื“ื–ืฉ ืคื•ืŸ ืืจื‘ืขื˜ืŸ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–. ื•ื•ื™. ื ื•, ืœืึธื–ืŸ ืื•ื ื“ื– ืคืจืขื’ืŸ ืื™ื ื•ื•ืึธืก ื•ื•ืขืจืกื™ืขืก ื–ืขื ืขืŸ ืื™ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ. ืžื™ืจ ื•ื•ืขืœืŸ ืงืขืจืœ, grep ืื•ืŸ awk ื“ื™ ื•ื•ื™ื™ึทื˜ ื˜ืขืงืข. ืื•ื™ื‘ ื•ื•ืขืจ ืขืก ื™ื– ืื™ื– ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ื“ื™ ืึธื ืขืœื™ื ืขืจ, ืขืก ืื™ื– ืื•ื ื˜ืขืจ ื“ื™ ืกืคึผื•ื™ืœืขืจ.

ืื™ื™ืŸ ืฉื•ืจื” ื‘ืึทืคึฟืขืœ
ื‘ื™ื˜ืข ื˜ืึธืŸ ืฆื•ื•ื™ื™ ื˜ื™ื ื’ื–: ืื™ืš ืคืึธืจืŸ ื“ื™ ืงืฉืจ ื“ืขื˜ืึทื™ืœืก ืื™ืŸ ื“ื™ ื›ืขื“ืขืจ ืื•ืŸ ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืึทืœืข ื“ื™ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ืขืจ ื˜ืขืงืข, ืื•ืŸ ืื™ืš ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ื‘ืœื•ื™ื– ื“ื™ ื•ื•ืึธืก ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ืื™ืŸ ืึท ื—ื•ื“ืฉ. ืจืขื“ืึทื’ื™ืจืŸ ื“ื™ ื‘ืึทืคึฟืขืœ ืฆื• ืคึผืึทืกืŸ ื“ื™ื™ืŸ ืจื™ืึทืœืึทื˜ื™ื– ืื•ืŸ ื“ืึทืจืฃ:

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

ืžื™ืจ ืคื™ื’ื™ืขืจื“ ืื•ื™ืก ื“ื™ ืžืงื•ืจ ืคื•ืŸ ื“ืขืจ ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก. ื–ืืœ ืก ืื™ืฆื˜ ื™ื ืงืึธืจืคึผืขืจื™ื™ื˜ ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ืจืฉื™ืžื” ืื™ืŸ ื“ื™ ืึทืจื‘ืขื˜. ืคึฟืึทืจ ืžื™ืจ, ื“ื™ ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ืœื™ื™ื–ื•ื ื’ ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ืœื™ื™ื’ืŸ ืึท ืฉืจื™ื˜ ืื™ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื‘ื•ื™ืขืŸ ืึทืจื‘ืขื˜. ื“ืขืจ ืฉืจื™ื˜ ื•ื•ืึธืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืื•ื™ื‘ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ื’ืขื•ื•ืขืŸ "ื”ืฆืœื—ื”".

ืขืคึฟืขื ืขืŸ ื“ื™ ืกืขื˜ื˜ื™ื ื’ืก ืคึฟืึทืจ ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืึทืจื‘ืขื˜ ืื•ืŸ ืžืขื’ื™ืœืข ืฆื• ื“ื™ ื“ื ืึธ. ื“ืจื™ืงื˜ ืื•ื™ืฃ ื“ื™ ืงื ืขืคึผืœืขืš: ืœื™ื™ื’ ื‘ื•ื™ืขืŸ ืฉืจื™ื˜ -> ืงืึทื ื“ื™ืฉืึทื ืึทืœ ืฉืจื™ื˜ (ืื™ื™ืŸ). ืื™ืŸ ื“ื™ ืฉืจื™ื˜ ืกืขื˜ื˜ื™ื ื’ืก, ืกืขืœืขืงื˜ื™ืจืŸ ื“ืขื ืฆื•ืฉื˜ืึทื ื“ ืงืจืึทื ื˜ ื‘ื•ื™ืขืŸ ืกื˜ืึทื˜ื•ืก, ืฉื˜ืขืœืŸ ื“ื™ ื•ื•ืขืจื˜ ื”ืฆืœื—ื”, ื“ืขืจ ืงืึทืžืฃ ืฆื• ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื•ื™ื‘ ื’ืขืจืึธื˜ืŸ ืœื•ื™ืคืŸ ืฉืึธืœ ื‘ืึทืคึฟืขืœ.

ืื•ืŸ ืื™ืฆื˜ ื“ืขืจ ืฉืคึผืึทืก ื˜ื™ื™ืœ. Jenkins ืกื˜ืึธืจื– ืึทืจื‘ืขื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– ืื™ืŸ ื˜ืขืงืขืก. ืื™ืŸ ืงืกืžืœ ืคึฟืึธืจืžืึทื˜. ืฆื•ื–ืืžืขืŸ ื“ืขื ื•ื•ืขื’ http://ะฟัƒั‚ัŒ-ะดะพ-ะทะฐะดะฐะฝะธั/config.xml ืึทืงืงืึธืจื“ื™ื ื’ืœื™, ืื™ืจ ืงืขื ืขืŸ ืืจืืคืงืืคื™ืข ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข, ืจืขื“ืึทื’ื™ืจืŸ ืขืก ื•ื•ื™ ื ื™ื™ื˜ื™ืง ืื•ืŸ ืฉื˜ืขืœืŸ ืขืก ืฆื•ืจื™ืง ื•ื•ื• ืื™ืจ ื”ืึธื˜ ืขืก.

ื’ืขื“ืขื ืงื˜, ืžื™ืจ ื”ืึธื‘ืŸ ืžืกื›ื™ื ืื•ื™ื‘ืŸ ืึทื– ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทื›ืŸ ืึท ืคึผืึทืจืึทืžืขื˜ืขืจ ืคึฟืึทืจ ื“ืขืจ ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก BUILD_VERSION?

ืœืึธืžื™ืจ ืืจืืคืงืืคื™ืข ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ืื•ืŸ ื ืขืžืขืŸ ืึท ืงื•ืง ืื™ืŸ ืขืก. ื ืึธืจ ืฆื• ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ื“ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจ ืื™ื– ืื™ืŸ ืคึผืœืึทืฅ ืื•ืŸ ืคื•ืŸ ื“ื™ ื’ืขื‘ืขื˜ืŸ ื˜ื™ืคึผ.

ืกืงืจืขืขื ืฉืึธื˜ ืื•ื ื˜ืขืจ ืกืคึผื•ื™ืœืขืจ.

ื“ื™ื™ืŸ config.xml ืคืจืึทื’ืžืขื ื˜ ื–ืึธืœ ืงื•ืงืŸ ื“ื™ ื–ืขืœื‘ืข. ื—ื•ืฅ ืึทื– ื“ืขืจ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ื‘ืจื™ืจื” ืขืœืขืžืขื ื˜ ืื™ื– ื ืึธืš ืคืขืœื ื“ื™ืง
ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ื‘ื™ืกื˜ื• ื–ื™ื›ืขืจ? ืึทื– ืก ืขืก, ืœืึธื–ืŸ ืื•ื ื“ื– ืฉืจื™ื™ึทื‘ืŸ ืึท ืฉืจื™ืคื˜ ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืื•ื™ื‘ ื“ื™ ื‘ื•ื™ืขืŸ ืื™ื– ื’ืขืจืึธื˜ืŸ.
ื“ืขืจ ืฉืจื™ืคื˜ ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก, ืืจืืคืงืืคื™ืข ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข, ืฉืจื™ื™ึทื‘ืŸ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก ืื™ืŸ ืขืก ืื™ืŸ ื“ืขื ืึธืจื˜ ื•ื•ืึธืก ืžื™ืจ ื“ืึทืจืคึฟืŸ, ืื•ืŸ ืฉื˜ืขืœืŸ ืขืก ืฆื•ืจื™ืง. ื™ื. ื“ืืก ืื™ื– ืจื™ื›ื˜ื™ื’. ืฉืจื™ื™ื‘ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก ืื™ืŸ ืงืกืžืœ ืื™ืŸ ื“ืขื ืึธืจื˜ ื•ื•ื• ืขืก ืื™ื– ืฉื•ื™ืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก (ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜, ื ืึธืš ื“ืขืจ ืขืจืฉื˜ืขืจ ืงืึทื˜ืขืจ ืคื•ืŸ ื“ื™ ืฉืจื™ืคื˜). ืื™ืš ื•ื•ื™ืกืŸ ืขืก ื–ืขื ืขืŸ ื ืึธืš ืฆืึธืจื ื“ื™ืง ืคืึทื ืก ืคื•ืŸ ืจืขื’ื•ืœืขืจ ืื•ื™ืกื“ืจื•ืงืŸ ืื™ืŸ ื“ืขืจ ื•ื•ืขืœื˜. ืื™ืš ื’ืขื”ืขืจ ื ื™ืฉื˜ ืฆื• ื–ื™ื™. ื‘ื™ื˜ืข ื™ื ืกื˜ืึทืœื™ืจืŸ xmlstarler ืฆื• ื“ื™ ืžืึทืฉื™ืŸ ื•ื•ื• ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืขื“ื™ื˜ื™ื“. ืขืก ืžื™ื™ื ื˜ ืฆื• ืžื™ืจ ืึทื– ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึทื–ืึท ืึท ื’ืจื•ื™ืก ืคึผืจื™ื™ึทื– ืฆื• ื‘ืึทืฆืึธืœืŸ ืฆื• ื•ื™ืกืžื™ื™ื“ืŸ ืขื“ื™ื˜ื™ื ื’ ืงืกืžืœ ื ื™ืฆืŸ ืกืขื“.

ืื•ื ื˜ืขืจ ื“ื™ ืกืคึผื•ื™ืœืขืจ, ืื™ืš ืคืึธืจืฉื˜ืขืœืŸ ื“ื™ ืงืึธื“ ื•ื•ืึธืก ืคึผืขืจืคืึธืจืžื– ื“ื™ ืื•ื™ื‘ืŸ ืกื™ืงื•ื•ืึทื ืก ืื™ืŸ ื–ื™ื™ืŸ ื™ื ื˜ื™ื™ืขืจืžืึทื ื˜.

ืฉืจื™ื™ื‘ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ืึท ื˜ืขืงืข ืื•ื™ืฃ ื“ื™ ื•ื•ื™ื™ึทื˜ ืกืขืจื•ื•ืขืจ ืฆื• ื“ื™ ืงืึธื ืคื™ื’

#!/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 ืื•ืŸ ืื™ืจ ื–ืขื ื˜ ื•ื•ื™ ืคื•ื™ืœ ื•ื•ื™ ืžื™ืจ, ืื•ื ื˜ืขืจ ื“ื™ ืกืคึผื•ื™ืœืขืจ ืื™ื– ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืงืึธื“, ืึธื‘ืขืจ ืึท ืจืฉื™ืžื” ืคื•ืŸ Jenkins:

ืฉืจื™ื™ื‘ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ Jenkins ืฆื• ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ
ื ืึธืจ ื”ืึทืœื˜ืŸ ื“ืขื ืื™ืŸ ื’ื™ื™ึทืกื˜: ืžื™ื™ืŸ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื ืึธืžืขืŸ ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ืึท ืกื™ืงื•ื•ืึทื ืก ื ื•ืžืขืจ ืื•ืŸ ืึท ื•ื•ืขืจืกื™ืข ื ื•ืžืขืจ, ืืคื’ืขืฉื™ื™ื“ื˜ ื“ื•ืจืš ืึท ืฆื•ื•ื™ื™ืคึผื™ื ื˜ืœ. ืึทืงืงืึธืจื“ื™ื ื’ืœื™, ืึทื•ื•ืง ืงืึทืฅ ืึทื•ื•ืขืง ื“ื™ ื•ืžื ื™ื™ื˜ื™ืง ื˜ื™ื™ืœ. ืคึฟืึทืจ ื–ื™ืš, ื˜ื•ื™ืฉืŸ ื“ืขื ืฉื•ืจื” ืฆื• ื“ื™ื™ืŸ ื‘ืื“ืขืจืคืขื ื™ืฉืŸ.

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

ืื™ืŸ ื˜ืขืึธืจื™ืข, ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ื˜ืขืกื˜ืขื“ ื“ื™ ืงืึธื“ ื’ืขืฉืจื™ื‘ืŸ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ื‘ื™ื™ืฉืคื™ืœืŸ ืื•ื™ื‘ืŸ, ืื™ืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืจ ื–ืึธืœ ืฉื•ื™ืŸ ื”ืึธื‘ืŸ ืึท ืคืึทืœ-ืึทืจืึธืคึผ ืจืฉื™ืžื” ืžื™ื˜ ื•ื•ืขืจืกื™ืขืก. ืขืก ืื™ื– ื•ื•ื™ ืื™ืŸ ื“ื™ ืกืงืจืขืขื ืฉืึธื˜ ืื•ื ื˜ืขืจ ื“ื™ ืกืคึผื•ื™ืœืขืจ.

ืจื™ื›ื˜ื™ืง ื’ืขืขื ื“ื™ืงื˜ ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก
ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ืื•ื™ื‘ ืึทืœืฅ ื’ืขืืจื‘ืขื˜, ื ืึธื›ืžืึทื›ืŸ ืื•ืŸ ืคึผืึทืคึผ ื“ื™ ืฉืจื™ืคื˜ ืื™ืŸ ืœื•ื™ืคืŸ ืฉืึธืœ ื‘ืึทืคึฟืขืœ ืื•ืŸ ืจืึทื˜ืขื•ื•ืขืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ.

ืงืึทื ืขืงื˜ื™ื ื’ ืฆื• ืงืœืึธื•ื“ ืฉืึธืœ

ืžื™ืจ ื”ืึธื‘ืŸ ืงืึทืœืขืงื˜ืขืจื– ืื™ืŸ ืงืึทื ื˜ื™ื™ื ืขืจื–. ืžื™ืจ ื ื•ืฆืŸ Ansible ื•ื•ื™ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืขืงืกืคึผืจืขืก ื’ืขืฆื™ื™ึทื’ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคืึทืจื•ื•ืึทืœื˜ืขืจ. ืึทืงืงืึธืจื“ื™ื ื’ืœื™, ื•ื•ืขืŸ ืขืก ืงื•ืžื˜ ืฆื• ื‘ื•ื™ืขืŸ ืงืึทื ื˜ื™ื™ื ืขืจื–, ื“ืจื™ื™ ืึธืคึผืฆื™ืขืก ืงื•ืžืขืŸ ืฆื• ืžื™ื™ื ื•ื ื’: ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ืึธืงืงืขืจ ืื™ืŸ ื“ืึธืงืงืขืจ, ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ืึธืงืงืขืจ ืื•ื™ืฃ ืึท ืžืึทืฉื™ืŸ ืžื™ื˜ ืึทื ืกื™ื‘ืœืข, ืึธื“ืขืจ ื‘ื•ื™ืขืŸ ืงืึทื ื˜ื™ื™ื ืขืจื– ืื™ืŸ ืึท ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ. ืžื™ืจ ื”ืึธื‘ืŸ ืžืกื›ื™ื ื’ืขื•ื•ืขืŸ ืฆื• ื‘ืœื™ื™ื‘ืŸ ืฉื˜ื™ืœ ื•ื•ืขื’ืŸ ืคึผืœื•ื’ื™ื ืก ืคึฟืึทืจ Jenkins ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ. ื’ืขื“ืขื ืงื˜ ?

ืื™ืš ื‘ืึทืฉืœืึธืกืŸ: ื ื•, ื–ื™ื ื˜ ืงืึทื ื˜ื™ื™ื ืขืจื– "ืื•ื™ืก ื“ื™ ืงืขืกื˜ืœ" ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื–ืืžืœื˜ ืื™ืŸ ื“ื™ ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ, ื“ืขืžืึธืœื˜ ื•ื•ืึธืก ืึทืจืŸ? ื”ืึทืœื˜ืŸ ืขืก ืจื™ื™ืŸ, ืจืขื›ื˜? ืื™ืš ื•ื•ื™ืœืŸ ืฆื• ื–ืึทืžืœืขืŸ Jenkins ืงืึทื ื˜ื™ื™ื ืขืจื– ืื™ืŸ ื“ื™ ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ, ืื•ืŸ ื“ืึทืŸ ืงืึทื˜ืขืจ ื–ื™ื™ ืื™ืŸ ื“ื™ ืงื•ื‘ืขืจ ืคึฟื•ืŸ ื“ืึธืจื˜. ื“ืขืจืฆื•, Google ื”ืื˜ ื–ื™ื™ืขืจ ืจื™ื™ึทืš ื˜ืฉืึทื ืึทืœื– ืื™ืŸ ื–ื™ื™ึทืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ, ื•ื•ืึธืก ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืึท ื•ื•ื•ื™ืœื˜ื•ื™ืง ื•ื•ื™ืจืงื•ื ื’ ืื•ื™ืฃ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜.

ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ื™ ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื•ื•ื™ื™ ื˜ื™ื ื’ื–: gcloud ืื•ืŸ ืึทืงืกืขืก ืจืขื›ื˜ ืฆื• Google Cloud API ืคึฟืึทืจ ื“ื™ VM ื‘ื™ื™ึทืฉืคึผื™ืœ ืžื™ื˜ ื•ื•ืึธืก ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืงืฉืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืžืื›ื˜.

ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ืคึผืœืึทืŸ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ื ื™ืฉื˜ ืคึฟื•ืŸ Google ื•ื•ืึธืœืงืŸ
Google ืึทืœืึทื•ื– ื“ื™ ืžืขื’ืœืขื›ืงื™ื™ื˜ ืคื•ืŸ ื“ื™ืกื™ื™ื‘ืึทืœ ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื• ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืื™ืŸ ื–ื™ื™ึทืŸ ื‘ืึทื“ื™ื ื•ื ื’ืก. ื“ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ื™ ืงืึทื ืกืึธื•ืœ ืืคื™ืœื• ืคึฟื•ืŸ ืึท ืงืึทื•ื•ืข ืžืึทืฉื™ืŸ, ืื•ื™ื‘ ืขืก ืื™ื– ืคืœื™ืกื ื“ื™ืง * ื ื™ืงืก ืื•ืŸ ื”ืื˜ ืึท ืงืึทื ืกืึธื•ืœ ื–ื™ืš.

ืื•ื™ื‘ ืขืก ืื™ื– ืึท ื ื•ื™ื˜ ืคึฟืึทืจ ืžื™ืจ ืฆื• ื“ืขืงืŸ ื“ืขื ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ ืื™ืŸ ื“ื™ ืคืจื™ื™ืžื•ื•ืขืจืง ืคื•ืŸ ื“ืขื ื˜ืึธืŸ, ืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ื“ื™ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ. ืื•ื™ื‘ ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื’ืขื ื•ื’ ื•ื•ืึธื•ืฅ, ืื™ืš ื•ื•ืขืœ ืฉืจื™ื™ึทื‘ืŸ ืึท ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืื•ื™ืฃ ื“ืขื ื˜ืขืžืข.

ื“ื™ ื™ื–ื™ืึทืกื˜ ื•ื•ืขื’ ืฆื• ื’ืขื‘ืŸ ืจืขื›ื˜ ืื™ื– ื“ื•ืจืš ื“ื™ ื•ื•ืขื‘ ืฆื•ื‘ื™ื ื“.

  1. ื”ืึทืœื˜ืŸ ื“ื™ VM ื‘ื™ื™ึทืฉืคึผื™ืœ ืคึฟื•ืŸ ื•ื•ืึธืก ืื™ืจ ื•ื•ืขื˜ ื“ืขืจื ืึธืš ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ื™ ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ.
  2. ืขืคึฟืขื ืขืŸ ื™ื ืกื˜ืึทื ืกืข ื“ืขื˜ืึทื™ืœืก ืื•ืŸ ื’ื™ื˜ ื˜ื•ื™ืฉืŸ.
  3. ืื™ืŸ ื“ื™ ื“ื ืึธ ืคื•ืŸ ื“ื™ ื‘ืœืึทื˜, ืกืขืœืขืงื˜ื™ืจืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืึทืงืกืขืก ืคืึทืจื ืขื ื’ืึทื ืฅ ืึทืงืกืขืก ืฆื• ืึทืœืข ืงืœืึธื•ื“ ืึทืคึผื™ืก.

    ืกืงืจืขืขื ืฉืึธื˜
    ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

  4. ื”ื™ื˜ ื“ื™ื™ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื•ืŸ ืงืึทื˜ืขืจ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ.

ืึทืžืึธืœ ื“ื™ VM ืื™ื– ืคืึทืจื˜ื™ืง ืœืึธื•ื“ื™ื ื’, ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืขืก ื“ื•ืจืš SSH ืื•ืŸ ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ื“ื™ ืงืฉืจ ืึทืงืขืจื– ืึธืŸ ืึท ื˜ืขื•ืช. ื ื™ืฆืŸ ื“ืขื ื‘ืึทืคึฟืขืœ:

gcloud alpha cloud-shell ssh

ื ื’ืขืจืึธื˜ืŸ ืงืฉืจ ืงื•ืงื˜ ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก
ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ืฆืขื•ื•ื™ืงืœืขืŸ ืฆื• GKE

ื–ื™ื ื˜ ืžื™ืจ ืฉื˜ืจืขื‘ืŸ ืื™ืŸ ืึทืœืข ืžืขื’ืœืขืš ื•ื•ืขื’ ืฆื• ื’ืึธืจ ื‘ืึทืฉื˜ื™ืžืขืŸ ืฆื• ื™ืึทืง (ื™ื ืคืจืึทืกื˜ืงื˜ื•ืจืข ื•ื•ื™ ืึท ืงืึธื“), ืื•ื ื“ื–ืขืจ ื“ืึธืงืงืขืจ ื˜ืขืงืขืก ื–ืขื ืขืŸ ืกื˜ืึธืจื“ ืื™ืŸ ื’ื™ื˜. ื“ืืก ืื™ื– ืคื•ืŸ ืื™ื™ืŸ ื–ื™ื™ื˜. ืื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก ืื™ื– ื“ื™ืกืงืจื™ื™ื‘ื“ ื“ื•ืจืš ืึท ื™ืึทืžืœ ื˜ืขืงืข, ื•ื•ืึธืก ืื™ื– ื’ืขื ื™ืฆื˜ ื‘ืœื•ื™ื– ื“ื•ืจืš ื“ืขื ืึทืจื‘ืขื˜, ื•ื•ืึธืก ืื™ื– ืื•ื™ืš ื•ื•ื™ ืงืึธื“. ื“ืืก ืื™ื– ืคื•ืŸ ื“ื™ ืื ื“ืขืจืข ื–ื™ื™ื˜. ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืื™ืš ืžื™ื™ื ืขืŸ, ื“ืขืจ ืคึผืœืึทืŸ ืื™ื– ื“ืึธืก:

  1. ืžื™ืจ ื ืขืžืขืŸ ื“ื™ ื•ื•ืึทืœื•ืขืก ืคื•ืŸ ื“ื™ ื•ื•ืขืจื™ืึทื‘ืึทืœื– BUILD_VERSION ืื•ืŸ, ืึธืคึผื˜ื™ืึธื ืึทืœืœื™, ื“ื™ ื•ื•ืึทืœื•ืขืก ืคื•ืŸ ื“ื™ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ENV.
  2. ืืจืืคืงืืคื™ืข ื“ื™ ื“ืึธืงืงืขืจ ื˜ืขืงืข ืคึฟื•ืŸ Git.
  3. ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื™ืึทืžืœ ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜.
  4. ืžื™ืจ ื•ืคึผืœืึธืึทื“ ื‘ื™ื™ื“ืข ื“ื™ ื˜ืขืงืขืก ื“ื•ืจืš ืกืงืคึผ ืฆื• ื“ื™ ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ.
  5. ืžื™ืจ ื‘ื•ื™ืขืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื“ืึธืจื˜ ืื•ืŸ ืฉื˜ื•ืคึผืŸ ืขืก ืื™ืŸ ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ืจืขื’ื™ืกื˜ืจื™
  6. ืžื™ืจ ืฆื•ืœื™ื™ื’ืŸ ื“ื™ ืžืึทืกืข ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื˜ืขืงืข ืฆื• ื“ื™ ืงื•ื‘ืขืจ.

ื–ืืœ ืก ื–ื™ื™ืŸ ืžืขืจ ืกืคึผืขืฆื™ืคื™ืฉ. ืึทืžืึธืœ ืžื™ืจ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืจืขื“ืŸ ื•ื•ืขื’ืŸ ENV, ืจืขื›ืŸ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึธืจืŸ ื“ื™ ื•ื•ืึทืœื•ืขืก ืคื•ืŸ ืฆื•ื•ื™ื™ ืคึผืึทืจืึทืžืขื˜ืขืจืก: PARAM1 ะธ PARAM2. ืžื™ืจ ืœื™ื™ื’ืŸ ื–ื™ื™ืขืจ ืึทืจื‘ืขื˜ ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ื˜ื™ืคึผ - ืฉื˜ืจื™ืงืœ ืคึผืึทืจืึทืžืขื˜ืขืจ.

ืกืงืจืขืขื ืฉืึธื˜
ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ืžื™ืจ ื•ื•ืขืœืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื™ืึทืžืœ ืžื™ื˜ ืึท ืคึผืฉื•ื˜ ืจื™ื“ืขืจืขืงืฉืึทืŸ ืคืขืœืŸ ืฆื• ื˜ืขืงืข. ืขืก ืื™ื– ืื ื’ืขื ื•ืžืขืŸ, ืคื•ืŸ ืงื•ืจืก, ืึทื– ืื™ืจ ื”ืึธื‘ืŸ ืื™ืŸ ื“ื™ื™ืŸ ื“ืึธืงืขืจ ื˜ืขืงืข 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 ืึทืœืฃ ื•ื•ืึธืœืงืŸ-ืฉืึธืœ ืฉืฉ ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื• ืžืึธื“ืข ืื™ื– ื ื™ื˜ ื‘ื ื™ืžืฆื, ืึทื–ื•ื™ ืžื™ืจ ืฉื™ืงืŸ ืงืึทืžืึทื ื“ื– ืฆื• ื“ื™ ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ ื ื™ืฆืŸ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ -- ื‘ืึทืคึฟืขืœ.

ืžื™ืจ ืจื™ื™ืŸ ื“ื™ ื”ื™ื™ื ื˜ืขืงืข ืื™ืŸ ื“ื™ ื•ื•ืึธืœืงืŸ ืงืึทื ืกืึธื•ืœ ืคึฟื•ืŸ ื“ื™ ืึทืœื˜ ื“ืึธืงืขืจ ื˜ืขืงืข:

gcloud alpha cloud-shell ssh --command="rm -f 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"

ืžื™ืจ ื˜ืึธืŸ ื“ื™ ื–ืขืœื‘ืข ืžื™ื˜ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื˜ืขืงืข. ื‘ื™ื˜ืข ื˜ืึธืŸ ืึทื– ื“ื™ ืงืึทืžืึทื ื“ื– ืื•ื ื˜ืŸ ื ื•ืฆืŸ ืคื™ืงื˜ื™ืฉืึทืก ื ืขืžืขืŸ ืคื•ืŸ ื“ืขื ืงื ื•ื™ืœ ื•ื•ื• ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืงืขืจื– (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"

ืžื™ืจ ืœื•ื™ืคืŸ ื“ื™ ืึทืจื‘ืขื˜, ืขืคึฟืขื ืขืŸ ื“ื™ ืงืึทื ืกืึธื•ืœ ืจืขื–ื•ืœื˜ืึทื˜ ืื•ืŸ ื”ืึธืคึฟืŸ ืฆื• ื–ืขืŸ ื“ื™ ืžืฆืœื™ื— ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืคื•ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ.

ืกืงืจืขืขื ืฉืึธื˜
ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ืื•ืŸ ื“ืขืžืึธืœื˜ ื“ืขืจ ื’ืขืจืึธื˜ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ื“ื™ ืคืืจื–ืืžืœื˜ ืงืึทื ื˜ื™ื™ื ืขืจ

ืกืงืจืขืขื ืฉืึธื˜
ืžื™ืจ ืžืึทื›ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึทืจื‘ืขื˜ ืื™ืŸ GKE ืึธืŸ ืคึผืœื•ื’ื™ื ืก, SMS ืึธื“ืขืจ ืจืขื’ื™ืกื˜ืจืึทืฆื™ืข. ืœืึธืžื™ืจ ื ืขืžืขืŸ ืึท ืงื•ืง ืื•ื ื˜ืขืจ ื“ื–ืฉืขื ืงื™ื ืก ืจืขืงืœ

ืื™ืš ื“ื™ืœื™ื‘ืจืึทื˜ ืื™ื’ื ืึธืจื™ืจื˜ ื“ื™ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื™ื ื’ืจืขืกืก. ืคึฟืึทืจ ืื™ื™ืŸ ืคึผืฉื•ื˜ ืกื™ื‘ื”: ืึทืžืึธืœ ืื™ืจ ืฉื˜ืขืœืŸ ืขืก ืึทืจื•ื™ืฃ ื•ื•ืขืจืงืœืึธื•ื“ ืžื™ื˜ ืึท ื’ืขื’ืขื‘ืŸ ื ืึธืžืขืŸ, ืขืก ื•ื•ืขื˜ ื‘ืœื™ื™ึทื‘ืŸ ืึทืคึผืขืจื™ื™ืฉืึทื ืึทืœ, ืงื™ื™ืŸ ืขื ื™ืŸ ื•ื•ื™ ืคื™ืœืข ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ืžื™ื˜ ื“ืขื ื ืึธืžืขืŸ ืื™ืจ ื“ื•ืจื›ืคื™ืจืŸ. ื ื•, ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื“ืึธืก ืื™ื– ืึท ื‘ื™ืกืœ ื•ื•ื™ื™ึทื˜ืขืจ ืคื•ืŸ ื“ื™ ืคืึทืจื ืขื ืคื•ืŸ ื’ืขืฉื™ื›ื˜ืข.

ืึทื ืฉื˜ืึธื˜ ืงืึทื ืงืœื•ื–ืฉืึทื ื–

ืึทืœืข ื“ื™ ืื•ื™ื‘ืŸ ืกื˜ืขืคึผืก ืžื™ืกื˜ืึธืžืข ืงืขืŸ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขื˜ืืŸ, ืึธื‘ืขืจ ืคืฉื•ื˜ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืขื˜ืœืขื›ืข ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ Jenkins, ื–ื™ื™ืขืจ ืžื•ื•ื•ืœื™ืึธืŸ. ืึธื‘ืขืจ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ื‘ื” ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื•ื•ื™ ืคึผืœื•ื’ื™ื ืก. ื ื•, ื’ืขื ื•ื™, ืื™ืš ืจื•ืฃ ื–ื™ืš ืฆื• ื–ื™ื™ ื‘ืœื•ื™ื– ืคื•ืŸ ืคืึทืจืฆื•ื•ื™ื™ืคืœื•ื ื’.

ืื•ืŸ ืื™ืš ื ืึธืจ ื•ื•ื™ ืฆื• ืงืœื™ื™ึทื‘ืŸ ืึท ื ื™ื™ึทืข ื˜ืขืžืข ืคึฟืึทืจ ืžื™ืจ. ื“ืขืจ ื˜ืขืงืกื˜ ืื•ื™ื‘ืŸ ืื™ื– ืื•ื™ืš ืึท ื•ื•ืขื’ ืฆื• ื˜ื™ื™ืœืŸ ื“ื™ ืคื™ื™ื ื“ื™ื ื’ื– ื•ื•ืึธืก ืื™ืš ื’ืขืžืื›ื˜ ื‘ืฉืขืช ืกืึทืœื•ื•ื™ื ื’ ื“ื™ ืคึผืจืึธื‘ืœืขื ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘. ื™ื™ึทื ื˜ื™ื™ืœืŸ ืžื™ื˜ ื“ื™ ื•ื•ืืก, ื•ื•ื™ ืขืจ, ื–ืขื ืขืŸ ื’ืึธืจ ื ื™ืฉื˜ ืึท ืฉืจืขืงืœืขืš ื•ื•ืึธืœืฃ ืื™ืŸ ื“ืขื•ื•ืึธืคึผืก. ืื•ื™ื‘ ืžื™ื™ืŸ ืคื™ื™ื ื“ื™ื ื’ื– ื”ืขืœืคืŸ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ืขืžืขืฆืขืจ, ืื™ืš ื•ื•ืขืœ ื–ื™ื™ืŸ ืฆื•ืคืจื™ื“ืŸ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’