ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΎΠΉ Π΄ΠΎΠΊΠ»Π°Π΄Π° АлСксандра Π‘ΠΈΠ³Π°Ρ‡Π΅Π²Π° ΠΈΠ· Inventos «ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker + Gitlab CI»

Π’Π΅, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования Π½Π° Π±Π°Π·Π΅ Docker + Gitlab CI часто ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ вопросы. Π‘ Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ? Как ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ? Как Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ?

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄ Ρ…ΠΎΡ€ΠΎΡˆ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ структурировано рассказываСт ΠΎ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстировании с использованиСм Docker ΠΈ Gitlab CI. Π‘Π°ΠΌ Π΄ΠΎΠΊΠ»Π°Π΄ 2017 Π³ΠΎΠ΄Π°. Π”ΡƒΠΌΠ°ΡŽ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ основы, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡŽ, идСю, ΠΎΠΏΡ‹Ρ‚ использования.

ΠšΠΎΠΌΡƒ интСрСсно, ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

МСня Π·ΠΎΠ²ΡƒΡ‚ АлСксандр Π‘ΠΈΠ³Π°Ρ‡Π΅Π². Π Π°Π±ΠΎΡ‚Π°ΡŽ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Inventos. РасскаТу ΠΎ своСм ΠΎΠΏΡ‹Ρ‚Π΅ использования Docker ΠΈ ΠΎ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠΎΠ½Π΅ΠΌΠ½ΠΎΠ³Ρƒ внСдряСм Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.

Π’Π΅ΠΌΠ° Π΄ΠΎΠΊΠ»Π°Π΄Π°: ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с использованиСм Docker ΠΈ Gitlab CI.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π­Ρ‚ΠΎ ΠΌΠΎΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΏΡ€ΠΎ Docker. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΌΡ‹ использовали Docker Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Development Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ сотрудников, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовали Docker Π±Ρ‹Π»ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 2-3 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ Π±Ρ‹Π» Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ ΠΎΠΏΡ‹Ρ‚ ΠΈ ΠΌΡ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΠ»ΠΈΡΡŒ дальшС. Бсылка Π½Π° наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄ΠΎΠΊΠ»Π°Π΄.

Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π² этом Π΄ΠΎΠΊΠ»Π°Π΄Π΅? ΠœΡ‹ подСлимся ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΎ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊΠΈΠ΅ Π³Ρ€Π°Π±Π»ΠΈ собрали, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠΈΠ»ΠΈ. НС Π²Π΅Π·Π΄Π΅ это Π±Ρ‹Π»ΠΎ красиво, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒΡΡ дальшС.

Наш Π΄Π΅Π²ΠΈΠ·: Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·ΠΈΡ€ΡƒΠΉ всС, Π΄ΠΎ Ρ‡Π΅Π³ΠΎ доходят наши Ρ€ΡƒΠΊΠΈ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ?

Когда Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‚ΠΎ программист являСтся ΡˆΠ°Ρ€Π΅Π½Ρ‹ΠΌ рСсурсом. Π‘Ρ‹Π²Π°ΡŽΡ‚ этапы ΠΊΠΎΠ³Π΄Π° программиста Π²Ρ‹Π΄Π΅Ρ€Π³ΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π΄Π°ΡŽΡ‚ Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ программист быстро Π²Π½ΠΈΠΊ Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ срСду, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΅ΠΌΡƒ дальшС ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Ρ€Π΅ΡˆΠ°Ρ Π·Π°Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Ссли Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с нуля, Ρ‚ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ вСдСтся ΠΌΠ°Π»ΠΎ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ староТилов. Π‘Π°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ сотрудники Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ своС Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ мСсто Π·Π° ΠΎΠ΄ΠΈΠ½-Π΄Π²Π° дня. Π§Ρ‚ΠΎΠ±Ρ‹ это ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ, ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ Docker.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° β€” это стандартизации настроСк Π² Development. По ΠΌΠΎΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ всСгда ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρƒ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ пятом случаС вводится кастомным Π΄ΠΎΠΌΠ΅Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ vasya.dev. Рядом сидит сосСд ΠŸΠ΅Ρ‚Ρ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ΅Π½ petya.dev. Они Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ сайт ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ систСмы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ это Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя.

Когда систСма разрастаСтся ΠΈ эти Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Development ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ ΠΈ пСрСписываСтся ΠΏΡƒΡ‚ΡŒ сайта.

Π’ΠΎ ΠΆΠ΅ самоС происходит с настройками Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΡ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ заморачиваСтся Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с пустым ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ root. Π£ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π½Π° этапС установки MySQL ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ оказался ΠΎΠ΄ΠΈΠ½ 123. Часто случаСтся, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… постоянно мСнялся Π² зависимости ΠΎΡ‚ commit Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ΠšΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ», ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³. Π‘Ρ‹Π»ΠΈ ухищрСния, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ выносили ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ тСстовый ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π² .gitignore ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ услоТняло процСсс старта. НуТно ΠΊΡ€ΠΎΠΌΠ΅ всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°Π΄ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΡƒ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” это Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Часто Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π•ΡΡ‚ΡŒ Legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ ΠΏΡΡ‚ΡŒ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ (ΠΎΡ‚ 2017 Π³ΠΎΠ΄Π° β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ‡. Ρ€Π΅Π΄.). Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ старта стартовали с MySQL 5.5. Π•ΡΡ‚ΡŒ ΠΈ соврСмСнныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π³Π΄Π΅ ΠΌΡ‹ стараСмся Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ соврСмСнныС вСрсии MySQL, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 5.7 ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅ (Π² 2017 Π³ΠΎΠ΄Ρƒ β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ‡. Ρ€Π΅Π΄.)

Π’ΠΎΡ‚ ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с MySQL Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ тянут Π·Π° собой зависимости. Достаточно ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ 2 Π±Π°Π·Ρ‹ вмСстС. По ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠ΅Ρ€Π΅, старыС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” это ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° локальной машинС, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ рСсурсы, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, локальноС ΠžΠ—Π£. ВсС взаимодСйствиС Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ выполняСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π² Production 3 backend-сСрвСра, Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сохраняСт Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ ΠΎΡ‚Ρ‚ΡƒΠ΄Π° nginx Π±Π΅Ρ€Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ для ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° запрос. Когда Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Production, Ρ‚ΠΎ получаСтся, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» присутствуСт Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· 3 сСрвСров.

БСйчас развиваСтся Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ микросСрвисов. Когда ΠΌΡ‹ Π΄Π΅Π»ΠΈΠΌ наши большиС прилоТСния Π½Π° ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ нСбольшиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Π­Ρ‚ΠΎ позволяСт ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ стСк Π·Π°Π΄Π°Ρ‡ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π’Π°ΠΊ ΠΆΠ΅ это позволяСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π·ΠΎΠ½Ρƒ отвСтствСнности ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

Frondend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, разрабатывая Π½Π° JS, практичСски Π½Π΅ влияСт Π½Π° Backend. Backend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, Π² нашСм случаС, Ruby on Rails ΠΈ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Frondend. ВзаимодСйствиС выполняСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ API.

Как бонус, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Docker Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурсы Π½Π° Staging. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² силу своСй спСцифики Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ настройки. ЀизичСски Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΏΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ сСрвСру ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈΡ… Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ, Π»ΠΈΠ±ΠΎ ΠΆΠ΅ Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π² зависимости ΠΎΡ‚ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π²Π»ΠΈΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ?

  • НСпосрСдствСнно сам Docker. Π’ Dockerfile ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ зависимости ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния.
  • Docker-compose β€” это связка, которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ самыС нСсколько Π½Π°ΡˆΠΈΡ… Docker ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  • GitLab ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для хранСния исходного ΠΊΠΎΠ΄Π°.
  • GitLab-CI ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для систСмной ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π”ΠΎΠΊΠ»Π°Π΄ состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй.

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ расскаТСт ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ запускали Docker Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

Вторая Ρ‡Π°ΡΡ‚ΡŒ расскаТСт ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с GitLab, ΠΊΠ°ΠΊ ΠΌΡ‹ запускаСм тСсты ΠΈ ΠΊΠ°ΠΊ ΠΌΡ‹ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π½Π° Staging.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Docker β€” эта тСхнология, которая позволяСт (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄) ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Dockerfile. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ объявляСм Ρ‡Ρ‚ΠΎ ΠΌΡ‹ наслСдуСмся ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Docker-ΠΎΠ±Ρ€Π°Π·Π° Ruby:2.3.0. Он содСрТит Π² сСбС установлСнный Ruby вСрсии 2.3. ΠœΡ‹ устанавливаСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сборки ΠΈ NodeJS. ΠžΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ создаСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /app. НазначаСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ app Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ. Π’ этот ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Gemfile ΠΈ Gemfile.lock. Π—Π°Ρ‚Π΅ΠΌ выполняСм сборку ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ этот ΠΎΠ±Ρ€Π°Π· зависимости. Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ² ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ Π½Π° внСшнСм ΠΏΠΎΡ€Ρ‚Ρƒ 3000. ПослСдная ΠΊΠΎΠΌΠ°Π½Π΄Π° β€” это ΠΊΠΎΠΌΠ°Π½Π΄Π°, которая нСпосрСдствСнно запускаСт нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Если ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ запуска ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ ΠΈ запустит ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π­Ρ‚ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ docker-compose Ρ„Π°ΠΉΠ»Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит связь Π΄Π²ΡƒΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π­Ρ‚ΠΎ нСпосрСдствСнно Π² сСрвис Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ сСрвис web. Наши web-прилоТСния Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаях Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π² качСствС backend для хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ MySQL, Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с MySQL β€” Π½ΠΎ Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³Ρƒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (PostgreSQL, Redis).

ΠœΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ источника с Docker hub ΠΎΠ±Ρ€Π°Π· MySQL 5.7.14 Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠžΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° нашС web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ собираСм с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. Он Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запуска собираСт Π½Π°ΠΌ ΠΎΠ±Ρ€Π°Π·. ПослС Ρ‡Π΅Π³ΠΎ запускаСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ здСсь выполняСм. Если ΠΌΡ‹ вСрнёмся Π½Π°Π·Π°Π΄, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° запуска Ρ‡Π΅Ρ€Π΅Π· Puma. Puma β€” сСрвис, написанный Π½Π° Ruby. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаСм ΠΌΡ‹ пСрСопрСдСляСм. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π² зависимости ΠΎΡ‚ Π½Π°ΡˆΠΈΡ… потрСбностСй ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‡.

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ описываСм Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΡ€Ρ‚ Π½Π° нашСй хост-машинС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° с 3000 Π½Π° 3000 ΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎ выполняСтся автоматичСски ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ iptables ΠΈ своСго ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСпосрСдствСнно Π·Π°Π»ΠΎΠΆΠ΅Π½ Π² Docker.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π½Π° любой доступный IP-адрСс, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 127.0.0.1 Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ внСшний IP-адрСс ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

ПослСдняя строчка Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ web зависит ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° db. Когда ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° web ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ docker-compose запустит Π½Π°ΠΌ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π£ΠΆΠ΅ ΠΏΠΎ старту Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…(Π½Π° самом Π΄Π΅Π»Π΅ β€” послС запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°! Готовности Π‘Π” это Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚) запустит Π½Π°ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, наш backend.

Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок, ΠΊΠΎΠ³Π΄Π° Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ поднята ΠΈ позволяСт ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ останавливаСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, освобоТдая этим сам рСсурсы ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π§Ρ‚ΠΎ Π½Π°ΠΌ Π΄Π°Ρ‘Ρ‚ использованиС Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. ΠœΡ‹ Ρƒ всСх Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² фиксируСм Π²Π΅Ρ€ΡΠΈΡŽ MySQL. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ расхоТдСнии вСрсий, ΠΊΠΎΠ³Π΄Π° мСняСтся синтаксис, конфигурация, Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ настройки. Π­Ρ‚ΠΎ позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ hostname для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, login, password. ΠžΡ‚Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ Π·ΠΎΠΎΠΏΠ°Ρ€ΠΊΠ° ΠΈΠΌΠ΅Π½ ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² config-Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Ρ€Π°Π½Π΅Π΅.

ΠœΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ config для Development срСды, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ³ΠΎ. MySQL ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ настроСн Π½Π° слабыС ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ ΠΎΡ‡Π΅Π½ΡŒ низкая.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Docker позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python, Ruby, NodeJS, PHP Π½ΡƒΠΆΠ½ΠΎΠΉ вСрсии. ΠœΡ‹ избавляСмся ΠΎΡ‚ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ вСрсий. РаньшС для Ruby использовали rpm-ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволял ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Π² зависимости ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΆΠ΅ это позволяСт благодаря Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΏΠ»Π°Π²Π½ΠΎ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ вмСстС зависимостями. Π£ нас Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ΄Π°. Для обновлСния вСрсии Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ старый ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Если Ρ‡Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ старый ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

ПослС сборки ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΊΠ°ΠΊ Π² Development Ρ‚Π°ΠΊ ΠΈ Π² Production Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΎ особо Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… инсталляций.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI На Frontend ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ JavaScipt ΠΈ NodeJS.

БСйчас послСдний ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρƒ нас Π½Π° ReacJS. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ запускал всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ hot-reload.

Π”Π°Π»Π΅Π΅ запускаСтся Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎ сборкС JavaScipt ΠΈ ΠΊΠΎΠ΄, собранный Π² статику, отдаСтся Ρ‡Π΅Ρ€Π΅Π· nginx экономя рСсурсы.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π—Π΄Π΅ΡΡŒ я ΠΏΡ€ΠΈΠ²Π΅Π» схСму нашСго послСднСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

КакиС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Π»ΠΈ? Π£ нас Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ систСму, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ взаимодСйствуСт ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ устройства. Они ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅. Одна ΠΈΠ· возмоТностСй ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ push-увСдомлСния Π² Π΄Π°Π½Π½ΠΎΠ΅ устройство.

Π§Ρ‚ΠΎ ΠΌΡ‹ для этого сдСлали?

ΠœΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΊΠ°ΠΊ: админская Ρ‡Π°ΡΡ‚ΡŒ Π½Π° JS, backend, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· REST-интСрфСйс ΠΏΠΎΠ΄ Ruby on Rails. Backend взаимодСйствуСт с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ гСнСрируСтся ΠΎΡ‚Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Админка с backend ΠΈ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… взаимодСйствуСт ΠΏΠΎ REST-интСрфСйсу.

Π’Π°ΠΊΠΆΠ΅ Ρƒ нас Π±Ρ‹Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Push увСдомлСния. Π”ΠΎ этого Ρƒ нас Π±Ρ‹Π» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° доставку ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

ΠœΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Ρ‚Π°ΠΊΡƒΡŽ схСму: ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° взаимодСйствуСт с Π°Π΄ΠΌΠΈΠ½ΠΊΠΎΠΉ, Π°Π΄ΠΌΠΈΠ½ΠΊΠ° взаимодСйствуСт с backend, ставится Π·Π°Π΄Π°Ρ‡Π° Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Push увСдомлСния.

Push увСдомлСния Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° NodeJS.

Бтроятся ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ дальшС ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ своСму ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ.

Π—Π΄Π΅ΡΡŒ нарисованы Π΄Π²Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ нас ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Docker ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 2 нСзависимыС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связаны с собой. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… это общая Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΡΠ΅Ρ‚ΡŒ, Π° физичСскиС Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ… Π½Π° машинС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π’ΠΎΠΆΠ΅ самоС Π½ΠΎ Π² Ρ†ΠΈΡ„Ρ€Π°Ρ…. Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

Если Ρ€Π°Π½Π΅Π΅ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΏΡ€ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ наш сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Push увСдомлСния, ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ сСрвСр. Он прСдоставляСт API. А с Π½ΠΈΠΌ взаимодСйствуСт ΡƒΠΆΠ΅ наша новая Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ использовали 4 Π²Π΅Ρ€ΡΠΈΡŽ NodeJS. БСйчас (Π² 2017 Π³ΠΎΠ΄Ρƒ β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ‡. Ρ€Π΅Π΄.) Π² свСТих Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 7 Π²Π΅Ρ€ΡΠΈΡŽ NodeJS. НСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

ΠŸΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ½ΠΎ провСсти Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ NodeJS Ρƒ сСрвиса Push ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ.

А Ссли ΠΌΡ‹ смоТСм ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎ API, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались Ρ€Π°Π½Π΅Π΅.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π§Ρ‚ΠΎ Π½Π°Π΄ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Docker? ДобавляСм Π² наш Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Dockerfile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅. Π­Ρ‚ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ backend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° создаСм Dockerfile, описываСм Π½ΡƒΠΆΠ½ΡƒΡŽ экосистСму (Python, Ruby, NodeJS). Π’ docker-compose описываСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ β€” Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½Π° Π±Π°Π·Π° Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ вСрсии, Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΌ Ρ‚Π°ΠΌ-Ρ‚ΠΎ.

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для ΠΎΡ‚Π΄Π°Ρ‡ΠΈ статики ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с nginx. ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ. Backend ΠΊΠ»Π°Π΄Π΅Ρ‚ ΠΈΡ… Π² Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ ΠΆΠ΅ смонтирован Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с nginx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π΄Π°Ρ‘Ρ‚ статику.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ nginx, mysql ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΡƒ Docker, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…Ρ€Π°Π½ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ. Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ git clone рСпозитория сСбС Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρƒ, Ρƒ Π½Π΅Π³ΠΎ получаСтся ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ для локальной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. НС Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡ€Ρ‚ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ настройки ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π”Π°Π»Π΅Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²: Π°Π΄ΠΌΠΈΠ½, ΠΈΠ½Ρ„ΠΎΡ€ΠΌ-API, push-увСдомлСния.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ это всС Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΌΡ‹ создали Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Π²Π°Π»ΠΈ dockerized-app. На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ нСсколько Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Они просто логичСски ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ β€” Π² GitLab это выглядит ΠΊΠ°ΠΊ ΠΏΠ°ΠΏΠΊΠ°, Π° Π½Π° машинС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΠ°ΠΏΠΊΠ° ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. На ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π½ΠΈΠΆΠ΅ Π»Π΅ΠΆΠ°Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒΡΡ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Ρ€Π°Π· содСрТимого dockerized-app. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ выносим сюда Docker ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ наполняСм ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ для взаимодСйствий всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π•ΡΡ‚ΡŒ README.md, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΎ описано ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΄Π²Π° docker-compose Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ступСнчато. Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ядром, Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Push-увСдомлСния, Ρ‚ΠΎ ΠΎΠ½ запускаСт просто docker-compose Ρ„Π°ΠΉΠ» ΠΈ соотвСтствСнно рСсурс экономится.

Если Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Push-увСдомлСниями, Ρ‚ΠΎ запускаСтся docker-compose.yaml ΠΈ docker-compose-push.yaml.

Π’Π°ΠΊ ΠΊΠ°ΠΊ docker-compose.yaml ΠΈ docker-compose-push.yaml Π»Π΅ΠΆΠ°Ρ‚ Π² ΠΏΠ°ΠΏΠΊΠ΅, Ρ‚ΠΎ автоматичСски создаСтся Сдиная Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

ОписаниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° сбор ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π§Ρ‚ΠΎ здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ? Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ балансСр.

Π­Ρ‚ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Docker-ΠΎΠ±Ρ€Π°Π·, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ запускаСтся nginx ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ Docker socket. ДинамичСскиС, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π³Π΅Π½ΠΈΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ nginx. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΡ‹ разносим ΠΏΠΎ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ уровня.

Для Development срСды ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄ΠΎΠΌΠ΅Π½ .dev β€” api.informer.dev. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ с Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ .dev доступСн Π½Π° локальной машинС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

Π”Π°Π»ΡŒΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ запускаСтся всС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ вмСстС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Если графичСски ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ, Ρ‚ΠΎ получаСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚ это наш Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ осущСствляСм запросы Π½Π° балансСр.

БалансСр ΠΏΠΎ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ опрСдСляСт ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ nginx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π΄Π°Π΅Ρ‚ JS Π°Π΄ΠΌΠΈΠ½ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ nginx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π΄Π°Π΅Ρ‚ API ΠΈΠ»ΠΈ ΠΆΠ΅ статичСскиС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π΄Π°ΡŽΡ‚ΡΡ nginx Π² Π²ΠΈΠ΄Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ.

На схСмС Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ ΠΈ скрыты Π·Π° прокси.

На машинС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ зная IP, Π½ΠΎ ΠΌΡ‹ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ это Π½Π΅ примСняСм. НСобходимости прямого обращСния практичСски Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Какой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅? На ΠΌΠΎΠΉ взгляд Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ docker ΠΎΠ±Ρ€Π°Π· для MySQL.

Он достаточно слоТной. Π’Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ вСрсий. Но Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» позволяСт ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ мноТСство потрСбностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² процСссС дальнСйшСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Если Π²Ρ‹ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚Π΅ врСмя ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ ΠΊΠ°ΠΊ всС это взаимодСйствуСт, Ρ‚ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ Π² ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ Ρƒ вас ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚.

Π’ hub.docker.com ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ссылки Π½Π° github.com, Π³Π΄Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ нСпосрСдствСнно сырыС Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·.

Π”Π°Π»ΡŒΡˆΠ΅ Π² этом Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ присутствуСт скрипт docker-endpoint.sh, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π·Π° Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запуска прилоТСния.

Π’Π°ΠΊΠΆΠ΅ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ присутствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ конфигурирования ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ запускС ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· docker-compose ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ пустой ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для docker Π½Π° для root Π½Π° MySQL ΠΈΠ»ΠΈ Π»ΠΈΠ±ΠΎ ΠΆΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ.

Π•ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ трСбуСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, трСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΌΡ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Dockerfile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π’Π°ΠΌ ΠΌΡ‹ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ свои Π½ΡƒΠΆΠ΄Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ просто Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π² дальнСйшСм просто ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· консоли прилоТСния. Π’ Ruby прилоТСниях Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° создания, измСнСния ΠΈ удалСния Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ выглядит конкрСтная вСрсия MySQL Π½Π° github.com. Dockerfile ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°ΠΌ происходит установка.

docker-endpoint.sh скрипт ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π°. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия ΠΏΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΠΈ всС эти дСйствия вынСсСны ΠΊΠ°ΠΊ Ρ€Π°Π· Π² скрипт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части.

Для хранСния исходных ΠΊΠΎΠ΄ΠΎΠ² ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° gitlab. Π­Ρ‚ΠΎ достаточно мощная систСма, которая ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс.

Один ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Gitlab это Gitlab CI. Он позволяСт ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ впослСдствии Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму доставки ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ запуска автоматичСского тСстирования.

Π”ΠΎΠΊΠ»Π°Π΄ ΠΏΠΎ Gitlab CI 2 https://goo.gl/uohKjI β€” Π΄ΠΎΠΊΠ»Π°Π΄ с Ruby Russia club β€” достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ½ вас заинтСрСсуСт.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

CСйчас ΠΌΡ‹ с Π²Π°ΠΌΠΈ рассмотрим Ρ‡Ρ‚ΠΎ трСбуСтся для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Gitlab CI. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Gitlab CI Π½Π°ΠΌ достаточно Π² ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΈΠΊ .gitlab-ci.yml.

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ описываСм Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ состояний Ρ‚ΠΈΠΏΠ° тСста, дСплоя.

ВыполняСм скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ нСпосрСдствСнно docker-compose сборку нашСго прилоТСния. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Ρ€Π°Π· backend.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ измСнСнию Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ тСсты.

Если скрипты Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки, Ρ‚ΠΎ соотвСтствСнно систСма ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ стадии дСплоя.

Бтадия дСплоя Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° для staging. ΠœΡ‹ Π½Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈ бСзпростойный пСрСзапуск.

ΠœΡ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ гасим всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π° ΠΏΠΎΡ‚ΠΎΠΌ всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ Π·Π°Π½ΠΎΠ²ΠΎ, собранныС Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС ΠΏΡ€ΠΈ тСстировании.

ΠŸΡ€ΠΎΠ³ΠΎΠ½ΡΠ΅ΠΌ ΡƒΠΆΠ΅ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ окруТСния ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ написаны Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

Π•ΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠ°, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Π΅Ρ‚ΠΊΠΈ мастСр.

ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‚ΠΎΠΊ Π½Π΅ выполняСтся.

Π•ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠΈ ΠΏΠΎ Π²Π΅Ρ‚ΠΊΠ°ΠΌ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π§Ρ‚ΠΎΠ±Ρ‹ дальшС это ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Gitlab Runner.

Π­Ρ‚ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° написана Π½Π° Golang. Она являСтся Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΊΠ°ΠΊ это принято Π² ΠΌΠΈΡ€Π΅ Golang, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ трСбуСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… зависимостСй.

ΠŸΡ€ΠΈ запускС ΠΌΡ‹ рСгистрируСм Gitlab Runner.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π² web-интСрфСйсС Gitlab ΠΊΠ»ΡŽΡ‡.

ΠŸΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ½ΠΈΡ†ΠΈΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

НастраиваСм Gitlab Runner Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Shell, Docker, VirtualBox, SSH)

Код Π½Π° Gitlab Runner Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ Π² зависимости ΠΎΡ‚ настройки .gitlab-ci.yml.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Как это Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ выглядит Π² Gitlab Π² web-интСрфСйсС. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ GItlab CI Ρƒ нас появляСтся Ρ„Π»Π°Π³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π² ΠΊΠ°ΠΊΠΎΠΌ состоянии находится Π±ΠΈΠ»Π΄ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ Π²ΠΎΡ‚ 4 ΠΌΠΈΠ½ΡƒΡ‚ Π½Π°Π·Π°Π΄ Π±Ρ‹Π» сдСлан ΠΊΠΎΠΌΠΌΠΈΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡˆΠ΅Π» всС тСсты ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²Ρ‹Π·Π²Π°Π».

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎ Π±ΠΈΠ»Π΄Π°ΠΌ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΈ Π΄Π²Π° состояния. БостояниС тСстирования ΠΈ состояниС дСплоя Π½Π° staging.

Если ΠΌΡ‹ ΠΊΠ»ΠΈΠΊΠ½Π΅ΠΌ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π±ΠΈΠ»Π΄, Ρ‚ΠΎ Ρ‚Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π² процСссС согласно .gitlab-ci.yml.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит история нашСго ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ. Когда тСсты ΠΏΠΎΠ΄Π°ΡŽΡ‚, Ρ‚ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ ΠΊΠΎΠ΄ Π½Π° staging Π½Π΅ обновляСтся.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

КакиС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π»ΠΈ Π½Π° staging ΠΊΠΎΠ³Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠ»ΠΈ docker? Наша систСма состоит ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Ρƒ нас Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π° Π½Π΅ всю систСму Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

Для этого Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ разнСсти всС ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°ΠΏΠΎΡ‡ΠΊΠ°ΠΌ.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ это сдСлали Ρƒ нас Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ Docker-compose создаСт для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΠΏΠΎΡ‡ΠΊΠΈ своС пространство сСти Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ сосСда.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ, ΠΌΡ‹ создали ΡΠ΅Ρ‚ΡŒ Π² Docker Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ Docker-compose прописали Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊΡƒΡŽ ΡΠ΅Ρ‚ΡŒ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стартуСт с этой сСткой Π²ΠΈΠ΄ΠΈΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… частях систСмы.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” это Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ staging ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС это выглядСло красиво ΠΈ максимально ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎ ΠΊ production Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 80 Π»ΠΈΠ±ΠΎ 443 ΠΏΠΎΡ€Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ повсСмСстно Π² WEB.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

Как ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ это? ΠœΡ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ Gitlab Runner всСм ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ.

Gitlab позволяСт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько распрСдСлСнных Gitlab Runner, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ просто ΠΏΠΎ-ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π² Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½ΠΎΠΌ порядкС Π±Ρ€Π°Ρ‚ΡŒ всС задания, ΠΏΡ€ΠΎΠ³ΠΎΠ½ΡΡ‚ΡŒ ΠΈΡ….

Π§Ρ‚ΠΎΠ±Ρ‹ Ρƒ нас Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ хауса ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡƒ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄Π½ΠΈΠΌ Gitlab Runner, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ Π½Π°ΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… справляСтся Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ΠœΡ‹ вынСсли nginx-proxy Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ скрипт запуска ΠΈ Π² Π½Π΅ΠΌ прописали сСтки всСх ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

Π£ нас ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ сСтку, Π° балансСр ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько сСток ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΏΡ€ΠΎΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дальшС.

Π£ нас запросы приходят ΠΏΠΎ Π΄ΠΎΠΌΠ΅Π½Ρƒ Π½Π° 80 ΠΏΠΎΡ€Ρ‚ ΠΈ Ρ€Π°Π·Ρ€ΡƒΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², которая обслуТиваСт этот Π΄ΠΎΠΌΠ΅Π½.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

КакиС Π΅Ρ‰Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹? Π­Ρ‚ΠΎ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root. Π­Ρ‚ΠΎ root Π½Π΅Ρ€Π°Π²Π½Ρ‹ΠΉ root хост систСмы.

Однако Ссли Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ root ΠΈ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создаСм Π² этом ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€Π°Π²Π° root.

Если Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ вошСл Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ сдСлал Ρ‚Π°ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ Ρ„Π°ΠΉΠ»Ρ‹, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅Π» ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚ΠΎ Π² свой Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„Π°ΠΉΠ», ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ доступа Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚.

Как ΠΌΠΎΠΆΠ½ΠΎ это Ρ€Π΅ΡˆΠΈΡ‚ΡŒ? МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

КакиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ?

Боздавая ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρƒ нас часто Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ ID Π³Ρ€ΡƒΠΏΠΏΡ‹ (UID) ΠΈ ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (GID).

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с ID 1000.

Π’ нашСм случаС это совпало с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ практичСски Ρƒ всСх Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ОБ Ubuntu. А Ρƒ ОБ Ubuntu ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ID 1000.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

КакиС Ρƒ нас ΠΏΠ»Π°Π½Ρ‹?

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ Docker. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ развиваСтся, докумСнтация мСняСтся. Π”Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Π΄Π²Π°-Ρ‚Ρ€ΠΈ мСсяца Π½Π°Π·Π°Π΄, ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΈΡ…ΠΎΠ½ΡŒΠΊΡƒ ΡƒΡΡ‚Π°Ρ€Π΅Π²Π°ΡŽΡ‚.

Π§Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π»ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΆΠ΅ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ стандартными срСдствами.

Π’Π°ΠΊ хочСтся ΠΏΡ€ΠΎΠΉΡ‚ΠΈ дальшС ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ нСпосрСдствСнно ΠΊ оркСстрации.

Один ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² это встроСнный Π² Docker ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Docker Swarm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСтся ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. Π₯очСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ Π½Π° Π±Π°Π·Π΅ тСхнология Docker Swarm.

ΠŸΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ‚ нСудобство Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π»ΠΎΠ³Π°ΠΌΠΈ. БСйчас Π»ΠΎΠ³ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅. Они разбросаны ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ. Одна ΠΈΠ· Π·Π°Π΄Π°Ρ‡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ доступ ΠΊ Π»ΠΎΠ³Π°ΠΌ Ρ‡Π΅Ρ€Π΅Π· web-интСрфСйс.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker ΠΈ Gitlab CI

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ