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

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ прСписа Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° Π½Π° ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡŠΡ€ Π‘ΠΈΠ³Π°Ρ‡Π΅Π² ΠΎΡ‚ Inventos β€žΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС с Docker + Gitlab CIβ€œ

Π’Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚Π΅ΠΏΡŠΡ€Π²Π° Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ процСса Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Docker + Gitlab CI, чСсто Π·Π°Π΄Π°Π²Π°Ρ‚ основни Π²ΡŠΠΏΡ€ΠΎΡΠΈ. ΠžΡ‚ΠΊΡŠΠ΄Π΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°? Как Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅? Как Π΄Π° тСствам?

Π’ΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ Π΅ Π΄ΠΎΠ±ΡŠΡ€, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈ ΠΏΠΎ структуриран Π½Π°Ρ‡ΠΈΠ½ Π·Π° процСса Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Docker ΠΈ Gitlab CI. Бамият Π΄ΠΎΠΊΠ»Π°Π΄ Π΅ ΠΎΡ‚ 2017 Π³. Мисля, Ρ‡Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ основитС, мСтодологията, идСята, ΠΎΠΏΠΈΡ‚Π° Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.

На ΠΊΠΎΠ³ΠΎ ΠΌΡƒ ΠΏΡƒΠΊΠ°, моля ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΊΠ°Ρ‚Π°.

Казвам сС ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡŠΡ€ Π‘ΠΈΠ³Π°Ρ‡Π΅Π². Работя Π·Π° Inventos. Π©Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° Π·Π° моя ΠΎΠΏΠΈΡ‚ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Docker ΠΈ ΠΊΠ°ΠΊ постСпСнно Π³ΠΎ внСдрявамС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π² компанията.

Π’Π΅ΠΌΠ° Π½Π° прСзСнтацията: ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Docker ΠΈ Gitlab CI.

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

Π’ΠΎΠ²Π° Π΅ вторият ΠΌΠΈ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ Π·Π° Docker. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄ Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ само Docker Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° машини Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ. Броят Π½Π° слуТитСлитС, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…Π° Docker бСшС ΠΎΠΊΠΎΠ»ΠΎ 2-3 Π΄ΡƒΡˆΠΈ. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ° ΠΎΠΏΠΈΡ‚ ΠΈ сС ΠΏΡ€ΠΈΠ΄Π²ΠΈΠΆΠΈΡ…ΠΌΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π½Π°ΠΏΡ€Π΅Π΄. Π›ΠΈΠ½ΠΊ към нашия ΠΏΡŠΡ€Π²ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄.

Какво Ρ‰Π΅ бъдС Π² Ρ‚ΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄? Π©Π΅ сподСлим нашия ΠΎΠΏΠΈΡ‚ какъв Ρ€Π΅ΠΉΠΊ смС ΡΡŠΠ±Ρ€Π°Π»ΠΈ, ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ смС Ρ€Π΅ΡˆΠΈΠ»ΠΈ. НС навсякъдС бСшС красиво, Π½ΠΎ позволявашС Π΄Π° сС ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π½Π°ΠΏΡ€Π΅Π΄.

ΠΠ°ΡˆΠ΅Ρ‚ΠΎ ΠΌΠΎΡ‚ΠΎ Π΅: Π·Π°ΠΊΠ°Ρ‡Π΅Ρ‚Π΅ всичко, Π΄ΠΎ ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сС Π΄ΠΎΠΊΠΎΠΏΠ°ΠΌΠ΅.

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

Какви ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Ρ€Π΅ΡˆΠ°Π²Π°ΠΌΠ΅?

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π² Π΅Π΄Π½Π° компания ΠΈΠΌΠ° няколко Π΅ΠΊΠΈΠΏΠ°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡΡ‚ΡŠΡ‚ Π΅ сподСлСн рСсурс. Има Π΅Ρ‚Π°ΠΏΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡΡ‚ΡŠΡ‚ Π΅ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π΅ Π΄Π°Π΄Π΅Π½ Π·Π° извСстно Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡΡ‚ΡŠΡ‚ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π±ΡŠΡ€Π·ΠΎ, Ρ‚ΠΎΠΉ трябва Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ изходния ΠΊΠΎΠ΄ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π΄Π° стартира срСдата възмоТно Π½Π°ΠΉ-скоро, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΌΡƒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Ρ€Π΅ΡˆΠ°Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

ОбикновСно, Π°ΠΊΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ докумСнтация Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡΡ‚Π° Π·Π° настройката Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° само Π·Π° стари Ρ…ΠΎΡ€Π°. Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ сами ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π½ΠΎΡ‚ΠΎ си място Π·Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π΄Π½ΠΈ. Π—Π° Π΄Π° ускорим Ρ‚ΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ Docker.

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π΅ стандартизиранСто Π½Π° настройкитС Π² Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π‘ΠΏΠΎΡ€Π΅Π΄ моя ΠΎΠΏΠΈΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΠΎΠ΅ΠΌΠ°Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π°Ρ‚Π°. Π’ΡŠΠ² всСки ΠΏΠ΅Ρ‚ΠΈ случай сС въвСТда потрСбитСлски Π΄ΠΎΠΌΠ΅ΠΉΠ½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ vasya.dev. Π”ΠΎ Π½Π΅Π³ΠΎ сСди ΡΡŠΡΠ΅Π΄ΠΊΠ°Ρ‚Π° ΠΌΡƒ ΠŸΠ΅Ρ‚Ρ, Ρ‡ΠΈΠΉΡ‚ΠΎ Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π΅ petya.dev. Π’Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ уСбсайт ΠΈΠ»ΠΈ някакъв ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ систСмата, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½.

ΠšΠΎΠ³Π°Ρ‚ΠΎ систСмата растС ΠΈ Ρ‚Π΅Π·ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° Π²Π»ΠΈΠ·Π°Ρ‚ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, възниква ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π½Π° срСда Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΏΡŠΡ‚ΡΡ‚ Π½Π° сайта сС прСнаписва.

Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ сС случва ΠΈ с настройкитС Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Някой Π½Π΅ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° със сигурността ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΏΡ€Π°Π·Π½Π° root ΠΏΠ°Ρ€ΠΎΠ»Π°. На Π΅Ρ‚Π°ΠΏΠ° Π½Π° инсталиранС MySQL поиска ΠΎΡ‚ някого ΠΏΠ°Ρ€ΠΎΠ»Π° ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° сС ΠΎΠΊΠ°Π·Π° 123. ЧСсто сС случва конфигурацията Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΄Π° сС промСня постоянно Π² зависимост ΠΎΡ‚ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Някой ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°, някой Π½Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π° конфигурацията. ИмашС Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π²Π°Π΄ΠΈΡ…ΠΌΠ΅ някаква тСстова конфигурация .gitignore ΠΈ всСки Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° инсталира Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ. НСобходимо Π΅, Π½Π°Ρ€Π΅Π΄ с Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Ρ‰Π°, Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Π·Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Врябва Π΄Π° сС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Π΄Π° сС въвСдС ΠΏΠ°Ρ€ΠΎΠ»Π°, Π΄Π° сС рСгистрира ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», Π΄Π° сС създадС Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ Ρ‚.Π½.

Π”Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ са Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ вСрсии Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅. ЧСсто сС случва Π΅Π΄ΠΈΠ½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. Има ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Legacy, ΠΊΠΎΠΉΡ‚ΠΎ стартира ΠΏΡ€Π΅Π΄ΠΈ ΠΏΠ΅Ρ‚ Π³ΠΎΠ΄ΠΈΠ½ΠΈ (ΠΎΡ‚ 2017 Π³. – Π±Π΅Π». Ρ€Π΅Π΄.). По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° стартиранСто Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ с MySQL 5.5. Има ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°ΠΌΠ΅ Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ ΠΏΠΎ-ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈ вСрсии Π½Π° MySQL, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 5.7 ΠΈΠ»ΠΈ ΠΏΠΎ-стари (ΠΏΡ€Π΅Π· 2017 Π³. - Π±Π΅Π». Ρ€Π΅Π΄.)

ВсСки, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ с MySQL, Π·Π½Π°Π΅, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ носят зависимости със сСбС си. Доста Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄Π° управляватС 2 Π±Π°Π·ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. ПонС старитС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ са ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ към Π½ΠΎΠ²Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° ΠΎΡ‚ своя страна създава няколко ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

БлСдващият ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π° машина, Ρ‚ΠΎΠΉ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ рСсурси, Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π»ΠΎΠΊΠ°Π»Π½Π° RAM. Цялото взаимодСйствиС ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π΅Π΄Π½Π° машина. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ backend ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π² Production 3 ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ записва Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² Π³Π»Π°Π²Π½Π°Ρ‚Π° дирСктория ΠΈ ΠΎΡ‚Ρ‚Π°ΠΌ nginx Π²Π·Π΅ΠΌΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π·Π° Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° заявката. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π°ΠΊΡŠΠ² ΠΊΠΎΠ΄ ΠΏΠΎΠΏΠ°Π΄Π½Π΅ Π² Production, сС ΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Ρ„Π°ΠΉΠ»ΡŠΡ‚ ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ 3-Ρ‚Π΅ ΡΡŠΡ€Π²ΡŠΡ€Π°.

ΠŸΠΎΡΠΎΠΊΠ°Ρ‚Π° Π½Π° микроуслугитС сС Ρ€Π°Π·Π²ΠΈΠ²Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ раздСлямС Π½Π°ΡˆΠΈΡ‚Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈ прилоТСния Π½Π° някои ΠΌΠ°Π»ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ взаимодСйстват ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си. Π’ΠΎΠ²Π° Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π° Π²ΠΈ позволява Π΄Π° сподСлятС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΈ отговорноститС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅.

Frondend-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ Π²ΡŠΡ€Ρ…Ρƒ JS, няма ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ влияниС Π²ΡŠΡ€Ρ…Ρƒ Backend. Π‘Π΅ΠΊΠ΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΎΡ‚ своя страна Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°, Π² нашия случай, Ruby on Rails ΠΈ Π½Π΅ ΠΏΡ€Π΅Ρ‡ΠΈ Π½Π° Frondend. ВзаимодСйствиСто сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° API.

ΠšΠ°Ρ‚ΠΎ бонус, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Docker успяхмС Π΄Π° Ρ€Π΅Ρ†ΠΈΠΊΠ»ΠΈΡ€Π°ΠΌΠ΅ рСсурси Π½Π° Staging. ВсСки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΠΎΡ€Π°Π΄ΠΈ своята спСцифика, изисквашС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ настройки. ЀизичСски бСшС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈ ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ, ΠΈΠ»ΠΈ Π΄Π° сС сподСли някакъв Π²ΠΈΠ΄ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° срСда ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ…Π°, Π² зависимост ΠΎΡ‚ вСрсията Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅, Π΄Π° си влияят Π΅Π΄ΠΈΠ½ Π½Π° Π΄Ρ€ΡƒΠ³.

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

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈ. Какво ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅?

  • Бамият Π΄ΠΎΠΊΠ΅Ρ€. Dockerfile описва зависимоститС Π½Π° Π΅Π΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • Docker-compose Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ обСдинява няколко ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ Docker прилоТСния.
  • ИзползвамС GitLab Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° изходния ΠΊΠΎΠ΄.
  • ИзползвамС GitLab-CI Π·Π° систСмна интСграция.

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

Π”ΠΎΠΊΠ»Π°Π΄ΡŠΡ‚ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΄Π²Π΅ части.

ΠŸΡŠΡ€Π²Π°Ρ‚Π° част Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Docker Π΅ стартиран Π½Π° машини Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ.

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° част Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° взаимодСйствамС с GitLab, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ тСстовС ΠΈ ΠΊΠ°ΠΊ внСдрявамС Π² Staging.

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

Docker Π΅ тСхнология, която позволява (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄) Π΄Π° сС ΠΎΠΏΠΈΡˆΠ°Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ Dockerfile. Π’ΡƒΠΊ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ наслСдявамС ΠΎΡ‚ официалния Ruby:2.3.0 Docker ΠΎΠ±Ρ€Π°Π·. Π’ΠΎΠΉ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° инсталирана Ruby вСрсия 2.3. НиС инсталирамС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‰ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ NodeJS. ОписвамС, Ρ‡Π΅ създавамС дирСктория /app. Π—Π°Π΄Π°ΠΉΡ‚Π΅ дирСкторията Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½Π° дирСктория. Π’ Ρ‚Π°Π·ΠΈ дирСктория поставямС нСобходимия ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Gemfile ΠΈ Gemfile.lock. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ инсталират Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° зависимост. ΠŸΠΎΡΠΎΡ‡Π²Π°ΠΌΠ΅, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Ρ‰Π΅ бъдС Π³ΠΎΡ‚ΠΎΠ² Π΄Π° ΡΠ»ΡƒΡˆΠ° Π½Π° външСн ΠΏΠΎΡ€Ρ‚ 3000. ΠŸΠΎΡΠ»Π΅Π΄Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, която Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ стартира Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Ако изпълним ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° стартиранС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π° Π΄Π° стартира ΠΈ изпълни посочСната ΠΊΠΎΠΌΠ°Π½Π΄Π°.

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

Π’ΠΎΠ²Π° Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π΄ΠΎΠΊΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€Π°Π½ Ρ„Π°ΠΉΠ». Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅, Ρ‡Π΅ ΠΈΠΌΠ° Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ΠΎΠ²Π° Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² услугата Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡƒΠ΅Π± услугата. ΠΠ°ΡˆΠΈΡ‚Π΅ ΡƒΠ΅Π± прилоТСния Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ случаи изискват някакъв Π²ΠΈΠ΄ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ. Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ MySQL, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ Π΅ с MySQL - Π½ΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ Π½ΠΈ ΠΏΡ€Π΅Ρ‡ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ (PostgreSQL, Redis).

Π’Π·ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΡ‚ официалния ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΎΡ‚ Docker hub ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° MySQL 5.7.14 Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. НиС ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ отговаря Π·Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° дирСктория. Π’ΠΎΠΉ ΡΡŠΠ±ΠΈΡ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° нас ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ стартиранС. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° изпълнява ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, която изпълнявамС Ρ‚ΡƒΠΊ. Ако сС Π²ΡŠΡ€Π½Π΅ΠΌ Π½Π°Π·Π°Π΄, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° стартиранС Ρ‡Ρ€Π΅Π· Puma Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π°. Puma Π΅ услуга, написана Π½Π° Ruby. Π’ΡŠΠ² втория случай отмСнямС. Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° Π² зависимост ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ.

НиС ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° описвамС, Ρ‡Π΅ трябва Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΈΠΌ ΠΏΠΎΡ€Ρ‚ Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° хост машина Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΎΡ‚ 3000 Π½Π° 3000 Π½Π° ΠΏΠΎΡ€Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° iptables ΠΈ нСговия ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²Π³Ρ€Π°Π΄Π΅Π½ Π² Docker.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ, Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ всСки Π½Π°Π»ΠΈΡ‡Π΅Π½ IP адрСс, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 127.0.0.1 Π΅ локалният ΠΈΠ»ΠΈ външСн IP адрСс Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°.

ΠŸΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ‚ Ρ€Π΅Π΄ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΡƒΠ΅Π± ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ зависи ΠΎΡ‚ db ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°ΠΌΠ΅ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΡƒΠ΅Π± ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, docker-compose ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ стартира Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ вмСсто нас. ΠžΡ‰Π΅ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ (Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ слСд стартиранСто Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°! Π’ΠΎΠ²Π° Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° готовността Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ) Ρ‰Π΅ стартира ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π½Π°ΡˆΠΈΡΡ‚ Π±Π΅ΠΊΠ΅Π½Π΄.

Π’ΠΎΠ²Π° избягва Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π΅ Π΅ ΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΠΈ спСстява рСсурси, ΠΊΠΎΠ³Π°Ρ‚ΠΎ спрСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ освобоТдавамС рСсурси Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ.

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

Какво Π½ΠΈ Π΄Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° докСризация Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ вСрсията Π½Π° MySQL Π·Π° всички Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ. Π’ΠΎΠ²Π° избягва някои Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ вСрсиитС сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚, конфигурацията, настройкитС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ сС промСнят. Π’ΠΎΠ²Π° Π²ΠΈ позволява Π΄Π° посочитС ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ΅ Π½Π° хост Π·Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, потрСбитСлско ΠΈΠΌΠ΅, ΠΏΠ°Ρ€ΠΎΠ»Π°. НиС сС ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π°Π²Π°ΠΌΠ΅ ΠΎΡ‚ зоологичСската Π³Ρ€Π°Π΄ΠΈΠ½Π° Π½Π° ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ…ΠΌΠ΅ ΠΏΠΎ-Ρ€Π°Π½ΠΎ.

ИмамС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½Π° конфигурация Π·Π° срСдата Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, която Ρ‰Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ стандартната. MySQL Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Π·Π° слаби машини ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° производитСлност Π΅ ΠΌΠ½ΠΎΠ³ΠΎ лоша.

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

Docker Π²ΠΈ позволява Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π½Π° Python, Ruby, NodeJS, PHP Π½Π° ΠΆΠ΅Π»Π°Π½Π°Ρ‚Π° вСрсия. ΠžΡ‚ΡŠΡ€Π²Π°Π²Π°ΠΌΠ΅ сС ΠΎΡ‚ нСобходимостта Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ някакъв Π²ΠΈΠ΄ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° вСрсиитС. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Ruby използвашС rpm ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволявашС Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ вСрсията Π² зависимост ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ОсвСн Ρ‚ΠΎΠ²Π° позволява, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° Docker, ΠΏΠ»Π°Π²Π½ΠΎ Π΄Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π° Π³ΠΎ вСрсиитС Π·Π°Π΅Π΄Π½ΠΎ със зависимоститС. НямамС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° вСрсията ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° ΠΊΠΎΠ΄Π°. Π—Π° Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ вСрсията, спуснСтС стария ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΠΏΠΎΠ²Π΄ΠΈΠ³Π½Π΅Ρ‚Π΅ новия ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Ако Π½Π΅Ρ‰ΠΎ сС ΠΎΠ±ΡŠΡ€ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° спуснСм новия ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π΄Π° Π²Π΄ΠΈΠ³Π½Π΅ΠΌ стария ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Π‘Π»Π΅Π΄ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ Π² Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Ρ‚Π°ΠΊΠ° ΠΈ Π² ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ. Π’ΠΎΠ²Π° Π²Π°ΠΆΠΈ особСно Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ инсталации.

ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС с Docker ΠΈ Gitlab CI Π’ΡŠΠ² Frontend ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ JavaScipt ΠΈ NodeJS.

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ послСдния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° ReacJS. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ стартира всичко Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‡Ρ€Π΅Π· Π³ΠΎΡ€Π΅Ρ‰ΠΎ ΠΏΡ€Π΅Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° сС стартира Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° асСмблиранС Π½Π° JavaScipt ΠΈ ΠΊΠΎΠ΄ΡŠΡ‚, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ Π² статика, сС Π΄Π°Π²Π° Ρ‡Ρ€Π΅Π· nginx Π·Π° спСстяванС Π½Π° рСсурси.

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

Π’ΡƒΠΊ съм Π΄Π°Π» схСмата Π½Π° послСдния Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Какви Π·Π°Π΄Π°Ρ‡ΠΈ бяха Ρ€Π΅ΡˆΠ΅Π½ΠΈ? Π˜ΠΌΠ°Ρ…ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ систСма, с която Π΄Π° си взаимодСйстват ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡ‚Π΅ устройства. Π’Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ Π΄Π°Π½Π½ΠΈ. Π•Π΄Π½Π° ΠΎΡ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚Π΅ насочСни извСстия Π΄ΠΎ Ρ‚ΠΎΠ²Π° устройство.

Какво смС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π·Π° Ρ‚ΠΎΠ²Π°?

Π Π°Π·Π΄Π΅Π»ΠΈΡ…ΠΌΠ΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ: административната част Π½Π° JS, Π±Π΅ΠΊΠ΅Π½Π΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π΅Π· интСрфСйса REST ΠΏΠΎΠ΄ Ruby on Rails. Π‘Π΅ΠΊΠ΅Π½Π΄ΡŠΡ‚ взаимодСйства с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°, сС прСдоставя Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Административният ΠΏΠ°Π½Π΅Π» взаимодСйства с Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ‡Ρ€Π΅Π· интСрфСйса REST.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠΌΠ°Ρ…ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ насочСни извСстия. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ°Ρ…ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ внСдрява ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ отговаря Π·Π° доставянСто Π½Π° извСстия Π΄ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΈΡ…ΠΌΠ΅ слСдната схСма: ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΡ‚ Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° взаимодСйства с административния ΠΏΠ°Π½Π΅Π», административният ΠΏΠ°Π½Π΅Π» взаимодСйства с Π±Π΅ΠΊΠ΅Π½Π΄Π°, Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Push извСстия.

Push извСстията взаимодСйстват с Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ Π² NodeJS.

Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚ сС опашки ΠΈ слСд Ρ‚ΠΎΠ²Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ извСстия ΠΏΠΎ тСхния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ.

Π’ΡƒΠΊ са нарисувани Π΄Π²Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Docker ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ 2 нСзависими Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½. ОсвСн Ρ‚ΠΎΠ²Π° Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ ΠΎΠ±Ρ‰Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° ΠΌΡ€Π΅ΠΆΠ°, Π° физичСскитС Π΄Π°Π½Π½ΠΈ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

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

Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ, Π½ΠΎ Π² Ρ†ΠΈΡ„Ρ€ΠΈ. Π’ΠΎΠ²Π° Π΅ мястото, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π΅ Π²Π°ΠΆΠ½ΠΎ.

Ако ΠΏΠΎ-Ρ€Π°Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°ΡˆΠ°Ρ‚Π° услуга, която отговаря Π½Π° Push извСстия, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ пълСн ΡΡŠΡ€Π²ΡŠΡ€. Π’ΠΎΠΉ прСдоставя API. И Π½Π°ΡˆΠ°Ρ‚Π° Π½ΠΎΠ²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅Ρ‡Π΅ взаимодСйства с Π½Π΅Π³ΠΎ.

По Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ вСрсия 4 Π½Π° NodeJS. Π‘Π΅Π³Π° (ΠΏΡ€Π΅Π· 2017 Π³. - Π±Π΅Π». Ρ€Π΅Π΄.) Π² послСднитС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ вСрсия 7 Π½Π° NodeJS. Няма ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π½ΠΎΠ²ΠΈ вСрсии Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Ако Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈ ΠΏΠΎΠ²ΠΈΡˆΠΈΡ‚Π΅ вСрсията Π½Π° NodeJS ΠΎΡ‚ услугата Push notification.

И Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с API, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ бъдС възмоТно Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ с Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°.

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

Какво Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Docker? ДобавямС Dockerfile към Π½Π°ΡˆΠ΅Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ описва Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ зависимости. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ са Ρ€Π°Π·Π±ΠΈΡ‚ΠΈ логичСски. Π’ΠΎΠ²Π° Π΅ минималният Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ backend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ създавамС Π½ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, създавамС Dockerfile, описвамС ΠΆΠ΅Π»Π°Π½Π°Ρ‚Π° СкосистСма (Python, Ruby, NodeJS). Π’ docker-compose Ρ‚ΠΎΠΉ описва Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° зависимост - Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. ОписвамС, Ρ‡Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ‚ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π°ΠΊΠ°Π²Π° ΠΈ Ρ‚Π°ΠΊΠ°Π²Π° вСрсия, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Ρ‚Π°ΠΌ ΠΈ Ρ‚Π°ΠΌ.

ИзползвамС ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Ρ‚Ρ€Π΅Ρ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с nginx, Π·Π° Π΄Π° обслуТвамС статично. Има Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΊΠ°Ρ‡Π²Π°Π½Π΅ Π½Π° снимки. Backend Π³ΠΈ поставя Π² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ ΠΎΠ±Π΅ΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΡ‰ΠΎ сС ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с nginx, ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π°Π²Π° статиката.

Π—Π° Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΠΈΠΌ конфигурацията Π½Π° nginx, mysql, Π΄ΠΎΠ±Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΏΠ°ΠΏΠΊΠ° Docker, Π² която ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π°ΠΏΡ€Π°Π²ΠΈ git ΠΊΠ»ΠΎΠ½ΠΈΠ½Π³ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° своята машина, Ρ‚ΠΎΠΉ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° Π³ΠΎΡ‚ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅. Няма Π²ΡŠΠΏΡ€ΠΎΡ какъв ΠΏΠΎΡ€Ρ‚ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ настройки Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅.

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

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ°ΠΌΠ΅ няколко ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: администратор, inform-API, насочСни извСстия.

Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ всичко Ρ‚ΠΎΠ²Π°, ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°Ρ€Π΅ΠΊΠΎΡ…ΠΌΠ΅ dockerized-app. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ няколко Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΏΡ€Π΅Π΄ΠΈ всСки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π’Π΅ просто са логичСски Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ - Π² GitLab ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ°, Π½ΠΎ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΏΠ°ΠΏΠΊΠ° Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π•Π΄Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π°Π΄ΠΎΠ»Ρƒ са ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ.

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

Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ само Π·Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° dockerized-app. Π’ΡƒΠΊ прСнасямС ΠΈ дирСкторията Docker, Π² която попълвамС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° взаимодСйствиСто Π½Π° всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ. Има README.md, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ описва ΠΊΠ°ΠΊ Π΄Π° стартиратС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’ΡƒΠΊ смС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠ»ΠΈ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° Π·Π° ΡΡŠΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° docker. Π’ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° бягатС Π½Π° ΡΡ‚ΡŠΠΏΠΊΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ с ядрото, Ρ‚ΠΎΠΉ Π½Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ насочСни извСстия, Ρ‚ΠΎΠΉ просто стартира docker-compose Ρ„Π°ΠΉΠ» ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ Ρ€Π΅ΡΡƒΡ€ΡΡŠΡ‚ сС Π·Π°ΠΏΠ°Π·Π²Π°.

Ако ΠΈΠΌΠ° Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π΅ с насочСни извСстия, Ρ‚ΠΎΠ³Π°Π²Π° сС стартират docker-compose.yaml ΠΈ docker-compose-push.yaml.

Въй ΠΊΠ°Ρ‚ΠΎ docker-compose.yaml ΠΈ docker-compose-push.yaml са Π² ΠΏΠ°ΠΏΠΊΠ°, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ сС създава Π΅Π΄Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° ΠΌΡ€Π΅ΠΆΠ°.

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

ОписаниС Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎ-Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ отговаря Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ. Какво Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Ρ‚ΡƒΠΊ? Π’ΡƒΠΊ прСдставямС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π·Π° балансиранС.

Π’ΠΎΠ²Π° Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Docker, ΠΊΠΎΠ΅Ρ‚ΠΎ изпълнява nginx ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΠ»ΡƒΡˆΠ° сокСта Π½Π° Docker. Π”ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ сС Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚, Ρ‚ΠΎΠΉ Ρ€Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° конфигурацията Π½Π° nginx. РазпрСдСлямС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΠΎ Π½ΠΈΠ²ΠΎ.

Π—Π° срСда Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° .dev - api.informer.dev. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚Π° с Π΄ΠΎΠΌΠ΅ΠΉΠ½ .dev са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° машина Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

ОсвСн Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ сС ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚ към всСки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ всички ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ сС стартират Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

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

Π“Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΎ сС ΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ Π½Π°ΡˆΠΈΡΡ‚ Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ ΠΈΠ»ΠΈ някакъв инструмСнт, с ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ заявки към Π±Π°Π»Π°Π½ΡΡŒΠΎΡ€Π°.

Балансиращият ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ опрСдСля към ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅.

МоТС Π΄Π° Π΅ nginx, ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π°Π²Π° Π½Π° администратора JS. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС nginx, ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя API, ΠΈΠ»ΠΈ статични Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС Π΄Π°Π²Π°Ρ‚ Π½Π° nginx ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΊΠ°Ρ‡Π΅Π½ΠΈ изобраТСния.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Ρ‡Ρ€Π΅Π· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° ΠΌΡ€Π΅ΠΆΠ° ΠΈ са скрити Π·Π°Π΄ прокси.

На ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π½Π° програмиста ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠ°Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ IP, Π½ΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π°. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° няма Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ.

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

Кой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅, Π·Π° Π΄Π° Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ си? Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΌΠ΅Π½ Π΄ΠΎΠ±ΡŠΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ официалният Π΄ΠΎΠΊΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π· Π·Π° MySQL.

Доста Π΅ прСдизвикатСлство. Има ΠΌΠ½ΠΎΠ³ΠΎ вСрсии. Но Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° функционалност Π²ΠΈ позволява Π΄Π° ΠΏΠΎΠΊΡ€ΠΈΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ Π² процСса Π½Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅. Ако ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ всичко Ρ‚ΠΎΠ²Π° взаимодСйства, Ρ‚ΠΎΠ³Π°Π²Π° мисля, Ρ‡Π΅ няма Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ ΡΠ°ΠΌΠΎΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Hub.docker.com ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π²Ρ€ΡŠΠ·ΠΊΠΈ към github.com, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

ОсвСн Ρ‚ΠΎΠ²Π° Π² Ρ‚ΠΎΠ²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠΌΠ° скрипт docker-endpoint.sh, ΠΊΠΎΠΉΡ‚ΠΎ отговаря Π·Π° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° инициализация ΠΈ Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° стартиранСто Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата. ΠšΠ°Ρ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° срСдата, ΠΊΠΎΠ³Π°Ρ‚ΠΎ изпълнявамС Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ»ΠΈ Ρ‡Ρ€Π΅Π· docker-compose, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ трябва Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΡ€Π°Π·Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π° Π·Π° Π΄ΠΎΠΊΠ΅Ρ€ Π·Π° 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

Π‘Π΅Π³Π° Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Gitlab CI. Π—Π° Π΄Π° стартирамС Gitlab CI, просто трябва Π΄Π° поставим Ρ„Π°ΠΉΠ»Π° .gitlab-ci.yml Π² ΠΊΠΎΡ€Π΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’ΡƒΠΊ описвамС, Ρ‡Π΅ искамС Π΄Π° изпълним ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ ΠΊΠ°Ρ‚ΠΎ тСст, Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅.

НиС изпълнявамС скриптовС, ΠΊΠΎΠΈΡ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚ docker-compose, Π·Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° Π΅ само ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π±Π΅ΠΊΠ΅Π½Π΄.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΊΠ°Π·Π²Π°ΠΌΠ΅, Ρ‡Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС стартират ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, Π·Π° Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ тСстовС.

Ако скриптовСтС сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ Π½Π΅ Π²Ρ€ΡŠΡ‰Π°Ρ‚ ΠΊΠΎΠ΄ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°, Ρ‚ΠΎΠ³Π°Π²Π° систСмата ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° към втория Π΅Ρ‚Π°ΠΏ ΠΎΡ‚ внСдряванСто.

Π•Ρ‚Π°ΠΏΡŠΡ‚ Π½Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ Π·Π° Π΅Ρ‚Π°ΠΏΠ½ΠΎ изпълнСниС. НС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ рСстартиранС с Π½ΡƒΠ»Π΅Π² прСстой.

НиС ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ гасим всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ²Π΄ΠΈΠ³Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΡΡŠΠ±Ρ€Π°Π½ΠΈ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ Π΅Ρ‚Π°ΠΏ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° тСстванСто.

ИзпълнявамС Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° срСдата ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са написани ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅.

Има Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° сС отнася само Π·Π° главния ΠΊΠ»ΠΎΠ½.

ΠŸΡ€ΠΈ промяна Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π΅ сС изпълнява.

Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ ΠΏΠΎ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅.

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

Π—Π° Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, трябва Π΄Π° инсталирамС Gitlab Runner.

Π’Π°Π·ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π΅ написана Π½Π° Golang. Π’ΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ», ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΎ Π² свСта Π½Π° Golang, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ изисква Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ зависимости.

ΠŸΡ€ΠΈ стартиранС рСгистрирамС Gitlab Runner.

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

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° инициализация ΠΎΡ‚ командния Ρ€Π΅Π΄.

НастройтС Gitlab Runner ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ (Shell, Docker, VirtualBox, SSH)

ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° Gitlab Runner Ρ‰Π΅ сС изпълнява ΠΏΡ€ΠΈ всСки ΠΊΠΎΠΌΠΈΡ‚, Π² зависимост ΠΎΡ‚ настройката .gitlab-ci.yml.

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

Как ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π²ΠΈΠ·ΡƒΠ°Π»Π½ΠΎ Π² Gitlab Π² ΡƒΠ΅Π± интСрфСйса. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ смС ΡΠ²ΡŠΡ€Π·Π°Π»ΠΈ GItlab CI, ΠΈΠΌΠ°ΠΌΠ΅ Ρ„Π»Π°Π³, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° компилацията Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Π΄ΠΈ 4 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π» всички тСстовС ΠΈ Π½Π΅ Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΠ» Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.

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

МоТСм Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΡ‚Π±Π»ΠΈΠ·ΠΎ конструкциитС. Π’ΡƒΠΊ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Π΄Π²Π΅ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ Π²Π΅Ρ‡Π΅ са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ. Π‘ΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° тСстванС ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ ΠΏΡ€ΠΈ поставянС.

Ако Ρ‰Ρ€Π°ΠΊΠ½Π΅ΠΌ Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° компилация, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ ΠΈΠΌΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π±ΠΈΠ»ΠΈ изпълнСни Π² процСса спорСд .gitlab-ci.yml.

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

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Π° история. Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ ΠΈΠΌΠ° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ ΠΎΠΏΠΈΡ‚ΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС ΠΏΠΎΠ΄Π°Π΄Π°Ρ‚ тСстовС, Π½Π΅ сС ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° към слСдващата ΡΡ‚ΡŠΠΏΠΊΠ° ΠΈ Стапният ΠΊΠΎΠ΄ Π½Π΅ сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°.

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

Какви Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π½Π° сцСната, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ Π΄ΠΎΠΊΠ΅Ρ€? ΠΠ°ΡˆΠ°Ρ‚Π° систСма сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΈ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° рСстартирамС само част ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ бяха Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Π° Π½Π΅ цялата систСма.

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Ρ€Π°Π·Π±ΠΈΠ΅ΠΌ всичко Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΏΠ°ΠΏΠΊΠΈ.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ°Ρ…ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Docker-compose създава собствСно ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ пространство Π·Π° всСки Ρ‚Π°Ρ‚ΠΊΠΎ ΠΈ Π½Π΅ Π²ΠΈΠΆΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° съсСда.

Π—Π° Π΄Π° сС ΠΏΡ€ΠΈΠ΄Π²ΠΈΠΆΠ²Π°ΠΌΠ΅, ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π² Docker Ρ€ΡŠΡ‡Π½ΠΎ. Π’ Docker-compose бСшС написано, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠ°Π²Π° ΠΌΡ€Π΅ΠΆΠ° Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Π’Π°ΠΊΠ° всСки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π° с Ρ‚Π°Π·ΠΈ ΠΌΡ€Π΅ΠΆΠ°, Π²ΠΈΠΆΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈ части Π½Π° систСмата.

БлСдващият ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ раздСлянСто Π½Π° сцСната Π² мноТСство ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ.

Въй ΠΊΠ°Ρ‚ΠΎ Π·Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° всичко Ρ‚ΠΎΠ²Π° красиво ΠΈ максимално Π±Π»ΠΈΠ·ΠΊΠΎ Π΄ΠΎ производствСно, Π΅ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠΎΡ€Ρ‚ 80 ΠΈΠ»ΠΈ 443, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° навсякъдС Π² WEB.

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

Как Π³ΠΎ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅? НазначихмС Π΅Π΄ΠΈΠ½ Gitlab Runner Π·Π° всички Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ.

Gitlab Π²ΠΈ позволява Π΄Π° стартиратС няколко Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Gitlab Runners, ΠΊΠΎΠΈΡ‚ΠΎ просто Ρ‰Π΅ Π²Π·Π΅ΠΌΠ°Ρ‚ всички Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° свой Ρ€Π΅Π΄ ΠΏΠΎ Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ ΠΈ Ρ‰Π΅ Π³ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚.

Π—Π° Π΄Π° нямамС ΠΊΡŠΡ‰Π°, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ…ΠΌΠ΅ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π΄ΠΎ Π΅Π΄ΠΈΠ½ Gitlab Runner, ΠΊΠΎΠΉΡ‚ΠΎ сС справя Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Π½Π°ΡˆΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΌΠΈ.

ΠŸΡ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ…ΠΌΠ΅ nginx-proxy Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ стартиращ скрипт ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΌΡ€Π΅ΠΆΠΈ Π·Π° всички ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π² Π½Π΅Π³ΠΎ.

ΠΠ°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠΌΠ° Π΅Π΄Π½Π° ΠΌΡ€Π΅ΠΆΠ°, Π° Π±Π°Π»Π°Π½ΡΡŒΠΎΡ€ΡŠΡ‚ ΠΈΠΌΠ° няколко ΠΌΡ€Π΅ΠΆΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. МоТС Π΄Π° проксира Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‡Ρ€Π΅Π· ΠΈΠΌΠ΅Π½Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ.

ΠΠ°ΡˆΠΈΡ‚Π΅ заявки ΠΈΠ΄Π²Π°Ρ‚ ΠΏΡ€Π΅Π· Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° Π½Π° ΠΏΠΎΡ€Ρ‚ 80 ΠΈ сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π° Π³Ρ€ΡƒΠΏΠ°, която обслуТва Ρ‚ΠΎΠ·ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½.

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

Какви Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ имашС? Π’ΠΎΠ²Π° Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ root ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π’ΠΎΠ²Π° Π΅ root, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ Ρ€Π°Π²Π΅Π½ Π½Π° root хоста Π½Π° систСмата.

Ако ΠΎΠ±Π°Ρ‡Π΅ Π²Π»Π΅Π·Π΅Ρ‚Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚ΠΎΠΉ Ρ‰Π΅ бъдС root ΠΈ Ρ„Π°ΠΉΠ»ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ създавамС Π² Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° root ΠΏΡ€Π°Π²Π°.

Ако Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Π΅ влязъл Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ» Ρ‚Π°ΠΌ някои ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ напуснал ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠΉ ΠΈΠΌΠ° Ρ„Π°ΠΉΠ» Π² Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° си дирСктория, Π΄ΠΎ ΠΊΠΎΠΉΡ‚ΠΎ няма Π΄ΠΎΡΡ‚ΡŠΠΏ.

Как ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠΈ? ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Какви ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ…Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ…ΠΌΠ΅ потрСбитСля?

ΠšΠΎΠ³Π°Ρ‚ΠΎ създавамС ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», чСсто нямамС ΡΡŠΡ‰ΠΈΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Π³Ρ€ΡƒΠΏΠ° (UID) ΠΈ потрСбитСлски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (GID).

Π—Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ с ID 1000.

Π’ нашия случай Ρ‚ΠΎΠ²Π° съвпадна с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ всички Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Ubuntu. И Π² Ubuntu ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» ΠΈΠΌΠ° ID 1000.

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

ИмамС ли плановС?

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ докумСнтацията Π½Π° Docker. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сС Ρ€Π°Π·Π²ΠΈΠ²Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, докумСнтацията сС промСня. Π”Π°Π½Π½ΠΈΡ‚Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π²Π°-Ρ‚Ρ€ΠΈ мСсСца, Π²Π΅Ρ‡Π΅ Π»Π΅ΠΊΠ°-ΠΏΠΎΠ»Π΅ΠΊΠ° остаряват.

Някои ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅, вСроятно Π²Π΅Ρ‡Π΅ са Ρ€Π΅ΡˆΠ΅Π½ΠΈ със стандартни срСдства.

Π’Π°ΠΊΠ° Ρ‡Π΅ искам Π²Π΅Ρ‡Π΅ Π΄Π° ΠΎΡ‚ΠΈΠ΄Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ, Π·Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към оркСстрацията.

Π•Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ вградСният ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π½Π° Docker, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ Docker Swarm, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π»ΠΈΠ·Π° ΠΎΡ‚ кутията. Искам Π΄Π° пусна Π½Π΅Ρ‰ΠΎ Π² производство, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° тСхнологията Docker Swarm.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π·Π° Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° Ρ…Π°ΠΉΠ²Π΅Ρ€Π° правят Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Ρ‚Ρ€ΡƒΠΏΠΈ. Π‘Π΅Π³Π° Ρ‚Ρ€ΡƒΠΏΠΈΡ‚Π΅ са ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ. Π’Π΅ са Ρ€Π°Π·ΠΏΡ€ΡŠΡΠ½Π°Ρ‚ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π•Π΄Π½Π° ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΡ€Π΅Π· ΡƒΠ΅Π± интСрфСйса.

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€