ืื™ืš ืœื ืœื™ืจื•ืช ืœืขืฆืžืš ื‘ืจื’ืœ ื‘ืืžืฆืขื•ืช Liquibase

ื–ื” ืžืขื•ืœื ืœื ืงืจื”, ื•ื”ื ื” ื–ื” ืฉื•ื‘!

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

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

ืื™ืš ืœื ืœื™ืจื•ืช ืœืขืฆืžืš ื‘ืจื’ืœ ื‘ืืžืฆืขื•ืช Liquibase

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

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

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

ื‘ื ื•ืกืฃ, ื›ื‘ืจ ื”ื™ื” ืžืืžืจ ื ื”ื“ืจ ื‘ื ื•ืฉื ื˜ื™ืคื™ื ืฉื™ืžื•ืฉื™ื™ื:

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

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

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

ะขะฐะผ ืžืชื•ืืจื™ื ื“ื‘ืจื™ื ืคืฉื•ื˜ื™ื ืืš ื—ืฉื•ื‘ื™ื ืžืื•ื“, ืฉื‘ืœืขื“ื™ื”ื ื”ืฉื™ืžื•ืฉ ื‘ืกืคืจื™ื™ื” ื™ื›ื•ืœ ืœืกื‘ืš ืืช ื—ื™ื™ืš. ืœื“ื•ื’ืžื”, ื’ื™ืฉื” ืœื ืžื‘ื ื™ืช ืœื ื™ื”ื•ืœ ืขืจื›ื•ืช ืฉื™ื ื•ื™ื™ื ืชื•ื‘ื™ืœ ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ืœื‘ืœื‘ื•ืœ ื•ืœื”ื’ื™ืจื•ืช ืฉื‘ื™ืจื•ืช. ืื ืœื ืชื•ืฆื™ืื• ื‘ืžืงื‘ื™ืœ ืฉื™ื ื•ื™ื™ื ืชืœื•ื™ื™ื ื”ื“ื“ื™ื™ื ื‘ืžื‘ื ื” ืžืกื“ ื”ื ืชื•ื ื™ื ื•ื”ืœื•ื’ื™ืงื” ืฉืœ ื”ืฉื™ืจื•ืชื™ื, ืื– ื™ืฉ ืกื‘ื™ืจื•ืช ื’ื‘ื•ื”ื” ืฉื–ื” ื™ื•ื‘ื™ืœ ืœื‘ื“ื™ืงื•ืช ืื“ื•ืžื•ืช ืื• ืœืกื‘ื™ื‘ื” ืฉื‘ื•ืจื”. ื‘ื ื•ืกืฃ, ื”ื”ืžืœืฆื•ืช ืœืฉื™ืžื•ืฉ ื‘-Liquibase ื‘ืืชืจ ื”ืจืฉืžื™ ืžื›ื™ืœื•ืช ืคืกืงื” ืขืœ ืคื™ืชื•ื— ื•ืื™ืžื•ืช ืฉืœ ืกืงืจื™ืคื˜ื™ื ืœื—ื–ืจื” ื™ื—ื“ ืขื ืกืงืจื™ืคื˜ื™ ื”ื”ื’ื™ืจื” ื”ืขื™ืงืจื™ื™ื. ื•ื‘ื›ืŸ, ื‘ื›ืชื‘ื” https://habr.com/ru/post/178665/ ื™ืฉื ืŸ ื“ื•ื’ืžืื•ืช ืœืงื•ื“ ื”ืงืฉื•ืจ ืœื”ื’ื™ืจื•ืช ื•ืœืžื ื’ื ื•ืŸ ื”ื—ื–ืจื” ืœืื—ื•ืจ.

2. ืื ื”ืชื—ืœืช ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ื”ื’ื™ืจื”, ืืœ ืชืืคืฉืจ ืชื™ืงื•ื ื™ื ื™ื“ื ื™ื™ื ื‘ืžื‘ื ื” ืžืกื“ ื”ื ืชื•ื ื™ื

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

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

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

4. ื™ืฉ ืœืืžืช ื’ื™ื‘ื•ื™ื™ื ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ืื ืืคืฉืจ

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

5. ื”ืฉืชืžืฉ ื‘ื’ื™ื‘ื•ื™ื™ื ืžืื•ืžืชื™ื ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ื‘ืคื™ืชื•ื— ื‘ืžื™ื“ืช ื”ืืคืฉืจ

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

6. ืฆ'ืื˜ ืขื ืžืคืชื—ื™ื ืื—ืจื™ื ื‘ืฆื•ื•ืช

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

7. ืชื—ืฉื•ื‘ ืžื” ืืชื” ืขื•ืฉื”!

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

ืžืœื›ื•ื“ื•ืช

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

ืžืฆื‘ 1. ืฉื ื™ ืžืคืชื—ื™ื ืžื ืกื™ื ืœื”ื•ืกื™ืฃ ืขืจื›ื•ืช ืฉื™ื ื•ื™ื™ื ื—ื“ืฉื™ื ื‘ื•-ื–ืžื ื™ืช

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

ืื™ืš ืœืคืชื•ืจ

  1. ืื™ื›ืฉื”ื•, ืขืžื™ืชื™ื ื—ื™ื™ื‘ื™ื ืœื”ืกื›ื™ื ืขืœ ื”ืกื“ืจ ืฉื‘ื• ื”ืฉื™ื ื•ื™ื™ื ืฉืœื”ื ืฆืจื™ื›ื™ื ืœืขื‘ื•ืจ, ื ื ื™ื— ืฉื™ืฉ ืœื”ื—ื™ืœ ืืช Petin ืงื•ื“ื.
  2. ืื“ื ืื—ื“ ืฆืจื™ืš ืœืฉืคื•ืš ืืช ื”ืฉื ื™ ื•ืœืกืžืŸ ืืช ืขืจื›ืช ื”ืฉื™ื ื•ื™ื™ื ืฉืœ Vasya ืขื ื’ืจืกื” 5. ื–ื” ื™ื›ื•ืœ ืœื”ื™ืขืฉื•ืช ื‘ืืžืฆืขื•ืช Cherry Pick ืื• ืžื™ื–ื•ื’ ืžืกื•ื“ืจ.
  3. ืœืื—ืจ ื”ืฉื™ื ื•ื™ื™ื, ื”ืงืคื™ื“ื• ืœื‘ื“ื•ืง ืืช ืชืงืคื•ืช ื”ืคืขื•ืœื•ืช ืฉื ืขืฉื•.
    ืœืžืขืฉื”, ืžื ื’ื ื•ื ื™ Liquibase ื™ืืคืฉืจื• ืœืš ืฉื ื™ ืขืจื›ื•ืช ืฉื™ื ื•ื™ื™ื ื‘ื’ืจืกื” 4 ื‘ืžืื’ืจ, ื›ืš ืฉืชื•ื›ืœ ืœื”ืฉืื™ืจ ื”ื›ืœ ื›ืžื• ืฉื”ื•ื. ื›ืœื•ืžืจ, ืคืฉื•ื˜ ื™ื”ื™ื• ืœืš ืฉืชื™ ื’ืจืกืื•ืช ืฉืœ ื’ืจืกื” 4 ืขื ืฉืžื•ืช ืฉื•ื ื™ื. ืขื ื’ื™ืฉื” ื–ื•, ื’ืจืกืื•ืช ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื•ืคื›ื•ืช ืงืฉื•ืช ืžืื•ื“ ืœื ื™ื•ื•ื˜ ืžืื•ื—ืจ ื™ื•ืชืจ.

ื‘ื ื•ืกืฃ, Liquibase, ื›ืžื• ื”ื‘ืชื™ื ืฉืœ ื”ื”ื•ื‘ื™ื˜ื™ื, ืฉื•ืžืจ ืขืœ ื”ืจื‘ื” ืกื•ื“ื•ืช. ืื—ื“ ืžื”ื ื”ื•ื ืžืคืชื— validCheckSum, ืฉื”ื•ืคื™ืข ืžื’ืจืกื” 1.7 ื•ืžืืคืฉืจ ืœืฆื™ื™ืŸ ืขืจืš hash ื—ื•ืงื™ ืขื‘ื•ืจ ืขืจื›ืช ืฉื™ื ื•ื™ื™ื ืกืคืฆื™ืคื™ืช, ืœืœื ืงืฉืจ ืœืžื” ืฉืžืื•ื—ืกืŸ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื. ืชื™ืขื•ื“ https://www.liquibase.org/documentation/changeset.html ืื•ืžืจ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

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

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

ืžืงืจื” 2: ื”ื’ื™ืจื” ืžื•ื ืขืช ื ืชื•ื ื™ื

ืื™ืš ืœื ืœื™ืจื•ืช ืœืขืฆืžืš ื‘ืจื’ืœ ื‘ืืžืฆืขื•ืช Liquibase

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

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

ืื™ืš ืœืคืชื•ืจ

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

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

ืžืฆื‘ 3. ื”ืฉื™ืžื•ืฉ ื‘-Liquibase ืžืชื—ื™ืœ ืœืื—ืจ ื›ื ื™ืกืชื• ืœื™ื™ืฆื•ืจ

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

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

ืื™ืš ืœืคืชื•ืจ

ื™ืฉ ื’ื ื›ืžื” ื“ืจื›ื™ื:

  • ื”ืจืืฉื•ืŸ ื•ื”ื‘ืจื•ืจ ื‘ื™ื•ืชืจ ื”ื•ื ืกืงืจื™ืคื˜ ื ืคืจื“ ืฉื™ืฉ ืœื™ื™ืฉื ื‘ืื•ืคืŸ ื™ื“ื ื™ ื‘ืขืช ืืชื—ื•ืœ ืกื‘ื™ื‘ื” ื—ื“ืฉื”.
  • ื”ืฉื ื™, ืคื—ื•ืช ื‘ืจื•ืจ, ื”ื•ื ืœื‘ืฆืข ื”ื’ื™ืจื” ืฉืœ Liquibase ืฉื ืžืฆืืช ื‘ื”ืงืฉืจ ืื—ืจ ืฉืœ Liquibase ื•ืœื™ื™ืฉื ืื•ืชื”. ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ Liquibase Context ื›ืืŸ: https://www.liquibase.org/documentation/contexts.html. ื‘ืื•ืคืŸ ื›ืœืœื™, ืžื“ื•ื‘ืจ ื‘ืžื ื’ื ื•ืŸ ืžืขื ื™ื™ืŸ ืฉื ื™ืชืŸ ืœื™ื™ืฉื ื‘ื”ืฆืœื—ื”, ืœืžืฉืœ, ืœื‘ื“ื™ืงื”.
  • ื”ืฉื‘ื™ืœ ื”ืฉืœื™ืฉื™ ืžื•ืจื›ื‘ ืžืžืกืคืจ ืฉืœื‘ื™ื. ืจืืฉื™ืช, ื™ืฉ ืœื™ืฆื•ืจ ื”ื’ื™ืจื” ืขื‘ื•ืจ ื˜ื‘ืœืื•ืช ืงื™ื™ืžื•ืช. ืื– ื™ืฉ ืœื™ื™ืฉื ืื•ืชื• ืขืœ ืกื‘ื™ื‘ื” ื›ืœืฉื”ื™ ื•ื›ืš ื™ืชืงื‘ืœ ืกื›ื•ื ื”-hash ืฉืœื•. ื”ืฉืœื‘ ื”ื‘ื ื”ื•ื ืœืืชื—ืœ ื˜ื‘ืœืื•ืช Liquibase ืจื™ืงื•ืช ื‘ืฉืจืช ื”ืœื ืจื™ืง ืฉืœื ื•, ื•ืชื•ื›ืœื• ืœื”ื›ื ื™ืก ื‘ืื•ืคืŸ ื™ื“ื ื™ ืจืฉื•ืžื” ืฉืœ ืขืจื›ืช ืฉื™ื ื•ื™ื™ื "ื›ืื™ืœื• ื”ื•ื—ืœ" ืขื ื”ืฉื™ื ื•ื™ื™ื ืฉื›ื‘ืจ ื ืžืฆืื™ื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืœื˜ื‘ืœื” ืขื ื”ื”ื™ืกื˜ื•ืจื™ื” ืฉืœ ื”ื—ืœืช ืขืจื›ื•ืช ืฉื™ื ื•ื™ื™ื. ื›ืš, ื‘ืฉืจืช ืฉื›ื‘ืจ ืงื™ื™ื, ื”ื”ื™ืกื˜ื•ืจื™ื” ืชืชื—ื™ืœ ืžื’ืจืกื” 2, ื•ื›ืœ ื”ืกื‘ื™ื‘ื•ืช ื”ื—ื“ืฉื•ืช ื™ืชื ื”ื’ื• ื‘ืื•ืคืŸ ื–ื”ื”.
    ืื™ืš ืœื ืœื™ืจื•ืช ืœืขืฆืžืš ื‘ืจื’ืœ ื‘ืืžืฆืขื•ืช Liquibase

ืชืจื—ื™ืฉ 4: ื”ื”ื’ื™ืจื•ืช ื ืขืฉื•ืช ืขืฆื•ืžื•ืช ื•ืื™ื ืŸ ื™ื›ื•ืœื•ืช ืœืขืžื•ื“ ื‘ืงืฆื‘

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

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

ืื™ืš ืœืคืชื•ืจ

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

ื‘ืžืฆื‘ ืœื ืžืงื•ื•ืŸ, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืื™ืจ ืืช ื™ื™ืฉื•ื ื”ื”ื’ื™ืจื•ืช ืœืกื‘ื™ื‘ืช ื”-CI/CD ืฉืœืš ืื• ืœื›ืชืคื™ื™ื ื”ื—ื–ืงื•ืช ืฉืœ ืžื ื”ืœื™ ื”ืžืขืจื›ืช/ื”ืžืคืจืกื™ื ืฉืœืš. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืืชื” ืฆืจื™ืš ืืช ืฉื•ืจืช ื”ืคืงื•ื“ื” Liquibase https://www.liquibase.org/documentation/command_line.html. ื‘ืžืฆื‘ ื–ื”, ื ื™ืชืŸ ื™ื”ื™ื” ืœื”ืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื” ืœืื—ืจ ื”ืฉืœืžืช ื›ืœ ื”ื”ืขื‘ืจื•ืช ื”ื“ืจื•ืฉื•ืช.

ืคืœื˜

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

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

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