Как Π½Π΅ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Liquibase

Никогда Π½Π΅ Π±Ρ‹Π»ΠΎ, ΠΈ Π²ΠΎΡ‚ ΠΎΠΏΡΡ‚ΡŒ!

На ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Liquibase с самого Π½Π°Ρ‡Π°Π»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. Как оказалось, Π½Π΅ всС ΠΌΠΎΠ»ΠΎΠ΄Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡƒΠΌΠ΅ΡŽΡ‚ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π― ΠΏΡ€ΠΎΠ²Ρ‘Π» Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π²ΠΎΡ€ΠΊΡˆΠΎΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅ΡˆΠΈΠ» ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΡŽ.

Π‘Ρ‚Π°Ρ‚ΡŒΡ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ совСты ΠΈ описаниС Ρ‚Ρ€Π΅Ρ… самых явных Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ, работая с инструмСнтами ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ рСляционных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Π² частности Liquibase. Рассчитана Π½Π° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² уровня Junior ΠΈ Middle, для Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсна для структуризации ΠΈ повторСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ, скорСС всСго, ΡƒΠΆΠ΅ извСстно.

Как Π½Π΅ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Liquibase

Liquibase ΠΈ Flyway β€” основныС ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ контроля вСрсий рСляционных структур Π² ΠΌΠΈΡ€Π΅ Java. ΠŸΠ΅Ρ€Π²Π°Ρ являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ бСсплатной, Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‡Π°Ρ‰Π΅ выбираСтся для использования ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½Π°, поэтому ΠΈΠΌΠ΅Π½Π½ΠΎ Liquibase Π²Ρ‹Π±Ρ€Π°Π½ Π³Π΅Ρ€ΠΎΠ΅ΠΌ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· описанных ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π² зависимости ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ вашСго прилоТСния.

ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ рСляционных структур – это Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎ появившийся способ Π±ΠΎΡ€ΡŒΠ±Ρ‹ со слабой Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ рСляционных Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ эпоху ΠΌΠΎΠ΄Ρ‹ Π½Π° ООП ΡΡ‚ΠΈΠ»ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π” ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π», Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· опишСм схСму ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π΅Ρ‘ большС Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ. Но Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ всСгда Ρ‚Π°ΠΊΠΎΠ²Π°, Ρ‡Ρ‚ΠΎ всё мСняСтся, ΠΈ измСнСния Π² структурС Ρ‚Π°Π±Π»ΠΈΡ† Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ достаточно часто. ЕстСствСнно, процСсс сам ΠΏΠΎ сСбС Π±Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½Ρ‹ΠΉ ΠΈ нСприятный.

НС Π±ΡƒΠ΄Ρƒ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² описаниС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ инструкции ΠΏΠΎ добавлСнию Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π° эту Ρ‚Π΅ΠΌΡƒ Π±Ρ‹Π»ΠΎ написано достаточно статСй:

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° отличная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° Ρ‚Π΅ΠΌΡƒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… совСтов:

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹

Π₯ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своими совСтами ΠΈ коммСнтариями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ‚, ΠΊΡ€ΠΎΠ²ΡŒ ΠΈ боль Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.

1. ΠŸΠ΅Ρ€Π΅Π΄ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ слСдуСт ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ Π»ΡƒΡ‡ΡˆΠΈΡ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ Π½Π° сайтС Liquibase

Π’Π°ΠΌ описаны простыС, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ Π²Π°ΠΌ Тизнь. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, нСструктурный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ чСндТсСтами Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅ ΠΈ ΠΏΠΎΠ»ΠΎΠΌΠ°Π½Π½Ρ‹ΠΌ миграциям. Если Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ зависящиС Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° измСнСния структуры Π‘Π” ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ сСрвисов Π½Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ большая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ красным тСстам ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠΌΡƒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ использованию Liquibase Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС содСрТат ΠΏΡƒΠ½ΠΊΡ‚ ΠΏΡ€ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ rollback скриптов вмСстС с основными скриптами ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ. Ну ΠΈ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ https://habr.com/ru/post/178665/ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, ΠΊΠ°ΡΠ°ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ ΠΈ rollback ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°.

2. Если Π½Π°Ρ‡Π°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСдства ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ – Π½Π΅ допускайтС ΠΌΠ°Π½ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… исправлСний Π² структурС Π±Π°Π·Ρ‹

Как говорится: «Один Ρ€Π°Π· Persil β€” всСгда PersilΒ». Если Π±Π°Π·Π° вашСго прилоТСния Π½Π°Ρ‡Π°Π»Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ срСдствами Liquibase β€” Π»ΡŽΠ±Ρ‹Π΅ Ρ€ΡƒΡ‡Π½Ρ‹Π΅ измСнСния ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ приводят ΠΊ нСконсистСнтному ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ, ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ довСрия чСндТсСтам становится Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ риски β€” нСсколько ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… часов Π½Π° восстановлСниС Π±Π°Π·Ρ‹, ΠΏΡ€ΠΈ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ раскладС β€” ΡƒΠ±ΠΈΡ‚Ρ‹ΠΉ сСрвСр. Если Π² вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π΅ΡΡ‚ΡŒ DBA Architect «старой Π·Π°ΠΊΠ°Π»ΠΊΠΈΒ», Ρ‚Π΅Ρ€ΠΏΠ΅Π»ΠΈΠ²ΠΎ ΠΈ Π²Π΄ΡƒΠΌΡ‡ΠΈΠ²ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ Π΅ΠΌΡƒ, ΠΊΠ°ΠΊ всё Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ»ΠΎΡ…ΠΎ, Ссли ΠΎΠ½ просто ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°Π·Ρƒ ΠΏΠΎ своСму Ρ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΡŽ ΠΈΠ· условного SQL Developer.

3. Если чСндТсСт ΡƒΠΆΠ΅ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡˆΠ΅Π½ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ рСдактирования

Если Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сдСлал pull ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» чСндТсСт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ впослСдствии Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½, β€” ΠΎΠ½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ помянСт вас Π΄ΠΎΠ±Ρ€Ρ‹ΠΌ словом, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ стартС прилоТСния. Если Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ чСндТсСта ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΎΡ‚Π΅Ρ‡Ρ‘Ρ‚ Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ β€” придётся ΠΈΠ΄Ρ‚ΠΈ скользкой Π΄ΠΎΡ€ΠΎΠΆΠΊΠΎΠΉ хотфиксов. Π‘ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ упираСтся Π² Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎ Ρ…Π΅Ρˆ-суммС β€” основной ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Liquibase. ΠŸΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° чСндТсСта мСняСтся Ρ…Π΅Ρˆ-сумма. Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ чСндТсСтов Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° присутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ всю Π±Π°Π·Ρƒ с нуля. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ SQL ΠΈΠ»ΠΈ XML ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Тизнь, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ситуация, ΠΊΠΎΠ³Π΄Π° Π½Π° стартС прилоТСния схСма исходной Π‘Π” ΡΠΎΠ³Π»Π°ΡΠΎΠ²Ρ‹Π²Π°Π»Π°ΡΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

4. ИмСй ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ бэкапы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ

Π’ΡƒΡ‚, Π΄ΡƒΠΌΠ°ΡŽ, всё понятно. Π’ случаС Ссли Π²Π΄Ρ€ΡƒΠ³ миграция ΠΏΡ€ΠΎΡˆΠ»Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, всё ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π°Π·Π°Π΄. Π’ Liquibase Π΅ΡΡ‚ΡŒ инструмСнт ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½ΠΎ скрипты для ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΏΠΈΡˆΠ΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ сам Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΈ Π² Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΊΠ°ΠΊ ΠΈ Π² скриптах основного чСндТсСта. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ с бэкапами ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² любом случаС.

5. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ бэкапы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ

Если это Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°ΠΌ ΠΈ privacy, Π² Π±Π°Π·Π΅ Π½Π΅Ρ‚ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΎΠ½Π° Π½Π΅ вСсит ΠΊΠ°ΠΊ Π΄Π²Π° солнца β€” ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΠΆΠΈΠ²Ρ‹Ρ… сСрвСрах ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ сработаСт Π½Π° машинС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ 100% ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.

6. ΠžΠ±Ρ‰Π°ΠΉΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅

Π’ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всС Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π·Π½Π°ΡŽΡ‚, ΠΊΡ‚ΠΎ Ρ‡Π΅ΠΌ занят. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ часто это Π½Π΅ Ρ‚Π°ΠΊ, поэтому, Ссли Π² Ρ€Π°ΠΌΠΊΠ°Ρ… своСй Π·Π°Π΄Π°Ρ‡ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡˆΡŒ измСнСния Π² структурС Π‘Π”, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΠΎΠ²Π΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ± этом всю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ измСнСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ β€” Π²Π°ΠΌ слСдуСт Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π‘ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ стоит ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° стартС. Много ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с чСндТсСтами ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒΡΡ Π½Π° этапС code review.

7. Π”ΡƒΠΌΠ°ΠΉ, Ρ‡Ρ‚ΠΎ дСлаСшь!

Казалось Π±Ρ‹, самоочСвидный совСт, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΉ ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ ситуациям. Однако ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Ссли Π±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΅Ρ‰Ρ‘ Ρ€Π°Π· ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π», Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ. Π Π°Π±ΠΎΡ‚Π° с миграциями всСгда Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ внимания ΠΈ аккуратности.

Π›ΠΎΠ²ΡƒΡˆΠΊΠΈ

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ, Ссли Π½Π΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ совСтам Π²Ρ‹ΡˆΠ΅, ΠΈ Ρ‡Ρ‚ΠΎ, собствСнно, Π΄Π΅Π»Π°Ρ‚ΡŒ-Ρ‚ΠΎ?

Битуация 1. Π”Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ чСндТсСты

Как Π½Π΅ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Liquibase
Вася ΠΈ ΠŸΠ΅Ρ‚Ρ хотят ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ чСндТсСт вСрсии 4, Π½Π΅ зная Π΄Ρ€ΡƒΠ³ ΠΎ Π΄Ρ€ΡƒΠ³Π΅. Они ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π»ΠΈ измСнСния Π² структурС Π‘Π”, ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚ΠΈΠ»ΠΈ pull request, с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ чСндТсСта. Π”Π°Π»Π΅Π΅ прСдлагаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ дСйствий:

Как Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ

  1. Каким-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ΄Ρ‚ΠΈ ΠΈΡ… чСндТсСты, допустим, ΠŸΠ΅Ρ‚ΠΈΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ.
  2. ΠšΡ‚ΠΎ-Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π»ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊ сСбС ΠΈ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ чСндТсСт Васи вСрсиСй 5. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано Ρ‡Π΅Ρ€Π΅Π· Cherry Pick ΠΈΠ»ΠΈ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ€Π΄ΠΆ.
  3. ПослС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ слСдуСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… дСйствий.
    На самом Π΄Π΅Π»Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Liquibase позволят ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π΄Π²Π° чСндТсСта вСрсии 4, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ всё ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ вас просто Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²Π° измСнСния вСрсии 4 с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ названиями. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ впослСдствии Π² вСрсиях Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… становится ΠΎΡ‡Π΅Π½ΡŒ слоТно ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Liquibase, ΠΊΠ°ΠΊ Π΄ΠΎΠΌΠ° Ρ…ΠΎΠ±Π±ΠΈΡ‚ΠΎΠ², Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² сСбС ΠΌΠ½ΠΎΠ³ΠΎ сСкрСтов. Одним ΠΈΠ· Π½ΠΈΡ… являСтся ΠΊΠ»ΡŽΡ‡ validCheckSum, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ появился с вСрсии 1.7 ΠΈ позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ…Π΅Ρˆ-суммы для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ чСндТсСта Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ хранится Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ДокумСнтация https://www.liquibase.org/documentation/changeset.html Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Add a checksum that is considered valid for this changeSet, regardless of what is stored in the database. Used primarily when you need to change a changeSet and don’t want errors thrown on databases on which it has already run (not a recommended procedure)

Π”Π°-Π΄Π°, такая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π½Π΅ рСкомСндуСтся. Но ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ свСтлый ΠΌΠ°Π³ Π²Π»Π°Π΄Π΅Π΅Ρ‚ ΠΈ Ρ‚Π΅ΠΌΠ½Ρ‹ΠΌΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°ΠΌΠΈ

Битуация 2. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ, которая зависит ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…

Как Π½Π΅ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Liquibase

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ вас Π½Π΅Ρ‚ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ Π±Π°Π· с ΠΆΠΈΠ²Ρ‹Ρ… сСрвСров. ΠŸΠ΅Ρ‚Ρ создал чСндТсСт, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» Π΅Π³ΠΎ локально ΠΈ с ΠΏΠΎΠ»Π½ΠΎΠΉ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ своСй ΠΏΡ€Π°Π²ΠΎΡ‚Ρ‹ сдСлал pull request Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏ. Π›ΠΈΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° всякий случай ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠ», ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» Π»ΠΈ Π΅Π³ΠΎ ΠŸΠ΅Ρ‚Ρ, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Π»ΠΈΠ». Но Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π½Π° Π΄Π΅Π²Π΅Π»ΠΎΠΏ сСрвСрС ΡƒΠΏΠ°Π»ΠΎ.

На самом Π΄Π΅Π»Π΅ Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ ΠΎΡ‚ этого Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ застрахован. Π­Ρ‚ΠΎ происходит Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ структуры Ρ‚Π°Π±Π»ΠΈΡ† ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ завязаны Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π‘Π”. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли Π±Π°Π·Π° ΠŸΠ΅Ρ‚ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСстовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ кСйсы. НапримСр, ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ выясняСтся, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ записи Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΏΠΎ Foreign Key, связанныС с записями Π² удаляСмой. Или ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ выясняСтся, Ρ‡Ρ‚ΠΎ Π½Π΅ 100% Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ.

Как Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ

  • ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ вмСстС с ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π²ΠΈΠ΄. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ пСрСноса Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½ΠΎΠ²Ρ‹Π΅ структуры ΡƒΠΆΠ΅ послС примСнСния ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ, Π½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΠΈ Π΄ΠΎ, Π² частных случаях. Π’Π°ΠΊΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ всСгда доступСн, ΠΈΠ±ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΆΠΈΠ²Ρ‹Ρ… сСрвСрах ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ опасно ΠΈ Π΄Π°ΠΆΠ΅ Π³ΡƒΠ±ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.
  • Π”Ρ€ΡƒΠ³ΠΎΠΉ слоТный ΠΏΡƒΡ‚ΡŒ β€” ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ чСндТсСт. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС Π‘Π”, Π³Π΄Π΅ ΠΎΠ½ Π² ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡΡ Π²ΠΈΠ΄Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½, придётся Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ вся бэкСнд-ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π° Π±ΡƒΠ΄Π΅Ρ‚ локально Π½Π°ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ Π‘Π” с нуля.
  • И самый ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ β€” пСрСнос ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° environment Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° с воссозданиСм Ρ‚ΠΎΠΉ ΠΆΠ΅ ситуации ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ чСндТсСта, Π΄ΠΎ сломанного, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.
    Как Π½Π΅ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Liquibase

Π’ Ρ†Π΅Π»ΠΎΠΌ, Ρ‡Π΅ΠΌ большС Π±Π°Π·Π° ΠΏΠΎ составу Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Π±Π°Π·Ρƒ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ сСрвСра, Ρ‚Π΅ΠΌ мСньшС шанс, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с миграциями ΠΏΡ€ΠΎΡ‚Π΅ΠΊΡƒΡ‚ Π΄Π°Π»Π΅ΠΊΠΎ. И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ чСндТсСт Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, стоит нСсколько Ρ€Π°Π· ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π½Π΅ сломаСт Π»ΠΈ ΠΎΠ½ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ.

Битуация 3. Liquibase Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡƒΠΆΠ΅ послС Π²Ρ‹Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‚ΠΈΠΌΠ»ΠΈΠ΄ попросил ΠŸΠ΅Ρ‚ΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Liquibase, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΡƒΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ ΠΈ имССтся ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ структура Π±Π°Π·Ρ‹.

БоотвСтствСнно, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° Π»ΡŽΠ±Ρ‹Ρ… Π½ΠΎΠ²Ρ‹Ρ… сСрвСрах ΠΈΠ»ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΡΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ с нуля, Π° ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ срСда Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Π² консистСнтном состоянии, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ чСндТсСты.

Как Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ

Π’ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ имССтся нСсколько ΠΏΡƒΡ‚Π΅ΠΉ:

  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ самый ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ β€” ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ окруТСния.
  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ, ΠΈΠΌΠ΅Ρ‚ΡŒ Liquibase ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ, которая находится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Liquibase Context, ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Ρ‘. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ Liquibase Context ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚: https://www.liquibase.org/documentation/contexts.html. Π’ Ρ†Π΅Π»ΠΎΠΌ это интСрСсный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для тСстирования.
  • Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… шагов. Π‘Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ создана миграция для ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚Π°Π±Π»ΠΈΡ†. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ environment’С ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° Π΅Ρ‘ Ρ…ΡΡˆ-сумма. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом слСдуСт ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° нашСм Π½Π΅ пустом сСрвСрС пустыС Liquibase Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с историСй примСнСния чСндТсСтов ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ запись ΠΎ Β«ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΌΒ» чСндТсСтС с ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈΡΡ Π² Π±Π°Π·Π΅ измСнСниями. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π° ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ сСрвСрС отсчёт истории ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ с вСрсии 2, Π° всС Π½ΠΎΠ²Ρ‹Π΅ environments Π±ΡƒΠ΄ΡƒΡ‚ вСсти сСбя ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ.
    Как Π½Π΅ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Liquibase

Битуация 4. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ становятся ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ ΡƒΡΠΏΠ΅Π²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ

Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сСрвиса, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Liquibase ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ внСшняя Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΈ всС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ стартС прилоТСния. Однако со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‚ΠΊΠ½ΡƒΡ‚ΡŒΡΡ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ кСйсы:

  • ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ становятся ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя.
  • ΠŸΠΎΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π² распрСдСлСнных срСдах, допустим, Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… инстансах сСрвСров Π‘Π” ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
    Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС слишком Π΄ΠΎΠ»Π³ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρƒ ΠΏΡ€ΠΈ стартС прилоТСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ инстанса прилоТСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ сСрвСры окаТутся Π² Π½Π΅ синхронном состоянии.

Как Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΡƒΠΆΠ΅ большой, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ»Π΅Ρ‚Π½ΠΈΠΉ, ΠΈ Liquibase Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ внСшний инструмСнт. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Liquibase ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собираСтся Π² jar Ρ„Π°ΠΉΠ», ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎ.

Π’ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ Π½Π° Π²Π°ΡˆΡƒ CI/CD срСду ΠΈΠ»ΠΈ Π½Π° ΠΊΡ€Π΅ΠΏΠΊΠΈΠ΅ ΠΏΠ»Π΅Ρ‡ΠΈ Π²Π°ΡˆΠΈΡ… систСмных администраторовспСциалистов ΠΏΠΎ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΡŽ. Для этого понадобится командная строка Liquibase https://www.liquibase.org/documentation/command_line.html. Π’ Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ запуск прилоТСния ΡƒΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹.

Π’Ρ‹Π²ΠΎΠ΄

На самом Π΄Π΅Π»Π΅ Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с миграциями Π‘Π” ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ творчСского ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт, Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· этих Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ удастся ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π²ΠΈΠ΄Π°Ρ… ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ со всСми пСрСчислСнными ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Π±Ρ‹Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΌΠΎΠΈΡ… косяков. Π’ основном это происходит, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎ Π½Π΅Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° – ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ прСступного нСумСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструмСнт.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com