ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ื›ื™ื•ื, ืจื•ื‘ ืžื•ืฆืจื™ ื”ืชื•ื›ื ื” ืžืคื•ืชื—ื™ื ื‘ืฆื•ื•ืชื™ื. ื”ืชื ืื™ื ืœืคื™ืชื•ื— ืฆื•ื•ืช ืžื•ืฆืœื— ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžื™ื•ืฆื’ื™ื ื‘ืฆื•ืจื” ืฉืœ ื“ื™ืื’ืจืžื” ืคืฉื•ื˜ื”.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ืœืื—ืจ ืฉื›ืชื‘ืช ืืช ื”ืงื•ื“ ืฉืœืš, ืขืœื™ืš ืœื•ื•ื“ื ืฉื”ื•ื:

  1. ื–ื” ืขื•ื‘ื“.
  2. ื–ื” ืœื ืฉื•ื‘ืจ ืฉื•ื ื“ื‘ืจ, ื›ื•ืœืœ ื”ืงื•ื“ ืฉื›ืชื‘ื• ืขืžื™ืชื™ืš.

ืื ืฉื ื™ ื”ืชื ืื™ื ืžืชืงื™ื™ืžื™ื, ืื– ืืชื” ื‘ื“ืจืš ืœื”ืฆืœื—ื”. ื›ื“ื™ ืœื‘ื“ื•ืง ื‘ืงืœื•ืช ืืช ื”ืชื ืื™ื ื”ืœืœื• ื•ืœื ืœืกื˜ื•ืช ืžื”ื ืชื™ื‘ ื”ืจื•ื•ื—ื™, ื”ื’ืขื ื• ืœ-Continuous Integration.

CI ื”ื•ื ื–ืจื™ืžืช ืขื‘ื•ื“ื” ืฉื‘ื” ืืชื” ืžืฉืœื‘ ืืช ื”ืงื•ื“ ืฉืœืš ื‘ืงื•ื“ ื”ืžื•ืฆืจ ื”ื›ื•ืœืœ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื›ื›ืœ ื”ืืคืฉืจ. ื•ืืชื” ืœื ืจืง ืžืฉืชืœื‘, ืืœื ื’ื ื‘ื•ื“ืง ื›ืœ ื”ื–ืžืŸ ืฉื”ื›ืœ ืขื•ื‘ื“. ืžื›ื™ื•ื•ืŸ ืฉืืชื” ืฆืจื™ืš ืœื‘ื“ื•ืง ื”ืจื‘ื” ื•ืœืขืชื™ื ืงืจื•ื‘ื•ืช, ื›ื“ืื™ ืœื—ืฉื•ื‘ ืขืœ ืื•ื˜ื•ืžืฆื™ื”. ืืชื” ื™ื›ื•ืœ ืœื‘ื“ื•ืง ื”ื›ืœ ื‘ืื•ืคืŸ ื™ื“ื ื™, ืื‘ืœ ืืชื” ืœื ืฆืจื™ืš, ื•ื”ื ื” ื”ืกื™ื‘ื”.

  • ืื ืฉื™ื ื™ืงืจื™ื. ืฉืขืช ืขื‘ื•ื“ื” ืฉืœ ื›ืœ ืžืชื›ื ืช ื™ืงืจื” ื™ื•ืชืจ ืžืฉืขืช ืขื‘ื•ื“ื” ืฉืœ ื›ืœ ืฉืจืช.
  • ืื ืฉื™ื ืขื•ืฉื™ื ื˜ืขื•ื™ื•ืช. ืœื›ืŸ, ืขืœื•ืœื™ื ืœื”ื™ื•ื•ืฆืจ ืžืฆื‘ื™ื ืฉื‘ื”ื ื‘ื•ืฆืขื• ื‘ื“ื™ืงื•ืช ื‘ืกื ื™ืฃ ื”ืœื ื ื›ื•ืŸ ืื• ื”ื™ื“ื•ืจ ืฉื’ื•ื™ ืœื‘ื•ื“ืงื™ื.
  • ืื ืฉื™ื ืขืฆืœื ื™ื. ืžื“ื™ ืคืขื, ื›ืฉืื ื™ ืžืกื™ื™ื ืžืฉื™ืžื”, ืขื•ืœื” ื”ืžื—ืฉื‘ื”: โ€œืžื” ื™ืฉ ืœื‘ื“ื•ืง? ื›ืชื‘ืชื™ ืฉืชื™ ืฉื•ืจื•ืช - ื”ื›ืœ ืขื•ื‘ื“! ืื ื™ ื—ื•ืฉื‘ ืฉื’ื ืœื—ืœืงื›ื ื™ืฉ ืœืคืขืžื™ื ืžื—ืฉื‘ื•ืช ื›ืืœื”. ืื‘ืœ ืชืžื™ื“ ื›ื“ืื™ ืœื‘ื“ื•ืง.

ื›ื™ืฆื“ ื”ื•ื˜ืžืข ื•ืคื•ืชื— ืื™ื ื˜ื’ืจืฆื™ื” ืžืชืžืฉื›ืช ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœื ื™ื™ื“ ืฉืœ Avito, ื›ื™ืฆื“ ื”ื ืขื‘ืจื• ืž-0 ืœ-450 ื‘ื ื™ื™ื” ื‘ื™ื•ื, ื•ื›ื™ ืžื›ื•ื ื•ืช ืœื‘ื ื•ืช ืžืจื›ื™ื‘ื•ืช 200 ืฉืขื•ืช ื‘ื™ื•ื, ืื•ืžืจ ื ื™ืงื•ืœืื™ ื ืกื˜ืจื•ื‘ (ื ืกื˜ืจื•ื‘) ืžืฉืชืชืฃ ื‘ื›ืœ ื”ืฉื™ื ื•ื™ื™ื ื”ืื‘ื•ืœื•ืฆื™ื•ื ื™ื™ื ืฉืœ ืืคืœื™ืงืฆื™ื™ืช CI/CD Android.

ื”ืกื™ืคื•ืจ ืžื‘ื•ืกืก ืขืœ ื“ื•ื’ืžื” ืฉืœ ืคืงื•ื“ืช ืื ื“ืจื•ืื™ื“, ืื‘ืœ ืจื•ื‘ ื”ื’ื™ืฉื•ืช ื™ืฉื™ืžื•ืช ื’ื ื‘-iOS.


ืคืขื, ืื“ื ืื—ื“ ืขื‘ื“ ื‘ืฆื•ื•ืช Avito Android. ื‘ื”ื’ื“ืจื”, ื”ื•ื ืœื ื”ื™ื” ื–ืงื•ืง ืœืฉื•ื ื“ื‘ืจ ืžืฉื™ืœื•ื‘ ืžืชืžืฉืš: ืœื ื”ื™ื” ืขื ืžื™ ืœื”ืฉืชืœื‘.

ืื‘ืœ ื”ืืคืœื™ืงืฆื™ื” ื’ื“ืœื”, ืขื•ื“ ื•ืขื•ื“ ืžืฉื™ืžื•ืช ื—ื“ืฉื•ืช ื”ื•ืคื™ืขื•, ื•ื”ืฆื•ื•ืช ื’ื“ืœ ื‘ื”ืชืื. ื‘ืฉืœื‘ ืžืกื•ื™ื, ื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ืงื™ื ื‘ืื•ืคืŸ ืจืฉืžื™ ื™ื•ืชืจ ืชื”ืœื™ืš ืฉื™ืœื•ื‘ ืงื•ื“. ื”ื•ื—ืœื˜ ืœื”ืฉืชืžืฉ ื‘-Git flow.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ื”ืจืขื™ื•ืŸ ืฉืœ Git flow ื™ื“ื•ืข: ืœืคืจื•ื™ืงื˜ ื™ืฉ ืขื ืฃ ืคื™ืชื•ื— ืžืฉื•ืชืฃ ืื—ื“, ื•ืœื›ืœ ืคื™ืฆ'ืจ ื—ื“ืฉ ืžืคืชื—ื™ื ื—ื•ืชื›ื™ื ืขื ืฃ ื ืคืจื“, ืžืชื—ื™ื™ื‘ื™ื ืืœื™ื•, ื“ื•ื—ืคื™ื, ื•ื›ืฉื”ื ืจื•ืฆื™ื ืœืžื–ื’ ืืช ื”ืงื•ื“ ืฉืœื”ื ืœืชื•ืš ืกื ื™ืฃ ื”ืคื™ืชื•ื—, ืคื•ืชื—ื™ื ื‘ืงืฉื” ืœืžืฉื•ืš. ื›ื“ื™ ืœื—ืœื•ืง ื™ื“ืข ื•ืœื“ื•ืŸ ื‘ื’ื™ืฉื•ืช, ื”ืฆื’ื ื• ืกืงื™ืจืช ืงื•ื“, ื›ืœื•ืžืจ, ืขืžื™ืชื™ื ื—ื™ื™ื‘ื™ื ืœื‘ื“ื•ืง ื•ืœืืฉืจ ืืช ื”ืงื•ื“ ืฉืœ ื–ื”.

ื‘ื“ื™ืงื•ืช

ืœืจืื•ืช ืงื•ื“ ื‘ืขื™ื ื™ื™ื ื–ื” ืžื’ื ื™ื‘, ืื‘ืœ ืœื ืžืกืคื™ืง. ืœื›ืŸ, ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช ืžื•ืฆื’ื•ืช.

  • ืงื•ื“ื ื›ืœ, ืื ื—ื ื• ื‘ื•ื“ืงื™ื ื”ืจื›ื‘ืช ARK.
  • ื”ืจื‘ื” ื‘ื“ื™ืงื•ืช ื’'ื•ื ื™ื˜.
  • ืื ื• ืจื•ืื™ื ื›ื™ืกื•ื™ ืงื•ื“, ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืžืจื™ืฆื™ื ื‘ื“ื™ืงื•ืช.

ื›ื“ื™ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื”ื‘ื“ื™ืงื•ืช ื”ืœืœื•, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืชื”ืœื™ืš ื”ืคื™ืชื•ื— ื‘-Avito.

ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื™ื•ืฆื’ ื‘ืฆื•ืจื” ืกื›ืžื˜ื™ืช ื›ืš:

  • ืžืคืชื— ื›ื•ืชื‘ ืงื•ื“ ื‘ืžื—ืฉื‘ ื”ื ื™ื™ื“ ืฉืœื•. ืืชื” ื™ื›ื•ืœ ืœื”ืจื™ืฅ ื‘ื“ื™ืงื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ืžืžืฉ ื›ืืŸ - ืื• ืขื commit hook, ืื• ืคืฉื•ื˜ ืœื”ืจื™ืฅ ื‘ื“ื™ืงื•ืช ื‘ืจืงืข.
  • ืœืื—ืจ ืฉื”ืžืคืชื— ื“ื—ืฃ ืืช ื”ืงื•ื“, ื”ื•ื ืคื•ืชื— ื‘ืงืฉืช ืžืฉื™ื›ื”. ืขืœ ืžื ืช ืฉื”ืงื•ื“ ืฉืœื• ื™ื™ื›ืœืœ ื‘ืกื ื™ืฃ develop ื™ืฉ ืฆื•ืจืš ืœืขื‘ื•ืจ ืกืงื™ืจืช ืงื•ื“ ื•ืœืืกื•ืฃ ืืช ืžืกืคืจ ื”ืื™ืฉื•ืจื™ื ื”ื ื“ืจืฉ. ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ื‘ื“ื™ืงื•ืช ื•ื‘ื ื™ื™ื” ื›ืืŸ: ืขื“ ืฉื›ืœ ื”ื‘ื ื™ื™ื” ื™ืฆืœื™ื—ื•, ืœื ื ื™ืชืŸ ืœืžื–ื’ ืืช ื‘ืงืฉืช ื”ืžืฉื™ื›ื”.
  • ืœืื—ืจ ืžื™ื–ื•ื’ ื‘ืงืฉืช ื”-pull ื•ื”ืงื•ื“ ื›ืœื•ืœ ื‘-Develop, ืชื•ื›ืœื• ืœื‘ื—ื•ืจ ื–ืžืŸ ื ื•ื—: ืœืžืฉืœ ื‘ืœื™ืœื”, ื›ืฉื›ืœ ื”ืฉืจืชื™ื ืคื ื•ื™ื™ื, ื•ืœื”ืจื™ืฅ ื›ืžื” ืฆ'ืงื™ื ืฉืชืจืฆื•.

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

ืžืื•ื“ ืื”ื‘ื ื• ืœื”ืคืขื™ืœ ืฆ'ืงื™ื ื‘ืœื™ืœื”, ื›ื™ ื™ืฉ ื”ืจื‘ื” ื–ืžืŸ ื•ืฉืจืชื™ื, ืืชื” ื™ื›ื•ืœ ืœืฉื•ื˜ื˜. ืื‘ืœ, ืœืžืจื‘ื” ื”ืฆืขืจ, ื›ืืฉืจ ืงื•ื“ ื”ืคื™ืฆ'ืจ ื ื›ื ืก ืœืคื™ืชื•ื—, ืœืžืคืชื— ื™ืฉ ื”ืจื‘ื” ืคื—ื•ืช ืžื•ื˜ื™ื‘ืฆื™ื” ืœืชืงืŸ ืืช ื”ืฉื’ื™ืื•ืช ืฉ-CI ืžืฆื. ืžื“ื™ ืคืขื ืชืคืกืชื™ ืืช ืขืฆืžื™ ื—ื•ืฉื‘ ื›ืฉื”ืกืชื›ืœืชื™ ืขืœ ื›ืœ ื”ืฉื’ื™ืื•ืช ืฉื ืžืฆืื• ื‘ื“ื•ื— ื”ื‘ื•ืงืจ ืฉืื ื™ ืืชืงืŸ ืื•ืชืŸ ืžืชื™ืฉื”ื• ืื—ืจ ื›ืš, ื›ื™ ืขื›ืฉื™ื• ื™ืฉ ืžืฉื™ืžื” ื—ื“ืฉื” ื•ืžื’ื ื™ื‘ื” ื‘ื’'ื™ืจื” ืฉืื ื™ ืจืง ืจื•ืฆื” ืœื”ืชื—ื™ืœ ืœืขืฉื•ืช.

ืื ืฆ'ืงื™ื ื—ื•ืกืžื™ื ื‘ืงืฉืช ืžืฉื™ื›ื”, ืื– ื™ืฉ ืžืกืคื™ืง ืžื•ื˜ื™ื‘ืฆื™ื”, ื›ื™ ืขื“ ืฉื”-builds ื™ื”ืคื›ื• ืœื™ืจื•ืงื™ื, ื”ืงื•ื“ ืœื ื™ื›ื ืก ืœ-pitch, ืžื” ืฉืื•ืžืจ ืฉื”ืžืฉื™ืžื” ืœื ืชื•ืฉืœื.

ื›ืชื•ืฆืื” ืžื›ืš, ื‘ื—ืจื ื• ื‘ืืกื˜ืจื˜ื’ื™ื” ื”ื‘ืื”: ืื ื• ืžืคืขื™ืœื™ื ืืช ืžืจื‘ ื”ืฆ'ืงื™ื ื”ืืคืฉืจื™ ื‘ืœื™ืœื”, ื•ืžืฉื™ืงื™ื ืืช ื”ืงืจื™ื˜ื™ื™ื ืฉื‘ื”ื ื•ื‘ืขื™ืงืจ ืืช ื”ืžื”ื™ืจื™ื ื‘ื™ื•ืชืจ ื‘ื‘ืงืฉืช ืžืฉื™ื›ื”. ืื‘ืœ ืื ื—ื ื• ืœื ืขื•ืฆืจื™ื ืฉื - ื‘ืžืงื‘ื™ืœ, ืื ื—ื ื• ืžื™ื™ืขืœื™ื ืืช ืžื”ื™ืจื•ืช ื”ื‘ื“ื™ืงื•ืช ื›ื“ื™ ืœื”ืขื‘ื™ืจ ืื•ืชืŸ ืžืžืฆื‘ ืœื™ืœื” ืœืžืฉื™ื›ืช ื‘ื“ื™ืงื•ืช ื‘ืงืฉื•ืช.

ื‘ืื•ืชื• ื–ืžืŸ, ื›ืœ ื”ื‘ื ื™ื™ื” ืฉืœื ื• ื”ื•ืฉืœืžื• ื“ื™ ืžื”ืจ, ืื– ืคืฉื•ื˜ ื›ืœืœื ื• ืืช ื”-ARK build, ื‘ื“ื™ืงื•ืช Junit ื•ื—ื™ืฉื•ื‘ื™ ื›ื™ืกื•ื™ ืงื•ื“ ื›ื—ื•ืกื ืœื‘ืงืฉืช ื”ืžืฉื™ื›ื”. ื”ื“ืœืงื ื• ืืช ื–ื”, ื—ืฉื‘ื ื• ืขืœ ื–ื” ื•ื–ื ื—ื ื• ืืช ื›ื™ืกื•ื™ ื”ืงื•ื“ ื›ื™ ื—ืฉื‘ื ื• ืฉืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืืช ื–ื”.

ืœืงื— ืœื ื• ื™ื•ืžื™ื™ื ืœื”ื’ื“ื™ืจ ืœื—ืœื•ื˜ื™ืŸ ืืช ื”-CI ื”ื‘ืกื™ืกื™ (ืœื”ืœืŸ ื”ืขืจื›ืช ื”ื–ืžืŸ ื”ื™ื ืžืฉื•ืขืจืช, ื ื“ืจืฉืช ืœืงื ื” ืžื™ื“ื”).

ืœืื—ืจ ืžื›ืŸ ื”ืชื—ืœื ื• ืœื—ืฉื•ื‘ ื™ื•ืชืจ - ื”ืื ืื ื—ื ื• ื‘ื›ืœืœ ื‘ื•ื“ืงื™ื ื ื›ื•ืŸ? ื”ืื ืื ื• ืžืจื™ืฆื™ื ื‘ืงืฉื•ืช ืžืฉื™ื›ื” ื‘ืฆื•ืจื” ื ื›ื•ื ื”?

ื”ืชื—ืœื ื• ืืช ื”ื‘ื ื™ื™ื” ื‘-commit ื”ืื—ืจื•ืŸ ืฉืœ ื”ืกื ื™ืฃ ืฉืžืžื ื• ื ืคืชื—ื” ื‘ืงืฉืช ื”ืžืฉื™ื›ื”. ืื‘ืœ ื‘ื“ื™ืงื•ืช ืฉืœ commit ื–ื” ื™ื›ื•ืœื•ืช ืจืง ืœื”ืจืื•ืช ืฉื”ืงื•ื“ ืฉื”ืžืคืชื— ื›ืชื‘ ืขื•ื‘ื“. ืื‘ืœ ื”ื ืœื ืžื•ื›ื™ื—ื™ื ืฉื”ื•ื ืœื ืฉื‘ืจ ื›ืœื•ื. ืœืžืขืฉื”, ืืชื” ืฆืจื™ืš ืœื‘ื“ื•ืง ืืช ืžืฆื‘ ืกื ื™ืฃ ื”ืคื™ืชื•ื— ืœืื—ืจ ืžื™ื–ื•ื’ ืชื›ื•ื ื” ืœืชื•ื›ื•.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ืœืฉื ื›ืš, ื›ืชื‘ื ื• ืชืกืจื™ื˜ bash ืคืฉื•ื˜ premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

ื›ืืŸ ื›ืœ ื”ืฉื™ื ื•ื™ื™ื ื”ืื—ืจื•ื ื™ื ืž-Develop ืคืฉื•ื˜ ื ืฉืœืคื™ื ืœืžืขืœื” ื•ืžืชืžื–ื’ื™ื ืœืกื ื™ืฃ ื”ื ื•ื›ื—ื™. ื”ื•ืกืคื ื• ืืช ื”ืกืงืจื™ืคื˜ premerge.sh ื›ืฉืœื‘ ืจืืฉื•ืŸ ื‘ื›ืœ ื”-builds ื•ื”ืชื—ืœื ื• ืœื‘ื“ื•ืง ื‘ื“ื™ื•ืง ืžื” ืื ื—ื ื• ืจื•ืฆื™ื, ื›ืœื•ืžืจ ืฉื™ืœื•ื‘.

ืœืงื— ืฉืœื•ืฉื” ื™ืžื™ื ืœืืชืจ ืืช ื”ื‘ืขื™ื”, ืœืžืฆื•ื ืคืชืจื•ืŸ ื•ืœื›ืชื•ื‘ ืืช ื”ืชืกืจื™ื˜ ื”ื–ื”.

ื”ืืคืœื™ืงืฆื™ื” ื”ืชืคืชื—ื”, ืขื•ื“ ื•ืขื•ื“ ืžืฉื™ืžื•ืช ื”ื•ืคื™ืขื•, ื”ืฆื•ื•ืช ื’ื“ืœ, ื•-premerge.sh ืœืคืขืžื™ื ื”ืชื—ื™ืœ ืœืื›ื–ื‘ ืื•ืชื ื•. ื‘-Develop ื”ื™ื• ืฉื™ื ื•ื™ื™ื ืกื•ืชืจื™ื ืฉืฉื‘ืจื• ืืช ื”ืžื‘ื ื”.

ื“ื•ื’ืžื” ืœืื™ืš ื–ื” ืงื•ืจื”:

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ืฉื ื™ ืžืคืชื—ื™ื ื‘ื• ื–ืžื ื™ืช ืžืชื—ื™ืœื™ื ืœืขื‘ื•ื“ ืขืœ ืชื›ื•ื ื•ืช A ื•-B. ืžืคืชื— ืคื™ืฆ'ืจ A ืžื’ืœื” ืคื™ืฆ'ืจ ืœื ื‘ืฉื™ืžื•ืฉ ื‘ืคืจื•ื™ืงื˜ answer() ื•ื›ืžื• ื™ืœื“ ื˜ื•ื‘, ืžืกื™ืจ ืื•ืชื•. ื‘ืžืงื‘ื™ืœ, ืžืคืชื— ืคื™ืฆ'ืจ ื‘' ืžื•ืกื™ืฃ ืงืจื™ืื” ื—ื“ืฉื” ืœืคื•ื ืงืฆื™ื” ื”ื–ื• ื‘ืกื ื™ืฃ ืฉืœื•.

ืžืคืชื—ื™ื ืžืกื™ื™ืžื™ื ืืช ืขื‘ื•ื“ืชื ื•ืคื•ืชื—ื™ื ื‘ืงืฉืช ืžืฉื™ื›ื” ื‘ื•-ื–ืžื ื™ืช. ื”-builds ืžื•ืฉืงื™ื, premerge.sh ื‘ื•ื“ืง ืืช ืฉืชื™ ื‘ืงืฉื•ืช ื”ืžืฉื™ื›ื” ืœื’ื‘ื™ ืžืฆื‘ ื”ืคื™ืชื•ื— ื”ืื—ืจื•ืŸ - ื›ืœ ื”ืฆ'ืงื™ื ื™ืจื•ืงื™ื. ืœืื—ืจ ืžื›ืŸ, ื‘ืงืฉืช ื”ืžืฉื™ื›ื” ืฉืœ ืชื›ื•ื ื” A ืžืชืžื–ื’ืช, ื‘ืงืฉืช ื”ืžืฉื™ื›ื” ืฉืœ ืชื›ื•ื ื” B ืžืชืžื–ื’ืช... ื‘ื•ื! ืคืชื— ื”ืคืกืงื•ืช ืžื›ื™ื•ื•ืŸ ืฉืงื•ื“ ื”ืคื™ืชื•ื— ืžื›ื™ืœ ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื” ืœื ืงื™ื™ืžืช.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ื›ืฉื–ื” ืœื ื”ื•ืœืš ืœื”ืชืคืชื—, ื–ื” ื›ืŸ ืืกื•ืŸ ืžืงื•ืžื™. ื›ืœ ื”ืฆื•ื•ืช ืœื ื™ื›ื•ืœ ืœืืกื•ืฃ ืฉื•ื ื“ื‘ืจ ื•ืœื”ื’ื™ืฉ ืื•ืชื• ืœื‘ื“ื™ืงื”.

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

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ืžื›ื™ื•ื•ืŸ ืฉื–ื” ืœื ื”ืชืื™ื ืœื ื•, ื”ืชื—ืœื ื• ืœื‘ื—ื•ืŸ ืืคืฉืจื•ื™ื•ืช ื›ื™ืฆื“ ืœืžื ื•ืข ื–ืืช.

ืื™ืš ืœื ืœืฉื‘ื•ืจ ืœื”ืชืคืชื—

ื”ืืคืฉืจื•ืช ื”ืจืืฉื•ื ื”: ื‘ื ื” ืžื—ื“ืฉ ืืช ื›ืœ ื‘ืงืฉื•ืช ื”ืžืฉื™ื›ื” ื‘ืขืช ืขื“ื›ื•ืŸ ืคื™ืชื•ื—. ืื, ื‘ื“ื•ื’ืžื” ืฉืœื ื•, ื‘ืงืฉืช ื”ืžืฉื™ื›ื” ืขื ืชื›ื•ื ื” A ื”ื™ื ื”ืจืืฉื•ื ื” ืœื”ื™ื›ืœืœ ื‘ืคื™ืชื•ื—, ื‘ืงืฉืช ื”ืžืฉื™ื›ื” ืฉืœ ืชื›ื•ื ื” B ืชื™ื‘ื ื” ืžื—ื“ืฉ, ื•ื‘ื”ืชืื ืœื›ืš, ื”ื‘ื“ื™ืงื•ืช ื™ื™ื›ืฉืœื• ืขืงื‘ ืฉื’ื™ืืช ืงื•ืžืคื™ืœืฆื™ื”.

ื›ื“ื™ ืœื”ื‘ื™ืŸ ื›ืžื” ื–ืžืŸ ื–ื” ื™ื™ืงื—, ืฉืงื•ืœ ื“ื•ื’ืžื” ืขื ืฉื ื™ ื™ื—ืกื™ ืฆื™ื‘ื•ืจ. ืื ื—ื ื• ืคื•ืชื—ื™ื ืฉื ื™ ื™ื—"ืฆ: ืฉื ื™ ื‘ื•ื ื™ื, ืฉื ื™ ื”ืจืฆืื•ืช ืฉืœ ืฆ'ืงื™ื. ืœืื—ืจ ืžื™ื–ื•ื’ ื”-PR ื”ืจืืฉื•ืŸ ืœืชื•ืš ืคื™ืชื•ื—, ื”ืฉื ื™ ืฆืจื™ืš ืœื”ื™ื‘ื ื•ืช ืžื—ื“ืฉ. ื‘ืกืš ื”ื›ืœ, ืฉื ื™ ื™ื—ืกื™ ืฆื™ื‘ื•ืจ ื“ื•ืจืฉื™ื ืฉืœื•ืฉ ืจื™ืฆื•ืช ืฉืœ ื‘ื“ื™ืงื•ืช: 2 + 1 = 3.

ื‘ืขืงืจื•ืŸ ื–ื” ื‘ืกื“ืจ. ืื‘ืœ ื”ืกืชื›ืœื ื• ืขืœ ื”ืกื˜ื˜ื™ืกื˜ื™ืงื”, ื•ื”ืžืฆื‘ ื”ืื•ืคื™ื™ื ื™ ื‘ืฆื•ื•ืช ืฉืœื ื• ื”ื™ื” 10 ื™ื—ืกื™ ืฆื™ื‘ื•ืจ ืคืชื•ื—ื™ื, ื•ืื– ืžืกืคืจ ื”ืฆ'ืงื™ื ื”ื•ื ืกื›ื•ื ื”ื”ืชืงื“ืžื•ืช: 10 + 9 +... + 1 = 55. ื›ืœื•ืžืจ, ืœืงื‘ืœ 10 ืื ืฉื™ ื™ื—ืกื™ ืฆื™ื‘ื•ืจ, ืืชื” ืฆืจื™ืš ืœื‘ื ื•ืช ืžื—ื“ืฉ 55 ืคืขืžื™ื. ื•ื–ื” ื‘ืžืฆื‘ ืื™ื“ื™ืืœื™, ื›ืฉื›ืœ ื”ืฆ'ืงื™ื ืขื•ื‘ืจื™ื ื‘ืคืขื ื”ืจืืฉื•ื ื”, ื›ืฉืืฃ ืื—ื“ ืœื ืคื•ืชื— ื‘ืงืฉืช ืžืฉื™ื›ื” ื ื•ืกืคืช ื‘ื–ืžืŸ ืฉืชืจื™ืกืจ ืืœื• ืžืขื•ื‘ื“ื™ื.

ื“ืžื™ื™ื ื• ืืช ืขืฆืžื›ื ื›ืžืคืชื—ื™ื ืฉืฆืจื™ืš ืœื”ื™ื•ืช ื”ืจืืฉื•ื ื™ื ืœืœื—ื•ืฅ ืขืœ ื›ืคืชื•ืจ ื”"ืžื™ื–ื•ื’", ื›ื™ ืื ืฉื›ืŸ ืขื•ืฉื” ื–ืืช, ืื– ืชืฆื˜ืจื›ื• ืœื—ื›ื•ืช ืขื“ ืฉื›ืœ ื”ื‘ื ื™ื™ื” ื™ืขื‘ืจื• ืฉื•ื‘... ืœื, ื–ื” ืœื ื™ืขื‘ื•ื“ , ื–ื” ื™ืื˜ ื‘ืจืฆื™ื ื•ืช ืืช ื”ื”ืชืคืชื—ื•ืช.

ื“ืจืš ืฉื ื™ื™ื” ืืคืฉืจื™ืช: ืœืืกื•ืฃ ื‘ืงืฉื•ืช ืžืฉื™ื›ื” ืœืื—ืจ ืกืงื™ืจืช ืงื•ื“. ื›ืœื•ืžืจ, ืคื•ืชื—ื™ื ื‘ืงืฉืช ืžืฉื™ื›ื”, ืื•ืกืคื™ื ืืช ืžืกืคืจ ื”ืื™ืฉื•ืจื™ื ื”ื ื“ืจืฉ ืžืขืžื™ืชื™ื, ืžืชืงื ื™ื ืืช ื”ื“ืจื•ืฉ ื•ืื– ืžืฉื™ืงื™ื ืืช ื”-builds. ืื ื”ื ืžืฆืœื™ื—ื™ื, ื‘ืงืฉืช ื”ืžืฉื™ื›ื” ืžืชืžื–ื’ืช ืœ-Develop. ื‘ืžืงืจื” ื–ื”, ืื™ืŸ ื”ืคืขืœื” ืžื—ื“ืฉ ื ื•ืกืคืช, ืืš ื”ืžืฉื•ื‘ ื”ื•ืื˜ ืžืื•ื“. ื›ืžืคืชื—, ื›ืฉืื ื™ ืคื•ืชื— ื‘ืงืฉืช ืžืฉื™ื›ื”, ืื ื™ ืžื™ื“ ืจื•ืฆื” ืœืจืื•ืช ืื ื–ื” ื™ืขื‘ื•ื“. ืœื“ื•ื’ืžื”, ืื ืžื‘ื—ืŸ ื ื›ืฉืœ, ืขืœื™ืš ืœืชืงืŸ ืื•ืชื• ื‘ืžื”ื™ืจื•ืช. ื‘ืžืงืจื” ืฉืœ ื‘ื ื™ื™ื” ืžื•ืฉื”ื™ืช, ื”ืคื™ื“ื‘ืง ืžืื˜, ื•ืœื›ืŸ ื”ืคื™ืชื•ื— ื›ื•ืœื•. ื’ื ื–ื” ืœื ื”ืชืื™ื ืœื ื•.

ื›ืชื•ืฆืื” ืžื›ืš, ื ื•ืชืจื” ืจืง ื”ืืคืฉืจื•ืช ื”ืฉืœื™ืฉื™ืช - ืื•ืคื ื™ื™ื. ื›ืœ ื”ืงื•ื“ ืฉืœื ื•, ื›ืœ ื”ืžืงื•ืจื•ืช ืฉืœื ื• ืžืื•ื—ืกื ื™ื ื‘ืžืื’ืจ ื‘ืฉืจืช Bitbucket. ื‘ื”ืชืื ืœื›ืš, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœืคืชื— ืชื•ืกืฃ ืขื‘ื•ืจ Bitbucket.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ืชื•ืกืฃ ื–ื” ืขื•ืงืฃ ืืช ืžื ื’ื ื•ืŸ ื”ืžื™ื–ื•ื’ ืฉืœ ื‘ืงืฉืช ื”ืžืฉื™ื›ื”. ื”ื”ืชื—ืœื” ื”ื™ื ืกื˜ื ื“ืจื˜ื™ืช: ื”-PR ื ืคืชื—, ื›ืœ ื”ืžื›ืœื•ืœื™ื ืžื•ืฉืงื™ื, ืกืงื™ืจืช ื”ืงื•ื“ ื”ื•ืฉืœืžื”. ืื‘ืœ ืœืื—ืจ ืกื™ื•ื ืกืงื™ืจืช ื”ืงื•ื“ ื•ื”ืžืคืชื— ืžื—ืœื™ื˜ ืœืœื—ื•ืฅ ืขืœ "ืžื™ื–ื•ื’", ื”ืชื•ืกืฃ ื‘ื•ื“ืง ืžื•ืœ ืื™ื–ื” ืžืฆื‘ ืคื™ืชื•ื— ื‘ื•ืฆืขื• ื”ื‘ื“ื™ืงื•ืช. ืื develop ืขื•ื“ื›ืŸ ืœืื—ืจ ื”-builds, ื”ืชื•ืกืฃ ืœื ื™ืืคืฉืจ ืœืžื–ื’ ื‘ืงืฉืช ืžืฉื™ื›ื” ื›ื–ื• ืœืชื•ืš ื”ืกื ื™ืฃ ื”ืจืืฉื™. ื–ื” ืคืฉื•ื˜ ื™ืชื—ื™ืœ ืžื—ื“ืฉ ืืช ื”ื‘ื ื™ื™ื” ืฉืœ ืคื™ืชื•ื— ื—ื“ืฉ ื™ื—ืกื™ืช.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

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

ืœืคื ื™ ื”ื˜ืžืขืช ื”ืชื•ืกืฃ ื”ื–ื”, ื”ื’ืขื ื• ืœืžืžื•ืฆืข ืฉืœ 2,7 ืจื™ืฆื•ืช ื‘ื™ืงื•ืจืช ืœื›ืœ ื‘ืงืฉืช ืžืฉื™ื›ื”. ืขื ื”ืชื•ืกืฃ ื”ื™ื• 3,6 ื”ืฉืงื•ืช. ื–ื” ื”ืชืื™ื ืœื ื•.

ืจืื•ื™ ืœืฆื™ื™ืŸ ืฉืœืชื•ืกืฃ ื–ื” ื™ืฉ ื—ืกืจื•ืŸ: ื”ื•ื ืžืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”-build ืจืง ืคืขื ืื—ืช. ื›ืœื•ืžืจ, ืขื“ื™ื™ืŸ ื™ืฉ ื—ืœื•ืŸ ืงื˜ืŸ ืฉื“ืจื›ื• ื™ื›ื•ืœื™ื ืœื”ืชืคืชื— ืฉื™ื ื•ื™ื™ื ืกื•ืชืจื™ื. ืื‘ืœ ื”ืกื‘ื™ืจื•ืช ืœื›ืš ื ืžื•ื›ื”, ื•ืขืฉื™ื ื• ืืช ื”ื”ื—ืœืคื” ื”ื–ื• ื‘ื™ืŸ ืžืกืคืจ ื”ื”ืชื—ืœื•ืช ืœื‘ื™ืŸ ื”ืกื‘ื™ืจื•ืช ืœื›ื™ืฉืœื•ืŸ. ื‘ืฉื ืชื™ื™ื ื–ื” ื™ืจื” ืจืง ืคืขื ืื—ืช, ืื– ื–ื” ื›ื ืจืื” ืœื ื”ื™ื” ืœืฉื•ื•ื.

ืœืงื— ืœื ื• ืฉื‘ื•ืขื™ื™ื ืœื›ืชื•ื‘ ืืช ื”ื’ืจืกื” ื”ืจืืฉื•ื ื” ืฉืœ ื”ืชื•ืกืฃ Bitbucket.

ืฆ'ืงื™ื ื—ื“ืฉื™ื

ื‘ื™ื ืชื™ื™ื, ื”ืฆื•ื•ืช ืฉืœื ื• ื”ืžืฉื™ืš ืœื’ื“ื•ืœ. ืฉื™ืงื™ื ื—ื“ืฉื™ื ื ื•ืกืคื•.

ื—ืฉื‘ื ื•: ืœืžื” ืœืขืฉื•ืช ื˜ืขื•ื™ื•ืช ืื ืืคืฉืจ ืœืžื ื•ืข ืื•ืชืŸ? ื•ื‘ื’ืœืœ ื–ื” ื”ื ื™ื™ืฉืžื• ื ื™ืชื•ื— ืงื•ื“ ืกื˜ื˜ื™. ื”ืชื—ืœื ื• ืขื ืžื•ืš, ื”ื›ืœื•ืœ ื‘-SDK ืฉืœ ืื ื“ืจื•ืื™ื“. ืื‘ืœ ื‘ืื•ืชื” ืชืงื•ืคื” ื”ื•ื ื‘ื›ืœืœ ืœื ื™ื“ืข ืœืขื‘ื•ื“ ืขื ืงื•ื“ ืงื•ื˜ืœื™ืŸ, ื•ื›ื‘ืจ ื”ื™ื• ืœื ื• 75% ืžื”ืืคืœื™ืงืฆื™ื” ื›ืชื•ื‘ื” ื‘ืงื•ื˜ืœื™ืŸ. ืœื›ืŸ, ื ื•ืกืคื• ืžื•ื‘ื ื™ื ืœืžื•ืš ืื ื“ืจื•ืื™ื“ ืกื˜ื•ื“ื™ื• ื‘ื•ื“ืง.

ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœืขืฉื•ืช ื”ืจื‘ื” ืกื˜ื™ื™ื”: ืœืงื—ืช ืืช Android Studio, ืœืืจื•ื– ืื•ืชื• ื‘-Docker ื•ืœื”ืคืขื™ืœ ืื•ืชื• ืขืœ CI ืขื ืฆื’ ื•ื™ืจื˜ื•ืืœื™, ื›ืš ืฉื”ื•ื ื™ื—ืฉื•ื‘ ืฉื”ื•ื ืคื•ืขืœ ืขืœ ืžื—ืฉื‘ ื ื™ื™ื“ ืืžื™ืชื™. ืื‘ืœ ื–ื” ืขื‘ื“.

ื’ื ื‘ืชืงื•ืคื” ื”ื–ื• ื”ืชื—ืœื ื• ืœื›ืชื•ื‘ ื”ืจื‘ื” ื‘ื“ื™ืงื•ืช ืžื›ืฉื•ืจ ื•ื™ื•ืฉื ื‘ื“ื™ืงืช ืฆื™ืœื•ื ืžืกืš. ื–ื” ื›ืืฉืจ ื ื•ืฆืจ ืฆื™ืœื•ื ืžืกืš ื”ืชื™ื™ื—ืกื•ืช ืœืชืฆื•ื’ื” ืงื˜ื ื” ื ืคืจื“ืช, ื•ื”ื‘ื“ื™ืงื” ืžื•ืจื›ื‘ืช ืžืฆื™ืœื•ื ืžืกืš ืžื”ืชืฆื•ื’ื” ื•ื”ืฉื•ื•ืื” ื‘ื™ื ื• ืœื‘ื™ืŸ ื”ืกื˜ื ื“ืจื˜ื™ ื™ืฉื™ืจื•ืช ืคื™ืงืกืœ ืื—ืจ ืคื™ืงืกืœ. ืื ื™ืฉ ืื™ ื”ืชืืžื”, ื–ื” ืื•ืžืจ ืฉื”ืคืจื™ืกื” ื”ืฉืชื‘ืฉื” ืื™ืคืฉื”ื• ืื• ืฉืžืฉื”ื• ืœื ื‘ืกื“ืจ ื‘ืกื’ื ื•ื ื•ืช.

ืื‘ืœ ื‘ื“ื™ืงื•ืช ืžื›ืฉื•ืจ ื•ื‘ื“ื™ืงื•ืช ืฆื™ืœื•ื ืžืกืš ืฆืจื™ื›ื•ืช ืœื”ืชื‘ืฆืข ื‘ืžื›ืฉื™ืจื™ื: ื‘ืืžื•ืœื˜ื•ืจื™ื ืื• ื‘ืžื›ืฉื™ืจื™ื ืืžื™ืชื™ื™ื. ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉื™ืฉ ื”ืจื‘ื” ื‘ื“ื™ืงื•ืช ื•ื”ื ืžื•ืคืขืœื™ื ื‘ืชื“ื™ืจื•ืช ื’ื‘ื•ื”ื”, ื™ืฉ ืฆื•ืจืš ื‘ื—ื•ื•ื” ืฉืœืžื”. ื”ืงืžืช ื—ื•ื•ื” ืžืฉืœืš ื”ื™ื ืขืชื™ืจืช ืขื‘ื•ื“ื”, ืื– ืžืฆืื ื• ืืคืฉืจื•ืช ืžื•ื›ื ื” - Firebase Test Lab.

Firebase Test Lab

ื–ื” ื ื‘ื—ืจ ื‘ื’ืœืœ ืฉ-Firebase ื”ื•ื ืžื•ืฆืจ ืฉืœ ื’ื•ื’ืœ, ื›ืœื•ืžืจ ื”ื•ื ืฆืจื™ืš ืœื”ื™ื•ืช ืืžื™ืŸ ื•ืœื ืกื‘ื™ืจ ืฉื”ื•ื ื™ืžื•ืช ืื™ ืคืขื. ื”ืžื—ื™ืจื™ื ืกื‘ื™ืจื™ื: 5$ ืœืฉืขืช ื”ืคืขืœื” ืฉืœ ืžื›ืฉื™ืจ ืืžื™ืชื™, 1$ ืœืฉืขืช ื”ืคืขืœื” ืฉืœ ืืžื•ืœื˜ื•ืจ.

ืœืงื— ื›ืฉืœื•ืฉื” ืฉื‘ื•ืขื•ืช ืœื™ื™ืฉื ืืช Firebase Test Lab ื‘-CI ืฉืœื ื•.

ืื‘ืœ ื”ืฆื•ื•ืช ื”ืžืฉื™ืš ืœื’ื“ื•ืœ, ื•-Firebase, ืœืžืจื‘ื” ื”ืฆืขืจ, ื”ืชื—ื™ืœื” ืœืื›ื–ื‘ ืื•ืชื ื•. ื‘ืื•ืชื• ื–ืžืŸ, ืœื ื”ื™ื” ืœื• ืฉื•ื SLA. ืœืคืขืžื™ื Firebase ื’ืจืžื” ืœื ื• ืœื”ืžืชื™ืŸ ืขื“ ืฉืžืกืคืจ ื”ืžื›ืฉื™ืจื™ื ื”ื“ืจื•ืฉ ื™ื”ื™ื” ืคื ื•ื™ ืœื‘ื“ื™ืงื•ืช, ื•ืœื ื”ืชื—ื™ืœื” ืœื‘ืฆืข ืื•ืชืŸ ืžื™ื“, ื›ืคื™ ืฉืจืฆื™ื ื•. ื”ื”ืžืชื ื” ื‘ืชื•ืจ ืœืงื—ื” ืขื“ ื—ืฆื™ ืฉืขื”, ืฉื–ื” ื”ืจื‘ื” ืžืื•ื“ ื–ืžืŸ. ื‘ื“ื™ืงื•ืช ืžื›ืฉื•ืจ ื ืขืจื›ื• ื‘ื›ืœ ื™ื—ืกื™ ืฆื™ื‘ื•ืจ, ื”ืขื™ื›ื•ื‘ื™ื ื‘ืืžืช ื”ืื˜ื• ืืช ื”ืคื™ืชื•ื—, ื•ืื– ื”ื’ื™ืข ื”ื—ืฉื‘ื•ืŸ ื”ื—ื•ื“ืฉื™ ืขื ืกื›ื•ื ืขื’ื•ืœ. ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ื•ื—ืœื˜ ืœื ื˜ื•ืฉ ืืช Firebase ื•ืœืขื‘ื•ื“ ื‘ืชื•ืš ื”ื‘ื™ืช, ืžื›ื™ื•ื•ืŸ ืฉื”ืฆื•ื•ืช ื’ื“ืœ ืžืกืคื™ืง.

Docker + Python + bash

ืœืงื—ื ื• ืืช Docker, ื“ื—ืคื ื• ืœืชื•ื›ื• ืืžื•ืœื˜ื•ืจื™ื, ื›ืชื‘ื ื• ืชื•ื›ื ื” ืคืฉื•ื˜ื” ื‘-Python, ืฉื‘ืจื’ืข ื”ื ื›ื•ืŸ ืžืคืขื™ืœื” ืืช ื”ืžืกืคืจ ื”ื ื“ืจืฉ ืฉืœ ืืžื•ืœื˜ื•ืจื™ื ื‘ื’ืจืกื” ื”ื ื›ื•ื ื” ื•ืžืคืกื™ืงื” ืื•ืชื ื‘ืขืช ื”ืฆื•ืจืš. ื•ื›ืžื•ื‘ืŸ, ื›ืžื” ืชืกืจื™ื˜ื™ื ื‘ืฉืฉ - ืื™ืคื” ื”ื™ื™ื ื• ื‘ืœืขื“ื™ื”ื?

ืœืงื— ื—ืžื™ืฉื” ืฉื‘ื•ืขื•ืช ืœื™ืฆื•ืจ ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื” ืžืฉืœื ื•.

ื›ืชื•ืฆืื” ืžื›ืš, ืขื‘ื•ืจ ื›ืœ ื‘ืงืฉืช ืžืฉื™ื›ื” ื”ื™ื™ืชื” ืจืฉื™ืžื” ื ืจื—ื‘ืช ืฉืœ ื‘ื“ื™ืงื•ืช ื—ืกื™ืžืช ืžื™ื–ื•ื’:

  • ื”ืจื›ื‘ืช ARK;
  • ื‘ื“ื™ืงื•ืช ื’'ื•ื ื™ื˜;
  • ืžื•ึนืš;
  • ื‘ื“ื™ืงื•ืช ืื ื“ืจื•ืื™ื“ ืกื˜ื•ื“ื™ื•;
  • ืžื‘ื—ื ื™ ืžื›ืฉื•ืจ;
  • ื‘ื“ื™ืงื•ืช ืฆื™ืœื•ื ืžืกืš.

ื–ื” ืžื ืข ืชืงืœื•ืช ืืคืฉืจื™ื•ืช ืจื‘ื•ืช. ื˜ื›ื ื™ืช ื”ื›ืœ ืขื‘ื“, ืื‘ืœ ื”ืžืคืชื—ื™ื ื”ืชืœื•ื ื ื• ืฉื”ื”ืžืชื ื” ืœืชื•ืฆืื•ืช ืืจื•ื›ื” ืžื“ื™.

ื›ืžื” ื–ืžืŸ ื–ื” ืืจื•ืš ืžื“ื™? ื”ืขืœื™ื ื• ื ืชื•ื ื™ื ืž-Bitbucket ื•-TeamCity ืœืžืขืจื›ืช ื”ื ื™ืชื•ื— ื•ื”ื‘ื ื• ืืช ื–ื” ื–ืžืŸ ื”ืžืชื ื” ืžืžื•ืฆืข 45 ื“ืงื•ืช. ื›ืœื•ืžืจ, ืžืคืชื—, ื›ืืฉืจ ืคื•ืชื— ื‘ืงืฉืช ืžืฉื™ื›ื”, ืžืžืชื™ืŸ ื‘ืžืžื•ืฆืข 45 ื“ืงื•ืช ืœืชื•ืฆืื•ืช ื”ื‘ื ื™ื™ื”. ืœื“ืขืชื™, ื–ื” ื”ืจื‘ื”, ื•ืืชื” ืœื ื™ื›ื•ืœ ืœืขื‘ื•ื“ ื›ื›ื”.

ื›ืžื•ื‘ืŸ, ื”ื—ืœื˜ื ื• ืœื”ืื™ืฅ ืืช ื›ืœ ื”ื‘ื ื™ื™ื” ืฉืœื ื•.

ื‘ื•ืื• ื ื–ืจื–

ืœืจืื•ืช ืฉื‘ื ื™ื™ื ื™ื ืขื•ืžื“ื™ื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ืชื•ืจ, ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืื ื• ืขื•ืฉื™ื ื”ื•ื ืงื ื” ื™ื•ืชืจ ื—ื•ืžืจื” - ืคื™ืชื•ื— ื ืจื—ื‘ ื”ื•ื ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ. ืžื‘ื ื™ื ื”ืคืกื™ืงื• ืœืขืžื•ื“ ื‘ืชื•ืจ, ืื‘ืœ ื–ืžืŸ ื”ื”ืžืชื ื” ื™ืจื“ ืจืง ื‘ืžืขื˜, ืžื›ื™ื•ื•ืŸ ืฉื—ืœืง ืžื”ืฆ'ืงื™ื ืขืฆืžื ืืจื›ื• ื–ืžืŸ ืจื‘ ืžืื•ื“.

ื”ืกืจืช ืฆ'ืงื™ื ืฉืœื•ืงื—ื™ื ื™ื•ืชืจ ืžื“ื™ ื–ืžืŸ

ื”ืฉื™ืœื•ื‘ ื”ืจืฆื™ืฃ ืฉืœื ื• ื™ื›ื•ืœ ืœืชืคื•ืก ืฉื’ื™ืื•ืช ื•ื‘ืขื™ื•ืช ืžืกื•ื’ ื–ื”.

  • ืœื ื”ื•ืœืš ืœ. CI ื™ื›ื•ืœ ืœืชืคื•ืก ืฉื’ื™ืืช ืงื•ืžืคื™ืœืฆื™ื” ื›ืืฉืจ ืžืฉื”ื• ืœื ื ื‘ื ื” ืขืงื‘ ืฉื™ื ื•ื™ื™ื ืกื•ืชืจื™ื. ื›ืคื™ ืฉื›ื‘ืจ ืืžืจืชื™, ืื– ืืฃ ืื—ื“ ืœื ื™ื›ื•ืœ ืœื”ืจื›ื™ื‘ ื›ืœื•ื, ื”ื”ืชืคืชื—ื•ืช ื ืขืฆืจืช, ื•ื›ื•ืœื ืžืชืขืฆื‘ื ื™ื.
  • ื‘ืื’ ื‘ื”ืชื ื”ื’ื•ืช. ืœื“ื•ื’ืžื”, ื›ืืฉืจ ื”ืืคืœื™ืงืฆื™ื” ื‘ื ื•ื™ื”, ืืš ืงื•ืจืกืช ื›ืืฉืจ ืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ, ืื• ืฉื”ื›ืคืชื•ืจ ืื™ื ื• ื ืœื—ืฅ ื›ืœืœ. ื–ื” ืจืข ื›ื™ ื‘ืื’ ื›ื–ื” ื™ื›ื•ืœ ืœื”ื’ื™ืข ืœืžืฉืชืžืฉ.
  • ื‘ืื’ ื‘ืคืจื™ืกื”. ืœื“ื•ื’ืžื”, ืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ, ืืš ื”ื•ื ื–ื– 10 ืคื™ืงืกืœื™ื ืฉืžืืœื”.
  • ืขืœื™ื™ื” ื‘ื—ื•ื‘ ื˜ื›ื ื™.

ืœืื—ืจ ืขื™ื•ืŸ ื‘ืจืฉื™ืžื” ื–ื•, ื”ื‘ื ื• ืฉืจืง ืฉืชื™ ื”ื ืงื•ื“ื•ืช ื”ืจืืฉื•ื ื•ืช ื”ืŸ ืงืจื™ื˜ื™ื•ืช. ืื ื—ื ื• ืจื•ืฆื™ื ืœืชืคื•ืก ื‘ืขื™ื•ืช ื›ืืœื” ืงื•ื“ื. ื‘ืื’ื™ื ื‘ืคืจื™ืกื” ืžืชื’ืœื™ื ื‘ืฉืœื‘ ื”ืขื™ืฆื•ื‘-ืกืงื™ืจืช ื•ื ื™ืชืŸ ืœืชืงืŸ ืื•ืชื ื‘ืงืœื•ืช ืœืื—ืจ ืžื›ืŸ. ื˜ื™ืคื•ืœ ื‘ื—ื•ื‘ ื˜ื›ื ื™ ืžืฆืจื™ืš ืชื”ืœื™ืš ื•ืชื›ื ื•ืŸ ื ืคืจื“ื™ื, ื•ืœื›ืŸ ื”ื—ืœื˜ื ื• ืœื ืœื‘ื“ื•ืง ื–ืืช ื‘ื‘ืงืฉืช ืžืฉื™ื›ื”.

ื‘ื”ืชื‘ืกืก ืขืœ ืกื™ื•ื•ื’ ื–ื”, ื˜ืœื˜ืœื ื• ืืช ื›ืœ ืจืฉื™ืžืช ื”ื”ืžื—ืื•ืช. ืžื•ืš ืžื•ื—ืง ื•ื“ื—ื” ืืช ื”ืฉืงืชื• ื‘ืŸ ืœื™ืœื”: ืจืง ื›ื“ื™ ืฉื™ืคื™ืง ื“ื™ื•ื•ื— ืขืœ ื›ืžื” ื‘ืขื™ื•ืช ื”ื™ื• ื‘ืคืจื•ื™ืงื˜. ื”ืกื›ืžื ื• ืœืขื‘ื•ื“ ื‘ื ืคืจื“ ืขื ื”ื—ื•ื‘ ื”ื˜ื›ื ื™, ื• ื‘ื“ื™ืงื•ืช Android Studio ื ื–ื ื—ื• ืœื—ืœื•ื˜ื™ืŸ. ืื ื“ืจื•ืื™ื“ ืกื˜ื•ื“ื™ื• ื‘-Docker ืœื”ืคืขืœืช ื‘ื“ื™ืงื•ืช ื ืฉืžืข ืžืขื ื™ื™ืŸ, ืื‘ืœ ื’ื•ืจื ืœื”ืจื‘ื” ื‘ืขื™ื•ืช ื‘ืชืžื™ื›ื”. ื›ืœ ืขื“ื›ื•ืŸ ืœื’ืจืกืื•ืช Android Studio ืคื™ืจื•ืฉื• ืžืื‘ืง ืขื ื‘ืื’ื™ื ืœื ืžื•ื‘ื ื™ื. ื›ืžื• ื›ืŸ, ื”ื™ื” ืงืฉื” ืœืชืžื•ืš ื‘ื‘ื“ื™ืงื•ืช ืฆื™ืœื•ื ืžืกืš, ืžื›ื™ื•ื•ืŸ ืฉื”ืกืคืจื™ื™ื” ืœื ื”ื™ื™ืชื” ื™ืฆื™ื‘ื” ื‘ืžื™ื•ื—ื“ ื•ื”ื™ื• ืชื•ืฆืื•ืช ืฉื’ื•ื™ื•ืช. ื‘ื“ื™ืงื•ืช ืฆื™ืœื•ื ืžืกืš ื”ื•ืกืจื• ืžืจืฉื™ืžืช ื”ื‘ื“ื™ืงื”.

ื›ืชื•ืฆืื” ืžื›ืš, ื ืฉืืจื ื• ืขื:

  • ื”ืจื›ื‘ืช ARK;
  • ื‘ื“ื™ืงื•ืช ื’'ื•ื ื™ื˜;
  • ืžื‘ื—ื ื™ ืžื›ืฉื•ืจ.

ืžื˜ืžื•ืŸ ืžืจื•ื—ืง ืฉืœ Gradle

ื‘ืœื™ ืฆ'ืงื™ื ื›ื‘ื“ื™ื ื”ื›ืœ ื”ืฉืชืคืจ. ืื‘ืœ ืื™ืŸ ื’ื‘ื•ืœ ืœืฉืœืžื•ืช!

ื”ื™ื™ืฉื•ื ืฉืœื ื• ื›ื‘ืจ ื”ื™ื” ืžืคื•ืฆืœ ืœื›-150 ืžื•ื“ื•ืœื™ื ืžื“ื•ืจื’ื™ื. ืžื˜ืžื•ืŸ ืžืจื•ื—ืง Gradle ื‘ื“ืจืš ื›ืœืœ ืขื•ื‘ื“ ื˜ื•ื‘ ื‘ืžืงืจื” ื–ื”, ืื– ื”ื—ืœื˜ื ื• ืœื ืกื•ืช ืื•ืชื•.

ืžื˜ืžื•ืŸ ืžืจื•ื—ืง ืฉืœ Gradle ื”ื•ื ืฉื™ืจื•ืช ืฉื™ื›ื•ืœ ืœื‘ื ื•ืช ื—ืคืฆื™ื ื‘ืžื˜ืžื•ืŸ ืขื‘ื•ืจ ืžืฉื™ืžื•ืช ื‘ื•ื“ื“ื•ืช ื‘ืžื•ื“ื•ืœื™ื ื‘ื•ื“ื“ื™ื. Gradle, ื‘ืžืงื•ื ืœื”ืจื›ื™ื‘ ืืช ื”ืงื•ื“ ื‘ืคื•ืขืœ, ืžืฉืชืžืฉ ื‘-HTTP ื›ื“ื™ ืœื“ืคื•ืง ืขืœ ื”ืžื˜ืžื•ืŸ ื”ืžืจื•ื—ืง ื•ืœืฉืื•ืœ ืื ืžื™ืฉื”ื• ื›ื‘ืจ ื‘ื™ืฆืข ืืช ื”ืžืฉื™ืžื” ื”ื–ื•. ืื ื›ืŸ, ื–ื” ืคืฉื•ื˜ ืžื•ืจื™ื“ ืืช ื”ืชื•ืฆืื”.

ื”ืคืขืœืช ื”ืžื˜ืžื•ืŸ ื”ืžืจื•ื—ืง ืฉืœ Gradle ืงืœ ืžื›ื™ื•ื•ืŸ ืฉ- Gradle ืžืกืคืง ืชืžื•ื ืช Docker. ื”ืฆืœื—ื ื• ืœืขืฉื•ืช ื–ืืช ื‘ืฉืœื•ืฉ ืฉืขื•ืช.

ื›ืœ ืžื” ืฉื”ื™ื” ืฆืจื™ืš ืœืขืฉื•ืช ื–ื” ืœื”ืคืขื™ืœ ืืช Docker ื•ืœื›ืชื•ื‘ ืฉื•ืจื” ืื—ืช ื‘ืคืจื•ื™ืงื˜. ืื‘ืœ ืœืžืจื•ืช ืฉื ื™ืชืŸ ืœื”ืฉื™ืง ืื•ืชื• ื‘ืžื”ื™ืจื•ืช, ื™ื™ืงื— ื“ื™ ื”ืจื‘ื” ื–ืžืŸ ืขื“ ืฉื”ื›ืœ ื™ืขื‘ื•ื“ ื˜ื•ื‘.

ืœื”ืœืŸ ื’ืจืฃ ื”ื—ืžืฆื•ืช ืฉืœ ื”ืžื˜ืžื•ืŸ.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ื‘ื”ืชื—ืœื”, ืื—ื•ื– ื”ื—ืžืฆื•ืช ื”ืžื˜ืžื•ืŸ ื”ื™ื” ื›-65. ืœืื—ืจ ืฉืœื•ืฉื” ืฉื‘ื•ืขื•ืช ื”ืฆืœื—ื ื• ืœื”ืขืœื•ืช ืืช ื”ืขืจืš ื”ื–ื” ืœ-20%. ื”ืชื‘ืจืจ ืฉืœืžืฉื™ืžื•ืช ืฉืืคืœื™ืงืฆื™ื™ืช ืื ื“ืจื•ืื™ื“ ืื•ืกืคืช ื™ืฉ ืชืœื•ืช ื˜ืจื ื–ื™ื˜ื™ื‘ื™ืช ืžื•ื–ืจื”, ืฉื‘ื’ืœืœืŸ ื’ืจื“ืœ ืคืกืคืก ืืช ื”ืžื˜ืžื•ืŸ.

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

ื ื™ืชื•ื— ื”ืฉืคืขื”

ื‘ื‘ืงืฉืช ืžืฉื™ื›ื”, ืื ื• ืื•ืกืคื™ื git diff ื•ืžื•ืฆืื™ื ืืช ื”ืžื•ื“ื•ืœื™ื ืฉืœ Gradle ืฉื”ืฉืชื ื•.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ื”ื’ื™ื•ื ื™ ืœื”ืจื™ืฅ ืจืง ื‘ื“ื™ืงื•ืช ืžื›ืฉื•ืจ ืฉื‘ื•ื“ืงื•ืช ืืช ื”ืžื•ื“ื•ืœื™ื ืฉื”ืฉืชื ื• ื•ืืช ื›ืœ ื”ืžื•ื“ื•ืœื™ื ื”ืชืœื•ื™ื™ื ื‘ื”ื. ืื™ืŸ ื˜ืขื ืœื”ืจื™ืฅ ื‘ื“ื™ืงื•ืช ืขื‘ื•ืจ ืžื•ื“ื•ืœื™ื ืฉื›ื ื™ื: ื”ืงื•ื“ ืฉื ืœื ื”ืฉืชื ื” ื•ืฉื•ื ื“ื‘ืจ ืœื ื™ื›ื•ืœ ืœื”ื™ืฉื‘ืจ.

ืžื‘ื—ื ื™ ืžื›ืฉื•ืจ ืื™ื ื ื›ืœ ื›ืš ืคืฉื•ื˜ื™ื, ืžื›ื™ื•ื•ืŸ ืฉื”ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ืžืžื•ืงืžื™ื ื‘ืžื•ื“ื•ืœ ื”ื™ื™ืฉื•ื ื‘ืจืžื” ื”ืขืœื™ื•ื ื”. ื”ืฉืชืžืฉื ื• ื‘ื”ื™ื•ืจื™ืกื˜ื™ืงื” ืขื ื ื™ืชื•ื— ื‘ืชื™ื ื›ื“ื™ ืœื”ื‘ื™ืŸ ืœืื™ื–ื” ืžื•ื“ื•ืœ ืฉื™ื™ืš ื›ืœ ืžื‘ื—ืŸ.

ืฉื“ืจื•ื’ ืคืขื•ืœืช ืžื‘ื—ื ื™ ื”ืžื›ืฉื•ืจ ื›ืš ืฉื™ื‘ื“ืงื• ืจืง ืืช ื”ืžื•ื“ื•ืœื™ื ื”ืžืขื•ืจื‘ื™ื ืืจืš ื›ืฉืžื•ื ื” ืฉื‘ื•ืขื•ืช.

ื”ืืžืฆืขื™ื ืœื”ืืฆืช ื”ื‘ื“ื™ืงื•ืช ืขื‘ื“ื• ื‘ื”ืฆืœื—ื”. ืž-45 ื“ืงื•ืช ืขืœื™ื ื• ืœื›-15. ื–ื” ื›ื‘ืจ ื ื•ืจืžืœื™ ืœื—ื›ื•ืช ืจื‘ืข ืฉืขื” ืœื‘ื ื™ื™ื”.

ืื‘ืœ ืขื›ืฉื™ื• ืžืคืชื—ื™ื ื”ืชื—ื™ืœื• ืœื”ืชืœื•ื ืŸ ืฉื”ื ืœื ืžื‘ื™ื ื™ื ืื™ืœื• builds ืžื•ืฉืงื™ื, ืื™ืคื” ืืคืฉืจ ืœืจืื•ืช ืืช ื”ื™ื•ืžืŸ, ืœืžื” ื”-build ืื“ื•ื, ืื™ื–ื• ื‘ื“ื™ืงื” ื ื›ืฉืœื” ื•ื›ื•'.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ื‘ืขื™ื•ืช ื‘ืžืฉื•ื‘ ืžืื˜ื•ืช ืืช ื”ืคื™ืชื•ื—, ื•ืœื›ืŸ ื ื™ืกื™ื ื• ืœืกืคืง ืžื™ื“ืข ื‘ืจื•ืจ ื•ืžืคื•ืจื˜ ืขืœ ื›ืœ ื™ื—ืกื™ ืฆื™ื‘ื•ืจ ื•ื‘ื ื™ื™ื” ื›ื›ืœ ื”ืืคืฉืจ. ื”ืชื—ืœื ื• ืขื ื”ืขืจื•ืช ื‘-Bitbucket ืœ-PR, ืฉืฆื™ื™ื ื• ืื™ื–ื” ื‘ื ื™ื™ื” ื ื›ืฉืœื” ื•ืžื“ื•ืข, ื•ื›ืชื‘ื ื• ื”ื•ื“ืขื•ืช ืžืžื•ืงื“ื•ืช ื‘-Slack. ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ื™ืฆืจื ื• ืขื‘ื•ืจ ื”ื“ืฃ ื“ืฉื‘ื•ืจื“ PR ืขื ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”-builds ืฉืคื•ืขืœื™ื ื›ืขืช ื•ื”ืกื˜ื˜ื•ืก ืฉืœื”ื: ื‘ืชื•ืจ, ืคื•ืขืœ, ืงืจืก ืื• ื”ื•ืฉืœื. ืืชื” ื™ื›ื•ืœ ืœืœื—ื•ืฅ ืขืœ ื”-build ื•ืœื”ื’ื™ืข ืœื™ื•ืžืŸ ืฉืœื•.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ืฉื™ืฉื” ืฉื‘ื•ืขื•ืช ื”ื•ืงื“ืฉื• ืœืžืฉื•ื‘ ืžืคื•ืจื˜.

ืชื•ื›ื ื™ื•ืช

ื‘ื•ืื• ื ืขื‘ื•ืจ ืœื”ื™ืกื˜ื•ืจื™ื” ื”ืื—ืจื•ื ื”. ืœืื—ืจ ืฉืคืชืจื ื• ืืช ื‘ืขื™ื™ืช ื”ืžืฉื•ื‘, ื”ื’ืขื ื• ืœืจืžื” ื—ื“ืฉื” - ื”ื—ืœื˜ื ื• ืœื‘ื ื•ืช ื—ื•ื•ืช ืืžื•ืœื˜ื•ืจื™ื ืžืฉืœื ื•. ื›ืืฉืจ ื™ืฉ ื”ืจื‘ื” ื‘ื“ื™ืงื•ืช ื•ืืžื•ืœื˜ื•ืจื™ื, ืงืฉื” ืœื ื”ืœ ืื•ืชื. ื›ืชื•ืฆืื” ืžื›ืš, ื›ืœ ื”ืืžื•ืœื˜ื•ืจื™ื ืฉืœื ื• ืขื‘ืจื• ืœืืฉื›ื•ืœ k8s ืขื ื ื™ื”ื•ืœ ืžืฉืื‘ื™ื ื’ืžื™ืฉ.

ื‘ื ื•ืกืฃ, ื™ืฉื ืŸ ืชื•ื›ื ื™ื•ืช ื ื•ืกืคื•ืช.

  • ื”ื—ื–ืจ ืžื•ืš (ื•ื ื™ืชื•ื— ืกื˜ื˜ื™ ืื—ืจ). ืื ื—ื ื• ื›ื‘ืจ ืขื•ื‘ื“ื™ื ื‘ื›ื™ื•ื•ืŸ ื”ื–ื”.
  • ื”ืคืขืœ ื”ื›ืœ ืขืœ ื—ื•ืกื ื™ื—ืกื™ ืฆื™ื‘ื•ืจ ืžื‘ื—ื ื™ื ืžืงืฆื” ืœืงืฆื” ื‘ื›ืœ ื’ืจืกืื•ืช ื”-SDK.

ืื– ืขืงื‘ื ื• ืื—ืจ ื”ื”ื™ืกื˜ื•ืจื™ื” ืฉืœ ื”ืคื™ืชื•ื— ืฉืœ ืื™ื ื˜ื’ืจืฆื™ื” ืžืชืžืฉื›ืช ื‘ืื•ื•ื™ื˜ื•. ืขื›ืฉื™ื• ืื ื™ ืจื•ืฆื” ืœืชืช ื›ืžื” ืขืฆื•ืช ืžื ืงื•ื“ืช ืžื‘ื˜ ืžื ื•ืกื”.

ะกะพะฒะตั‚ั‹

ืื ื”ื™ื™ืชื™ ื™ื›ื•ืœ ืœืชืช ืขืฆื” ืื—ืช ื‘ืœื‘ื“ ื–ื• ืชื”ื™ื” ื–ื•:

ืื ื ื”ื™ื–ื”ืจ ืขื ืกืงืจื™ืคื˜ื™ื ืฉืœ ืžืขื˜ืคืช!

Bash ื”ื•ื ื›ืœื™ ืžืื•ื“ ื’ืžื™ืฉ ื•ื—ื–ืง, ืžืื•ื“ ื ื•ื— ื•ืžื”ื™ืจ ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื. ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœื™ืคื•ืœ ืขื ื–ื” ืœืžืœื›ื•ื“ืช, ื•ืœืžืจื‘ื” ื”ืฆืขืจ, ื ืคืœื ื• ืœืชื•ื›ื•.

ื”ื›ืœ ื”ืชื—ื™ืœ ืขื ืกืงืจื™ืคื˜ื™ื ืคืฉื•ื˜ื™ื ืฉืจืฆื• ื‘ืžื›ื•ื ื•ืช ื”ื‘ื ื™ื™ื” ืฉืœื ื•:

#!/usr/bin/env bash
./gradlew assembleDebug

ืื‘ืœ, ื›ื™ื“ื•ืข, ื”ื›ืœ ืžืชืคืชื— ื•ืžืกืชื‘ืš ืขื ื”ื–ืžืŸ - ื‘ื•ื ื ืจื™ืฅ ืกืงืจื™ืคื˜ ืื—ื“ ืœืื—ืจ, ื‘ื•ื ื ืขื‘ื™ืจ ืฉื ื›ืžื” ืคืจืžื˜ืจื™ื - ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื ืืœืฆื ื• ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืฉืงื•ื‘ืขืช ื‘ืื™ื–ื• ืจืžื” ืฉืœ ืงื™ื ื•ืŸ bash ืื ื—ื ื• ืžืกื•ื“ืจื™ื ืขื›ืฉื™ื• ืœื”ื›ื ื™ืก ืืช ื”ืฆื™ื˜ื•ื˜ื™ื ื”ื“ืจื•ืฉื™ื, ื›ื“ื™ ืœื”ืชื—ื™ืœ ืืช ื”ื›ืœ.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ืืชื” ื™ื›ื•ืœ ืœื“ืžื™ื™ืŸ ืืช ืขืœื•ื™ื•ืช ื”ืขื‘ื•ื“ื” ืขื‘ื•ืจ ืคื™ืชื•ื— ืฉืœ ืกืงืจื™ืคื˜ื™ื ื›ืืœื”. ืื ื™ ืžืžืœื™ืฅ ืœืš ืœื ืœื™ืคื•ืœ ื‘ืคื— ื”ื–ื”.

ืžื” ื ื™ืชืŸ ืœื”ื—ืœื™ืฃ?

  • ื›ืœ ืฉืคืช ืกืงืจื™ืคื˜ื™ื. ืœื›ืชื•ื‘ ืœ Python ืื• Kotlin Script ื™ื•ืชืจ ื ื•ื— ื›ื™ ื–ื” ืชื›ื ื•ืช, ืœื ืกืงืจื™ืคื˜ื™ื.
  • ืื• ืœืชืืจ ืืช ื›ืœ ื”ื™ื’ื™ื•ืŸ ื”ื‘ื ื™ื™ื” ื‘ื˜ื•ืคืก ืžืฉื™ืžื•ืช ื“ื™ืจื•ื’ ืžื•ืชืืžื•ืช ืื™ืฉื™ืช ืขื‘ื•ืจ ื”ืคืจื•ื™ืงื˜ ืฉืœืš.

ื”ื—ืœื˜ื ื• ืœื‘ื—ื•ืจ ื‘ืืคืฉืจื•ืช ื”ืฉื ื™ื™ื”, ื•ืขื›ืฉื™ื• ืื ื—ื ื• ืžื•ื—ืงื™ื ื‘ืื•ืคืŸ ืฉื™ื˜ืชื™ ืืช ื›ืœ ืกืงืจื™ืคื˜ื™ ื”-bash ื•ื›ื•ืชื‘ื™ื ื”ืจื‘ื” ืžืฉื™ืžื•ืช ื“ืจื’ื” ืžื•ืชืืžื•ืช ืื™ืฉื™ืช.

ื˜ื™ืค ืžืก' 2: ืื—ืกืŸ ืชืฉืชื™ืช ื‘ืงื•ื“.

ื–ื” ื ื•ื— ื›ืืฉืจ ื”ื’ื“ืจืช ื”-Continuous Integration ืžืื•ื—ืกื ืช ืœื ื‘ืžืžืฉืง ื”-UI ืฉืœ Jenkins ืื• TeamCity ื•ื›ื•', ืืœื ื‘ืฆื•ืจื” ืฉืœ ืงื‘ืฆื™ ื˜ืงืกื˜ ื™ืฉื™ืจื•ืช ื‘ืžืื’ืจ ื”ืคืจื•ื™ืงื˜ื™ื. ื–ื” ื ื•ืชืŸ ื™ื›ื•ืœืช ื’ืจืกื”. ืœื ื™ื”ื™ื” ืงืฉื” ืœื”ื—ื–ื™ืจ ืืช ื”ืงื•ื“ ืœืื—ื•ืจ ืื• ืœื‘ื ื•ืช ืื•ืชื• ืขืœ ืขื ืฃ ืื—ืจ.

ื ื™ืชืŸ ืœืื—ืกืŸ ืกืงืจื™ืคื˜ื™ื ื‘ืคืจื•ื™ืงื˜. ืžื” ืœืขืฉื•ืช ืขื ื”ืกื‘ื™ื‘ื”?

ื˜ื™ืค ืžืก' 3: Docker ื™ื›ื•ืœ ืœืขื–ื•ืจ ืขื ื”ืกื‘ื™ื‘ื”.

ื–ื” ื‘ื”ื—ืœื˜ ื™ืขื–ื•ืจ ืœืžืคืชื—ื™ ืื ื“ืจื•ืื™ื“; ืœ- iOS ืื™ืŸ ืขื“ื™ื™ืŸ ืื—ื“, ืœืžืจื‘ื” ื”ืฆืขืจ.

ื–ื•ื”ื™ ื“ื•ื’ืžื” ืœืงื•ื‘ืฅ docker ืคืฉื•ื˜ ื”ืžื›ื™ืœ jdk ื•-android-sdk:

FROM openjdk:8

ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" 
    ANDROID_HOME="/usr/local/android-sdk" 
    ANDROID_VERSION=26 
    ANDROID_BUILD_TOOLS_VERSION=26.0.2

# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android 
    && cd "$ANDROID_HOME" 
    && curl -o sdk.zip $SDK_URL 
    && unzip sdk.zip 
    && rm sdk.zip 
    && yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses

# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" 
    "platforms;android-${ANDROID_VERSION}" 
    "platform-tools"

RUN mkdir /application
WORKDIR /application

ืœืื—ืจ ืฉื›ืชื‘ืชื™ ืืช ืงื•ื‘ืฅ ื”-Docker ื”ื–ื” (ืื ื™ ืื’ืœื” ืœืš ืกื•ื“, ืืชื” ืœื ืฆืจื™ืš ืœื›ืชื•ื‘ ืื•ืชื•, ืืœื ืคืฉื•ื˜ ืœืžืฉื•ืš ืื•ืชื• ืžื•ื›ืŸ ืž-GitHub) ื•ื”ืจื›ื‘ืช ืืช ื”ืชืžื•ื ื”, ืืชื” ืžืงื‘ืœ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืขืœื™ื” ืชื•ื›ืœ ืœื‘ื ื•ืช ืืช ื”ืืคืœื™ืงืฆื™ื” ื•ืœื”ืจื™ืฅ ื‘ื“ื™ืงื•ืช Junit.

ืฉืชื™ ื”ืกื™ื‘ื•ืช ื”ืขื™ืงืจื™ื•ืช ืœื›ืš ืฉื–ื” ื”ื’ื™ื•ื ื™ ื”ืŸ ืžื“ืจื’ื™ื•ืช ื•ื—ื–ืจืชื™ื•ืช. ื‘ืืžืฆืขื•ืช docker, ืืชื” ื™ื›ื•ืœ ืœื’ื™ื™ืก ื‘ืžื”ื™ืจื•ืช ืชืจื™ืกืจ ืกื•ื›ื ื™ ื‘ื ื™ื™ื” ืฉืชื”ื™ื” ื‘ื“ื™ื•ืง ืื•ืชื” ืกื‘ื™ื‘ื” ื›ืžื• ื”ืงื•ื“ืžืช. ื–ื” ื”ื•ืคืš ืืช ื”ื—ื™ื™ื ืฉืœ ืžื”ื ื“ืกื™ CI ืœืงืœื™ื ื”ืจื‘ื” ื™ื•ืชืจ. ื–ื” ื“ื™ ืงืœ ืœื“ื—ื•ืฃ ืืช android-sdk ืœืชื•ืš docker, ืื‘ืœ ืขื ืืžื•ืœื˜ื•ืจื™ื ื–ื” ืงืฆืช ื™ื•ืชืจ ืงืฉื”: ืชืฆื˜ืจืš ืœืขื‘ื•ื“ ืงืฆืช ื™ื•ืชืจ ืงืฉื” (ืื• ืœื”ื•ืจื™ื“ ืืช ื”ืžื•ื’ืžืจ ืž-GitHub ืฉื•ื‘).

ื˜ื™ืค ืžืก' 4: ืืœ ืชืฉื›ื— ืฉื‘ื“ื™ืงื•ืช ืœื ื ืขืฉื•ืช ืœืžืขืŸ ื‘ื“ื™ืงื•ืช, ืืœื ืœืžืขืŸ ืื ืฉื™ื.

ืžืฉื•ื‘ ืžื”ื™ืจ ื•ื‘ืขื™ืงืจ ื‘ืจื•ืจ ื—ืฉื•ื‘ ืžืื•ื“ ืœืžืคืชื—ื™ื: ืžื” ื ืฉื‘ืจ, ืื™ื–ื• ื‘ื“ื™ืงื” ื ื›ืฉืœื”, ืื™ืคื” ืื ื™ ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”-buildlog.

ื˜ื™ืค ืžืก' 5: ื”ื™ื• ืคืจื’ืžื˜ื™ื™ื ื‘ืขืช ืคื™ืชื•ื— ืื™ื ื˜ื’ืจืฆื™ื” ืžืชืžืฉื›ืช.

ื”ื‘ืŸ ื‘ื‘ื™ืจื•ืจ ืื™ืœื• ืกื•ื’ื™ ืฉื’ื™ืื•ืช ืืชื” ืจื•ืฆื” ืœืžื ื•ืข, ื›ืžื” ืžืฉืื‘ื™ื, ื–ืžืŸ ื•ื–ืžืŸ ืžื—ืฉื‘ ืืชื” ืžื•ื›ืŸ ืœื”ืฉืงื™ืข. ื‘ื“ื™ืงื•ืช ืฉื ืžืฉื›ื•ืช ื™ื•ืชืจ ืžื“ื™ ื–ืžืŸ ื™ื›ื•ืœื•ืช ืœืžืฉืœ ืœื”ื™ื“ื—ื•ืช ื‘ืŸ ืœื™ืœื”. ื•ืืช ืืœื” ืžื”ื ืฉืชื•ืคืกื™ื ืฉื’ื™ืื•ืช ืœื ื—ืฉื•ื‘ื•ืช ื™ืฉ ืœื ื˜ื•ืฉ ืœื—ืœื•ื˜ื™ืŸ.

ื˜ื™ืค ืžืก' 6: ื”ืฉืชืžืฉ ื‘ื›ืœื™ื ืžื•ื›ื ื™ื.

ื™ืฉื ืŸ ื—ื‘ืจื•ืช ืจื‘ื•ืช ืฉืžืกืคืงื•ืช CI ื‘ืขื ืŸ.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

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

ื˜ื™ืค ืžืก' 7: ื‘ืฆื•ื•ืช ื’ื“ื•ืœ, ืคืชืจื•ื ื•ืช ืคื ื™ืžื™ื™ื ืจื•ื•ื—ื™ื™ื ื™ื•ืชืจ.

ืื‘ืœ ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ, ื›ื›ืœ ืฉื”ืฆื•ื•ืช ื™ื’ื“ืœ, ื”ืคืชืจื•ื ื•ืช ื”ืคื ื™ืžื™ื™ื ื™ื”ืคื›ื• ืœืจื•ื•ื—ื™ื™ื ื™ื•ืชืจ. ื™ืฉ ื‘ืขื™ื” ืื—ืช ื‘ื”ื—ืœื˜ื•ืช ื”ืืœื”. ื™ืฉ ื—ื•ืง ืฉืœ ื”ืชืฉื•ืื•ืช ื”ืคื•ื—ืชื•ืช ื‘ื›ืœื›ืœื”: ื‘ื›ืœ ืคืจื•ื™ืงื˜ ื›ืœ ืฉื™ืคื•ืจ ืื—ืจ ื›ืš ืงืฉื” ื™ื•ืชืจ ื•ื™ื•ืชืจ ื•ื“ื•ืจืฉ ืขื•ื“ ื•ืขื•ื“ ื”ืฉืงืขื”.

ื›ืœื›ืœื” ืžืชืืจืช โ€‹โ€‹ืืช ื›ืœ ื—ื™ื™ื ื•, ื›ื•ืœืœ ืื™ื ื˜ื’ืจืฆื™ื” ืžืชืžืฉื›ืช. ื‘ื ื™ืชื™ ืœื•ื— ื–ืžื ื™ื ืฉืœ ืขืœื•ื™ื•ืช ืขื‘ื•ื“ื” ืขื‘ื•ืจ ื›ืœ ืฉืœื‘ ื‘ืคื™ืชื•ื— ืฉืœ ื”ืฉื™ืœื•ื‘ ื”ืจืฆื™ืฃ ืฉืœื ื•.

ืื‘ื•ืœื•ืฆื™ื” ืฉืœ CI ื‘ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืœืžื•ื‘ื™ื™ืœ

ื‘ืจื•ืจ ืฉื›ืœ ืฉื™ืคื•ืจ ื”ื•ืคืš ืœืงืฉื” ื™ื•ืชืจ ื•ื™ื•ืชืจ. ื‘ื”ืกืชื›ืœื•ืช ืขืœ ื”ื’ืจืฃ ื”ื–ื”, ืืชื” ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืฉื™ืฉ ืœืคืชื— ืื™ื ื˜ื’ืจืฆื™ื” ืžืชืžืฉื›ืช ื‘ื”ืชืื ืœื’ื™ื“ื•ืœ ื‘ื’ื•ื“ืœ ื”ืฆื•ื•ืช. ืขื‘ื•ืจ ืฆื•ื•ืช ืฉืœ ืฉื ื™ ืื ืฉื™ื, ื”ืฉืงืขื” ืฉืœ 50 ื™ื•ื ื‘ืคื™ืชื•ื— ื—ื•ื•ืช ืืžื•ืœื˜ื•ืจื™ื ืคื ื™ืžื™ืช ื”ื™ื ืจืขื™ื•ืŸ ื‘ื™ื ื•ื ื™. ืื‘ืœ ื™ื—ื“ ืขื ื–ืืช, ืขื‘ื•ืจ ืฆื•ื•ืช ื’ื“ื•ืœ, ืœื ืœืขืฉื•ืช Continuous Integration ื‘ื›ืœืœ ื–ื” ื’ื ืจืขื™ื•ืŸ ืจืข, ื›ื™ ื‘ืขื™ื•ืช ืื™ื ื˜ื’ืจืฆื™ื”, ืชื™ืงื•ืŸ ืชืงืฉื•ืจืช ื•ื›ื•'. ื–ื” ื™ื™ืงื— ืขื•ื“ ื™ื•ืชืจ ื–ืžืŸ.

ื”ืชื—ืœื ื• ืขื ื”ืจืขื™ื•ืŸ ืฉืฆืจื™ืš ืื•ื˜ื•ืžืฆื™ื” ื›ื™ ืื ืฉื™ื ื™ืงืจื™ื, ื”ื ืขื•ืฉื™ื ื˜ืขื•ื™ื•ืช ื•ืžืชืขืฆืœื™ื. ืื‘ืœ ืื ืฉื™ื ื’ื ืขื•ืฉื™ื ืื•ื˜ื•ืžืฆื™ื”. ืœื›ืŸ, ื›ืœ ืื•ืชืŸ ื‘ืขื™ื•ืช ื—ืœื•ืช ืขืœ ืื•ื˜ื•ืžืฆื™ื”.

  • ืื•ื˜ื•ืžืฆื™ื” ื”ื™ื ื™ืงืจื”. ื–ื›ื•ืจ ืืช ืœื•ื— ื”ื–ืžื ื™ื ืฉืœ ื”ืœื™ื“ื”.
  • ื›ืฉื–ื” ืžื’ื™ืข ืœืื•ื˜ื•ืžืฆื™ื”, ืื ืฉื™ื ืขื•ืฉื™ื ื˜ืขื•ื™ื•ืช.
  • ืœืคืขืžื™ื ื–ื” ืžืื•ื“ ืขืฆืœืŸ ืœืขืฉื•ืช ืื•ื˜ื•ืžืฆื™ื”, ื›ื™ ื”ื›ืœ ืขื•ื‘ื“ ื›ื›ื”. ืœืžื” ืœืฉืคืจ ืžืฉื”ื• ืื—ืจ, ืœืžื” ื›ืœ ื”ืฉื™ืœื•ื‘ ื”ืจืฆื™ืฃ ื”ื–ื”?

ืื‘ืœ ื™ืฉ ืœื™ ืกื˜ื˜ื™ืกื˜ื™ืงื”: ืฉื’ื™ืื•ืช ื ืชืคืกื•ืช ื‘-20% ืžื”ืžื›ืœื•ืœื™ื. ื•ื–ื” ืœื ื‘ื’ืœืœ ืฉื”ืžืคืชื—ื™ื ืฉืœื ื• ื›ื•ืชื‘ื™ื ืงื•ื“ ื‘ืฆื•ืจื” ื’ืจื•ืขื”. ื”ืกื™ื‘ื” ืœื›ืš ื”ื™ื ืฉืžืคืชื—ื™ื ื‘ื˜ื•ื—ื™ื ืฉืื ื”ื ื™ืขืฉื• ื˜ืขื•ืช ื›ืœืฉื”ื™, ื”ื™ื ืœื ืชื™ื’ืžืจ ื‘ืคื™ืชื•ื—, ื”ื™ื ืชื™ืชืคืก ืขืœ ื™ื“ื™ ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช. ื‘ื”ืชืื ืœื›ืš, ืžืคืชื—ื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืงื™ืข ื™ื•ืชืจ ื–ืžืŸ ื‘ื›ืชื™ื‘ืช ืงื•ื“ ื•ื“ื‘ืจื™ื ืžืขื ื™ื™ื ื™ื, ื‘ืžืงื•ื ืœืจื•ืฅ ื•ืœื‘ื“ื•ืง ืžืฉื”ื• ืžืงื•ืžื™.

ืชืจื’ื•ืœ ืื™ื ื˜ื’ืจืฆื™ื” ืจืฆื™ืคื”. ืื‘ืœ ื‘ืžื™ื“ื”.

ืื’ื‘, ื ื™ืงื•ืœืื™ ื ืกื˜ืจื•ื‘ ืœื ืจืง ื ื•ืชืŸ ื“ื•ื—ื•ืช ืžืขื•ืœื™ื ื‘ืขืฆืžื•, ืืœื ื’ื ื—ื‘ืจ ื‘ื•ื•ืขื“ืช ื”ืชื•ื›ื ื™ืช AppsConf ื•ืขื•ื–ืจืช ืœืื—ืจื™ื ืœื”ื›ื™ืŸ ืขื‘ื•ืจืš ื ืื•ืžื™ื ืžืฉืžืขื•ืชื™ื™ื. ื ื™ืชืŸ ืœื”ืขืจื™ืš ืืช ื”ืฉืœืžื•ืช ื•ื”ืชื•ืขืœืช ืฉืœ ืชื•ื›ื ื™ืช ื”ื›ื ืก ื”ื‘ื ืœืคื™ ื ื•ืฉืื™ื ื‘ ืœื•ื— ื–ืžื ื™ื. ื•ืœืคืจื˜ื™ื ื”ื’ื™ืขื• ืœ-Infospace ื‘ืชืืจื™ื›ื™ื 22-23 ื‘ืืคืจื™ืœ.

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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”