Наша рСализация Continuous Deployment Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°

ΠœΡ‹ Π² True Engineering настроили процСсс Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ доставки ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π° сСрвСра Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° ΠΈ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ этим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ.

Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ систСму для Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Π΅Ρ‘ Π² собствСнном кластСрС Kubernetes. Π’Π΅ΠΏΠ΅Ρ€ΡŒ нашС высоконагруТСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΅Ρ…Π°Π»ΠΎ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°, для Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ настроили ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ автоматичСский процСсс Continuous Deployment. Благодаря этому, ΠΌΡ‹ ускорили time-to-market – доставку ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΡƒΡŽ срСду.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ расскаТСм ΠΎΠ±ΠΎ всСх этапах процСсса Continuous Deployment (CD) ΠΈΠ»ΠΈ доставки ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°:

  1. ΠΊΠ°ΠΊ стартуСт этот процСсс,
  2. синхронизация с Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°,
  3. сборка Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°,
  4. автоматичСскоС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ прилоТСния Π² тСстовой срСдС,
  5. автоматичСскоС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π½Π° Prod.

Π’ процСссС подСлимся дСталями настройки.

Наша рСализация Continuous Deployment Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°

1. Π‘Ρ‚Π°Ρ€Ρ‚ CD

Continuous Deployment начинаСтся с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ измСнСния Π² Ρ€Π΅Π»ΠΈΠ·Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ нашСго Git-рСпозитория.

НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π±Π°Π·Π΅ микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ всС Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ хранятся Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Благодаря этому ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС микросСрвисы, Π΄Π°ΠΆΠ΅ Ссли измСнился ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ….

ΠœΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • Удобство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ β€” ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ развиваСтся, поэтому ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сразу со всСм ΠΊΠΎΠ΄ΠΎΠΌ.
  • Π•Π΄ΠΈΠ½Ρ‹ΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ CI/CD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Сдиная систСма ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ всС тСсты ΠΈ доставляСтся Π² prod-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°.
  • Π˜ΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ Π² вСрсиях β€” Π½Π°ΠΌ Π½Π΅ приходится Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ вСрсий микросСрвисов ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ микросСрвиса свою ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² скриптах Helm.

2. Бинхронизация с Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ исходного ΠΊΠΎΠ΄Π° Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°

Π‘Π΄Π΅Π»Π°Π½Π½Ρ‹Π΅ измСнСния автоматичСски ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°. Π’Π°ΠΌ настроСна сборка прилоТСния, которая запускаСтся послС обновлСния Π²Π΅Ρ‚ΠΊΠΈ, ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚ Π² ΠΏΡ€ΠΎΠ΄. Оба процСсса происходят Π² ΠΈΡ… ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΈΠ· Git-рСпозитория.

ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ собствСнныС срСды для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для этих Ρ†Π΅Π»Π΅ΠΉ свой Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ β€” ΠΎΠ½ синхронизирован с ΠΈΡ… Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ измСнСния Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ нашСго рСпозитория, GitLab сразу ΠΆΠ΅ отправляСт эти измСнСния Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΡƒ.

Наша рСализация Continuous Deployment Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°

ПослС этого Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сборку. Она состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… этапов: сборки Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°, тСстирования ΠΈ доставки Π² ΠΏΡ€ΠΎΠ΄.

3. Π‘Π±ΠΎΡ€ΠΊΠ° Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°

Π‘Π±ΠΎΡ€ΠΊΠ° Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° β€” это Π΄Π²Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² систСмС GitLab Runner. Π•Ρ‘ конфигурация исходной сборки Π»Π΅ΠΆΠΈΡ‚ Π² этом ΠΆΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π’ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» для написания YAML-скрипта для сборки Π² GitLab.

GitLab Runner Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈΠ· Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ рСпозитория, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ сборки Java-прилоТСния собраСт ΠΈ отправляСт Π΅Π³ΠΎ Π² Docker registry. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ собираСм Π±Π΅ΠΊΠ΅Π½Π΄ ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Docker-ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ складываСм Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° сторонС Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°. Для управлСния Doker-ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ»Π°Π³ΠΈΠ½ Gradle.

ΠœΡ‹ синхронизируСм вСрсии Π½Π°ΡˆΠΈΡ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² с вСрсиСй Ρ€Π΅Π»ΠΈΠ·Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π»ΠΎΠΆΠ΅Π½ Π² Docker. Для Π³Π»Π°Π΄ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΡ‹ внСсли нСсколько настроСк:

1. ΠœΠ΅ΠΆΠ΄Ρƒ тСстовым ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ. ΠœΡ‹ сдСлали ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠ³ Π±Π΅Π· пСрСсборки Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со всСми настройками, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСниями ΠΈ сСрвисами ΠΊΠ°ΠΊ Π² тСстовой срСдС, Ρ‚Π°ΠΊ ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄Π΅.

2. Для обновлСния прилоТСния Ρ‡Π΅Ρ€Π΅Π· Helm Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π΅Ρ€ΡΠΈΡŽ. Π£ нас сборка Π±Π΅ΠΊΠ΅Π½Π΄Π°, Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ прилоТСния – это Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, поэтому Π²Π°ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Π·Π΄Π΅ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π²Π΅Ρ€ΡΠΈΡŽ прилоТСния. Для этой Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· истории Git, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ нас конфигурация K8S кластСра ΠΈ прилоТСния находятся Π² ΠΎΠ΄Π½ΠΎΠΌ Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π’Π΅Ρ€ΡΠΈΡŽ прилоТСния ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
git describe --tags --abbrev=7.

4. АвтоматичСскоС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² тСстовой срСдС (UAT)

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ этапом Π² этом скриптС сборки выполняСтся автоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ кластСра K8S. Π­Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±Ρ€Π°Π»ΠΎΡΡŒ ΠΈ всС Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ Π² Docker Registry. ПослС этого запускаСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ тСстового окруТСния.

ОбновлСниС кластСра запускаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Helm Update. Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ ΠΏΠΎ ΠΏΠ»Π°Π½Ρƒ, Ρ‚ΠΎ Helm автоматичСски ΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ всС свои измСнСния. Π•Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ΠœΡ‹ поставляСм вмСстС со сборкой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ кластСра K8S. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом обновляСтся ΠΎΠ½Π°: configMaps, deployments, services, secrets ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ K8S, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ.

ПослС этого Helm запускаСт RollOut ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ самого прилоТСния Π² тСстовой срСдС. Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΄Π΅. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ бизнСс-Ρ„ΠΈΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π²Ρ‹Π»ΠΎΠΆΠΈΠ»ΠΈ Π² тСстовоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅.

5. АвтоматичСскоС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° Prod

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, остаётся лишь Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² GitLab β€” ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ сразу Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΡƒΡŽ срСду.

Одно ΠΈ Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Π΅Π· пСрСсборки Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… окруТСниях β€” тСстовом ΠΈ ΠΏΡ€ΠΎΠ΄Π΅. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹, Π½Π΅ мСняя Π½ΠΈΡ‡Π΅Π³ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π·Π°Π΄Π°Ρ‘ΠΌ ΠΈΠ·Π²Π½Π΅.

Гибкая парамСтризация настроСк прилоТСния зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ окруТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. ΠœΡ‹ вынСсли всС настройки ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ Π²ΠΎΠ²Π½Π΅: всё парамСтризуСтся Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ K8S ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Helm. Когда Helm Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ сборку Π² тСстовоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, ΠΊ Π½Π΅ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ тСстовыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ β€” ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π‘Π°ΠΌΡ‹ΠΌ слоТным Π±Ρ‹Π»ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ сСрвисы ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ окруТСния, ΠΈ пСрСвСсти ΠΈΡ… Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния ΠΈ описаниС-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² окруТСния для Helm.

Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния. Π˜Ρ… значСния Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ K8S configmap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Go-шаблонов. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния Π½Π° Π·Π²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}

.Values.global.env – Π² этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ хранится Π½Π°Π·Π²Π°Π½ΠΈΠ΅ окруТСния (prod, stage, UAT).
.Values.app.properties.app_external_domain – Π² этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΡ‹ Π² Ρ„Π°ΠΉΠ»Π΅ .Values.yaml Π·Π°Π΄Π°Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π΄ΠΎΠΌΠ΅Π½

ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ прилоТСния Helm выполняСт созданиС ΠΈΠ· шаблонов Ρ„Π°ΠΉΠ»Π° configmap.yaml ΠΈ заполняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ APP_EXTERNAL_DOMAIN Π½ΡƒΠΆΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² зависимости ΠΎΡ‚ окруТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ стартуСт ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ прилоТСния. Π­Ρ‚Π° пСрСмСнная проставляСтся ΡƒΠΆΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Доступ ΠΊ Π½Π΅ΠΉ Π΅ΡΡ‚ΡŒ ΠΈΠ· прилоТСния, соотвСтствСнно, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ прилоТСния Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎΠ΅ Π² Spring Cloud появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° K8S, Π² Ρ‚ΠΎΠΌ числС Ρ€Π°Π±ΠΎΡ‚Π° с configMaps: Spring Cloud Kubernetes. Пока ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ развиваСтся ΠΈ измСняСтся ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΠ΄Π΅. Но Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠΌ Π΅Π³ΠΎ состояниС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π² DEV конфигурациях. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ стабилизируСтся β€” Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ с использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния Π½Π° Π½Π΅Π³ΠΎ.

Π˜Ρ‚ΠΎΠ³ΠΎ

Π˜Ρ‚Π°ΠΊ, Continuous Deployment настроСн ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ВсС обновлСния происходят ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ клавиши. Доставка ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΡƒΡŽ срСду β€” автоматичСская. И, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, обновлСния Π½Π΅ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы.

Наша рСализация Continuous Deployment Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°

ΠŸΠ»Π°Π½Ρ‹ Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅: автоматичСская миграция Π±Π°Π·Ρ‹

ΠœΡ‹ Π·Π°Π΄ΡƒΠΌΠ°Π»ΠΈΡΡŒ ΠΎ ΠΎΠ± Π°ΠΏΠ³Ρ€Π΅ΠΉΠ΄Π΅ Π±Π°Π·Ρ‹ ΠΈ возмоТности эти измСнСния ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ. Π’Π΅Π΄ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии прилоТСния: старая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° новая поднимаСтся. И ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΌΡ‹ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° убСдимся, Ρ‡Ρ‚ΠΎ новая вСрсия β€” Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ Π±Π°Π·Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±Π΅ΠΈΠΌΠΈ вСрсиями прилоТСния.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Ρ‚Π°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ, ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· старой ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅. И послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ дСплоя Π½ΠΎΠ²ΠΎΠΉ вСрсии прилоТСния, ΠΏΠΎ ΠΏΡ€ΠΎΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° post launch support, ΠΌΡ‹ смоТСм ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ ΠΈ ΡΡ‚Π°Π²ΡˆΠΈΠΉ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€.

Если новая вСрсия прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ вСрсии, Π² Ρ‚ΠΎΠΌ числС ΠΈ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ вСрсии Π±Π°Π·Ρ‹. Π‘Π»ΠΎΠ²ΠΎΠΌ, наши измСнСния позволят Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с нСсколькими вСрсиями прилоТСния.

ΠœΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Ρ‡Π΅Ρ€Π΅Π· K8S job, встроив Π΅Ρ‘ Π² процСсс CD. И ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ подСлимся этим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Π½Π° Π₯Π°Π±Ρ€Π΅.

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

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