ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС с 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 Π΄ΡƒΡˆΠΈ. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Ρ…ΠΌΠ΅ ΠΎΠΏΠΈΡ‚ ΠΈ постигнахмС ΠΌΠ°Π»ΠΊΠΎ Π½Π°ΠΏΡ€Π΅Π΄ΡŠΠΊ. Π›ΠΈΠ½ΠΊ към нашия ΠΏΡŠΡ€Π²ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄.

Какво Ρ‰Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ‚ΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄? Π©Π΅ сподСлим ΠΎΠΏΠΈΡ‚Π° си Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ срСщнахмС, ΠΈ ΠΊΠ°ΠΊ Π³ΠΈ Ρ€Π΅ΡˆΠ°Π²Π°Ρ…ΠΌΠ΅. НС всичко бСшС ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ‚Π½ΠΎ, Π½ΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π΅Π΄Π²Π°ΠΌΠ΅.

ΠΠ°ΡˆΠΈΡΡ‚ Π΄Π΅Π²ΠΈΠ·: dockerize everything we can reach.

ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС с 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 Π·Π½Π°Π΅, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ водят със сСбС си зависимости. Π”ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΅ Π΄Π° сС стартират Π΄Π²Π΅ Π±Π°Π·ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. Най-ΠΌΠ°Π»ΠΊΠΎΡ‚ΠΎ, старитС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ към Π½ΠΎΠ²Π°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° ΠΎΡ‚ своя страна ΠΏΠΎΡ€Π°ΠΆΠ΄Π° няколко ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

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

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

Frontend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π½Π° JS, практичСски Π½Π΅ влияС Π½Π° Backend. Backend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΎΡ‚ своя страна Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°, Π² нашия случай, Ruby on Rails ΠΈ Π½Π΅ ΠΏΡ€Π΅Ρ‡ΠΈ Π½Π° Frontend. ВзаимодСйствиСто сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° Ρ‡Ρ€Π΅Π· 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 Ρ„Π°ΠΉΠ». Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° β€” ΡΠ΅Ρ€Π²ΠΈΠ·ΡŠΡ‚ Π·Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡƒΠ΅Π± ΡΠ΅Ρ€Π²ΠΈΠ·ΡŠΡ‚. Π’ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ случаи Π½Π°ΡˆΠΈΡ‚Π΅ ΡƒΠ΅Π± прилоТСния изискват Π·Π° backend ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ MySQL, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ Π΅ с MySQL β€” Π½ΠΎ Π½ΠΈΡ‰ΠΎ Π½Π΅ ΠΏΡ€Π΅Ρ‡ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄Ρ€ΡƒΠ³Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ (PostgreSQL, Redis).

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

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° описвамС ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€ΠΎΠ±ΠΈΠ΅ΠΌ ΠΏΠΎΡ€Ρ‚Π° Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° хост машини Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΎΡ‚ 3000 Π½Π° 3000 ΠΏΠΎΡ€Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ΠΎΠ²Π° сС изпълнява Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° iptables ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π·Π°Π»ΠΎΠΆΠ΅Π½ Π² Docker.

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

ΠŸΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ‚ Ρ€Π΅Π΄ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ web зависи ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° db. ΠšΠΎΠ³Π°Ρ‚ΠΎ стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° web, ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° docker-compose Ρ‰Π΅ стартира Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π‘Π»Π΅Π΄ стартиранС Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ (Π² дСйствитСлност β€” слСд стартиранС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°! Готовността Π½Π° Π‘Π” Π½Π΅ сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°) Ρ‰Π΅ стартира ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, нашия backend.

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

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

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

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

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

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

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

ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС с Docker ΠΈ Gitlab CI На Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ JavaScript ΠΈ NodeJS.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСдният Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅ Π½Π° ReactJS. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ стартира всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ hot-reload.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° стартира Π·Π°Π΄Π°Ρ‡Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° JavaScript ΠΈ ΠΊΠΎΠ΄ΡŠΡ‚, ΡΡŠΠ±Ρ€Π°Π½ Π² статиката, сС прСдоставя Ρ‡Ρ€Π΅Π· nginx, спСстявайки рСсурси.

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

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

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

Какво Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ²Π°?

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

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, ΠΈΠΌΠ°Ρ…ΠΌΠ΅ нСобходимост Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Push увСдомлСния. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ°Ρ…ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² ΠΊΠΎΠΉΡ‚ΠΎ бСшС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ отговаря Π·Π° доставката Π½Π° увСдомлСния Π΄ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ.

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

Push увСдомлСнията взаимодСйстват с Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π½Π° NodeJS.

ΠžΠΏΠ°ΡˆΠΊΠΈΡ‚Π΅ сС ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ ΠΈ увСдомлСнията сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ ΠΏΠΎ своя ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ.

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

ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС с 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 сокСт. Π”ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ, с Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° конфигурацията Π½Π° 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, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅, Ρ‡Π΅ искамС Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΡ€Π°Π·Π½Π° ΠΏΠ°Ρ€ΠΎΠ»Π° Π·Π° 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 Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π° backend.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΊΠ°Π·Π²Π°ΠΌΠ΅, Ρ‡Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° изпълним ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° промяна Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ тСстовСтС.

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

Π€Π°Π·Π°Ρ‚Π° Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π·Π° staging. НиС Π½Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ Π±Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅Π½ рСстарт.

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

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

Има Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° трябва Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° само Π·Π° ΠΊΠ»ΠΎΠ½ master.

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

Има Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ издания ΠΏΠΎ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅.

ΠŸΡ€ΠΎΡ†Π΅Ρ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС с 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

МоТСм Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π±ΠΈΠ»Π΄ΠΎΠ²Π΅Ρ‚Π΅. Π’ΡƒΠΊ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ Π΄Π²Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΡ. Π‘ΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° тСстванС ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° 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.

Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ създава нСудобства ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ са ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ. Π’Π΅ са Ρ€Π°Π·ΠΏΡ€ΡŠΡΠ½Π°Ρ‚ΠΈ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅. Π•Π΄Π½Π° ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Ρ‡Ρ€Π΅Π· ΡƒΠ΅Π± интСрфСйс.

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

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster