ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery с Docker (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ)

Π‘Π²ΠΎΠΉ Π±Π»ΠΎΠ³ ΠΌΡ‹ Π½Π°Ρ‡Π½Ρ‘ΠΌ с ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ, созданных ΠΏΠΎ ΠΌΠΎΡ‚ΠΈΠ²Π°ΠΌ послСдних выступлСний нашСго тСхничСского Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€Π° distol (Дмитрия Бтолярова). ВсС ΠΎΠ½ΠΈ ΡΠΎΡΡ‚ΠΎΡΠ»ΠΈΡΡŒ Π² 2016 Π³ΠΎΠ΄Ρƒ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… мСроприятиях ΠΈ Π±Ρ‹Π»ΠΈ посвящСны Ρ‚Π΅ΠΌΠ΅ DevOps ΠΈ Docker. Одно Π²ΠΈΠ΄Π΅ΠΎ, со встрСчи Docker Moscow Π² офисС Badoo, ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ Π½Π° сайтС. НовыС Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΡΡ‚Π°Ρ‚ΡŒΡΠΌΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ ΡΡƒΡ‚ΡŒ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ². Π˜Ρ‚Π°ΠΊβ€¦

31 мая Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ RootConf 2016, ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ²ΡˆΠ΅ΠΉ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… фСстиваля «РоссийскиС ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈΒ» (РИВ++ 2016), сСкция «НСпрСрывноС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΒ» ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π°ΡΡŒ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ Β«Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery с DockerΒ». Π’ Π½Ρ‘ΠΌ Π±Ρ‹Π»ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Ρ‹ ΠΈ систСматизированы Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ построСния процСсса Continuous Delivery (CD) с использованиСм Docker ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Open Source-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². Π‘ этими Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π² production, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° практичСский ΠΎΠΏΡ‹Ρ‚.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery с Docker (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ)

Если Ρƒ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ час Π½Π° Π²ΠΈΠ΄Π΅ΠΎ с Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. Π’ ΠΈΠ½ΠΎΠΌ случаС β€” Π½ΠΈΠΆΠ΅ прСдставлСна основная Π²Ρ‹ΠΆΠΈΠΌΠΊΠ° Π² тСкстовом Π²ΠΈΠ΄Π΅.

Continuous Delivery с Docker

Под Continuous Delivery ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ мСроприятий, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ΄ прилоТСния ΠΈΠ· Git-рСпозитория сначала ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° production, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π°Ρ€Ρ…ΠΈΠ². Выглядит ΠΎΠ½Π° Ρ‚Π°ΠΊ: Git β†’ Build (сборка) β†’ Test (тСстированиС) β†’ Release (Ρ€Π΅Π»ΠΈΠ·) β†’ Operate (ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ обслуТиваниС).

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery с Docker (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ)
Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΎΠΊΠ»Π°Π΄Π° посвящСна стадии build (сборка прилоТСния), Π° Ρ‚Π΅ΠΌΡ‹ release ΠΈ operate Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ ΠΎΠ±Π·ΠΎΡ€Π½ΠΎ. Π Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ…, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΈΡ… Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этих ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ здСсь Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ΅Π½ Docker? НС просто Ρ‚Π°ΠΊ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery Π² контСкстС этого Open Source-инструмСнта. Π₯отя Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ посвящён вСсь Π΄ΠΎΠΊΠ»Π°Π΄, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈ рассмотрСнии Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° Π²Ρ‹ΠΊΠ°Ρ‚Π° ΠΊΠΎΠ΄Π° прилоТСния.

Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π²Ρ‹ΠΊΠ°Ρ‚Π°

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚Π΅ Π½ΠΎΠ²Ρ‹Ρ… вСрсий прилоТСния ΠΌΡ‹ Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ сталкиваСмся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ простоя, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π΅Π³ΠΎΡΡ Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ production-сСрвСра. Π’Ρ€Π°Ρ„ΠΈΠΊ со старой вСрсии прилоТСния Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ: ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ новая вСрсия Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΊΠ°Ρ‡Π΅Π½Π°, Π½ΠΎ ΠΈ Β«ΠΏΡ€ΠΎΠ³Ρ€Π΅Ρ‚Π°Β» (Ρ‚.Π΅. ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ запросов).

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery с Docker (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ)
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя ΠΎΠ±Π΅ вСрсии прилоТСния (старая ΠΈ новая) Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π§Ρ‚ΠΎ автоматичСски ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρƒ ΠΎΠ±Ρ‰ΠΈΡ… рСсурсов: сСти, Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, IPC ΠΈ Ρ‚.ΠΏ. Π‘ Docker эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π»Π΅Π³ΠΊΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ запуском Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий прилоТСния Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… гарантируСтся изоляция рСсурсов Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ хоста (сСрвСра/Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹). ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ухищрСниями ΠΈ Π±Π΅Π· изоляции вовсС, Π½ΠΎ Ссли сущСствуСт Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ инструмСнт, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ€Π΅Π·ΠΎΠ½ β€” Π½Π΅ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°Ρ‚ΡŒ ΠΈΠΌ.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ Π΄Π°Ρ‘Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… плюсов ΠΏΡ€ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅. Π›ΡŽΠ±ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ вСрсии (ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° вСрсий) ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, наличия ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ/Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΈ Ρ‚.ΠΏ., Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ ΠΈΡ… вСрсий. И относится это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ нСпосрСдствСнной исполняСмой срСдС, Π½ΠΎ ΠΈ ΠΊΠΎ всСму ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΡŽ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ систСмный софт ΠΈ Π΅Π³ΠΎ вСрсии (Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Linux-дистрибутива). Благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ содСрТат Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ установлСнный систСмный ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ софт Π½ΡƒΠΆΠ½Ρ‹Ρ… вСрсий, ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… с зависимостями ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ‹Ρ‚ΡŒ.

ΠžΠ±ΠΎΠ±Ρ‰ΠΈΠΌ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π²Ρ‹ΠΊΠ°Ρ‚Π° Π½ΠΎΠ²Ρ‹Ρ… вСрсий с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ пСрСчислСнных Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²:

  1. Π‘Π½Π°Ρ‡Π°Π»Π° старая вСрсия прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.
  2. Π—Π°Ρ‚Π΅ΠΌ новая вСрсия выкатываСтся ΠΈ «прогрСваСтся» Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ сама эта новая вСрсия ΠΌΠΎΠΆΠ΅Ρ‚ нСсти Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ прилоТСния, Π½ΠΎ ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π΅Π³ΠΎ зависимостСй, Π° Ρ‚Π°ΠΊΠΆΠ΅ систСмных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ OpenSSL ΠΈΠ»ΠΈ всСго дистрибутива).
  3. Когда новая вСрсия ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ запросов, Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ.
  4. Π’Π΅ΠΏΠ΅Ρ€ΡŒ старая вСрсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ остановлСна.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ с Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий прилоТСния Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… Π΄Π°Ρ‘Ρ‚ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ удобство β€” быстрый ΠΎΡ‚ΠΊΠ°Ρ‚ Π½Π° ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ (вСдь достаточно ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€).

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery с Docker (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ)
Π˜Ρ‚ΠΎΠ³ΠΎΠ²Π°Ρ пСрвая рСкомСндация Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠšΠ°ΠΏΠΈΡ‚Π°Π½Ρƒ Π½Π΅ ΠΏΡ€ΠΈΠ΄Ρ€Π°Ρ‚ΡŒΡΡ: Β«[ΠΏΡ€ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Continuous Delivery с Docker] Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Docker [ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ это Π΄Π°Ρ‘Ρ‚]Β». ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это Π½Π΅ «сСрСбряная пуля», Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π°Ρ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΠΎ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Ρ‘Ρ‚ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚.

Π’ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ

Под Β«Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽΒ» ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ эксплуатации ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ Ρ‚Π°ΠΊΠΈΡ… случаях:

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚Π΄Π΅Π»ΠΎΠΌ качСства Π½Π° staging, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² production.
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ Π½Π° сСрвСрах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π΅Ρ€ΠΊΠ°Π» Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² (со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ½ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ, Π° вмСстС с Π½ΠΈΠΌΠΈ β€” ΠΈ вСрсии устанавливаСмых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ).
  • Β«Π£ мСня локально всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!Β» (… ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° production Π½Π΅ ΠΏΡƒΡΠΊΠ°ΡŽΡ‚.)
  • ВрСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² старой (Π°Ρ€Ρ…ΠΈΠ²Π½ΠΎΠΉ) вСрсии.
  • …

ΠžΠ±Ρ‰Π°Ρ ΠΈΡ… ΡΡƒΡ‚ΡŒ сводится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ соотвСтствиС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ (Π° Ρ‚Π°ΠΊΠΆΠ΅ отсутствиС чСловСчСского Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°). Как ΠΆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ? Π”Π΅Π»Π°Ρ‚ΡŒ Docker-ΠΎΠ±Ρ€Π°Π·Ρ‹ Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΠ΄Π° ΠΈΠ· Git, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для Π»ΡŽΠ±Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡: Π½Π° тСстовых ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ°Ρ…, Π² production, Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… программистов… ΠŸΡ€ΠΈ этом Π²Π°ΠΆΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ послС сборки ΠΎΠ±Ρ€Π°Π·Π°: Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ β€” Ρ‚Π΅ΠΌ мСньшС Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибок.

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° β€” это ΠΊΠΎΠ΄

Если трСбования ΠΊ инфраструктурС (Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ сСрвСрного ПО, Π΅Π³ΠΎ вСрсии ΠΈ Ρ‚.ΠΏ.) Π½Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π΅ Β«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ», Ρ‚ΠΎ Π²Ρ‹ΠΊΠ°Ρ‚ любого обновлСния прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ послСдствиями. НапримСр, Π½Π° staging Π²Ρ‹ ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° PHP 7.0 ΠΈ пСрСписали ΠΊΠΎΠ΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ β€” Ρ‚ΠΎΠ³Π΄Π° Π΅Π³ΠΎ появлСниС Π½Π° production с ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ старым PHP (5.5) Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚. ΠŸΡƒΡΡ‚ΡŒ ΠΏΡ€ΠΎ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ вСрсии ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹ Π½Π΅ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅, Π½ΠΎ «дьявол кроСтся Π² дСталях»: ΡΡŽΡ€ΠΏΡ€ΠΈΠ· ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ΠΌΠΈΠ½ΠΎΡ€Π½ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ любой зависимости.

Π Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ извСстСн ΠΊΠ°ΠΊ IaC (Infrastructure as Code, «инфраструктура ΠΊΠ°ΠΊ ΠΊΠΎΠ΄Β») ΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ инфраструктурС вмСстС с ΠΊΠΎΠ΄ΠΎΠΌ прилоТСния. ΠŸΡ€ΠΈ Π΅Π³ΠΎ использовании Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ DevOps-спСциалисты ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ΄Π½ΠΈΠΌ Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ прилоТСния, Π½ΠΎ Π½Π°Π΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π΅Π³ΠΎ частями. Из этого ΠΊΠΎΠ΄Π° Π² Git создаётся ΠΎΠ±Ρ€Π°Π· Docker, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ΠΎ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ всСй спСцифики инфраструктуры. ΠŸΡ€ΠΎΡ‰Π΅ говоря, скрипты (ΠΏΡ€Π°Π²ΠΈΠ»Π°) сборки ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ с исходниками ΠΈ вмСстС ΠΌΠ΅Ρ€ΠΆΠΈΡ‚ΡŒΡΡ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery с Docker (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ)

Π’ случаС многослойной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ прилоТСния β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅ΡΡ‚ΡŒ nginx, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, β€” ΠΎΠ±Ρ€Π°Π·Ρ‹ Docker Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΊΠΎΠ΄Π° Π² Git для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ слоя. Π’ΠΎΠ³Π΄Π° Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Π·Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ «блиТайшими» зависимостями, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΉ nginx.

Docker-ΠΎΠ±Ρ€Π°Π·Ρ‹, связь с Git

ВсС Docker-ΠΎΠ±Ρ€Π°Π·Ρ‹, собираСмыС ΠΈΠ· Git, ΠΌΡ‹ раздСляСм Π½Π° Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹Π΅. Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ Ρ‚Π΅Π³ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ названию Π²Π΅Ρ‚ΠΊΠΈ Π² Git, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ просмотра (Π½Π΅ для production). Π’ этом ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹Ρ…: Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² Π½ΠΈΡ… находится.

Π˜ΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹: Π²Π΅Ρ‚ΠΊΡƒ master (ΠΌΠΎΠΆΠ½ΠΎ автоматичСски Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ постоянно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ master), Π²Π΅Ρ‚ΠΊΠΈ с Ρ€Π΅Π»ΠΈΠ·Π°ΠΌΠΈ, Π²Π΅Ρ‚ΠΊΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Continuous Delivery с Docker (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ)
ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ просмотр Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΊ нСобходимости ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π² production, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ставят ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ‚Π΅Π³. По Ρ‚Π΅Π³Ρƒ автоматичСски собираСтся Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· (Π΅Π³ΠΎ Ρ‚Π΅Π³Ρƒ соотвСтствуСт Ρ‚Π΅Π³ ΠΈΠ· Git) ΠΈ выкатываСтся Π½Π° staging. Π’ случаС Π΅Π³ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ‚Π΄Π΅Π»ΠΎΠΌ качСства ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π° production.

dapp

Всё описанноС (Π²Ρ‹ΠΊΠ°Ρ‚, сборку ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ обслуТиваниС) ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Bash-скриптов ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Β«ΠΏΠΎΠ΄Ρ€ΡƒΡ‡Π½Ρ‹Ρ…Β» срСдств. Но Ссли Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ рСализация ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ большой слоТности ΠΈ ΠΏΠ»ΠΎΡ…ΠΎΠΉ управляСмости. Понимая это, ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ созданию своСй спСциализированной Workflow-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ для построСния CI/CD β€” dapp.

Π•Ρ‘ исходный ΠΊΠΎΠ΄ написан Π½Π° Ruby, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π½Π° GitHub. К соТалСнию, докумСнтация Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” самоС слабоС мСсто инструмСнта, Π½ΠΎ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ этим. И Π΅Ρ‰Ρ‘ Π½Π΅ Ρ€Π°Π· напишСм ΠΈ расскаТСм ΠΎ dapp, Ρ‚.ΠΊ. Π½Π°ΠΌ искрСннС Π½Π΅ тСрпится ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π΅Π³ΠΎ возмоТностями со всСм заинтСрСсованным сообщСством, Π° ΠΏΠΎΠΊΠ° присылайтС свои issues ΠΈ pull requests ΠΈ/ΠΈΠ»ΠΈ слСдитС Π·Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° GitHub.

ОбновлСно 13 августа 2019 Π³.: Π² настоящСС врСмя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ dapp ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² werf, Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ пСрСписан Π½Π° Go, Π° докумСнтация Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π°.

Kubernetes

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Open Source-инструмСнт, ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ срСдС, β€” это Kubernetes, кластСр для управлСния Docker. Π’Π΅ΠΌΠ° Π΅Π³ΠΎ использования Π² эксплуатации ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², построСнных Π½Π° Docker, Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π°, поэтому выступлСниС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ ΠΎΠ±Π·ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… интСрСсных возмоТностСй.

Для Π²Ρ‹ΠΊΠ°Ρ‚Π° Kubernetes ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚:

  • readiness probe β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ готовности Π½ΠΎΠ²ΠΎΠΉ вСрсии прилоТСния (для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° Π½Π΅Ρ‘);
  • rolling update β€” ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° Π² кластСрС ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ запуску, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°);
  • synchronous update β€” ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° Π² кластСрС с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ: сначала Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…;
  • canary releases β€” запуск Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌ (нСбольшом) количСствС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Continuous Delivery β€” это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π»ΠΈΠ· Π½ΠΎΠ²ΠΎΠΉ вСрсии, Π² Kubernetes Π΅ΡΡ‚ΡŒ ряд возмоТностСй для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ обслуТивания инфраструктуры: встроСнный ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ всСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ, автоматичСскоС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Ρ€. Всё это ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ³ΠΎ внСдрСния Π² ваши процСссы.

Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Docker.
  2. Π”Π΅Π»Π°ΠΉΡ‚Π΅ Docker-ΠΎΠ±Ρ€Π°Π·Ρ‹ прилоТСния для всСх потрСбностСй.
  3. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Β«Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° β€” это ΠΊΠΎΠ΄Β».
  4. БвяТитС Git с Docker.
  5. Π Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ порядок Π²Ρ‹ΠΊΠ°Ρ‚Π°.
  6. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ (Kubernetes ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ).

Π’ΠΈΠ΄Π΅ΠΎ ΠΈ слайды

Π’ΠΈΠ΄Π΅ΠΎ с выступлСния (ΠΎΠΊΠΎΠ»ΠΎ часа) ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π² YouTube (нСпосрСдствСнно Π΄ΠΎΠΊΠ»Π°Π΄ начинаСтся с 5-ΠΉ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ β€” ΠΏΠΎ ссылкС воспроизвСдСниС с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°).

ΠŸΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°:

P.S.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

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