werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

На 27 ΠΌΠ°ΠΉ Π² Π³Π»Π°Π²Π½Π°Ρ‚Π° Π·Π°Π»Π° Π½Π° конфСрСнцията DevOpsConf 2019, която сС ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π° Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° фСстивала РИВ++ 2019, Π² сСкцията β€žΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° Π΄ΠΎΡΡ‚Π°Π²ΠΊΠ°β€œ, бСшС прСдставСн Π΄ΠΎΠΊΠ»Π°Π΄ΡŠΡ‚ β€žwerf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetesβ€œ. Π’ Π½Π΅Π³ΠΎ сС Π³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΈ прСдизвикатСлствата, с ΠΊΠΎΠΈΡ‚ΠΎ всСки сС сблъсква ΠΏΡ€ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π°Π½Π΅Ρ‚ΠΎ Π² Kubernetes, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π·Π° Π½ΡŽΠ°Π½ΡΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ сС забСлязват Π²Π΅Π΄Π½Π°Π³Π°. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Π² Open Source инструмСнта werf.

Π‘Π»Π΅Π΄ прСдставянСто Π½ΠΈ, Π½Π°ΡˆΠΈΡΡ‚ инструмСнт (ΠΏΠΎ-Ρ€Π°Π½ΠΎ извСстСн ΠΊΠ°Ρ‚ΠΎ dapp) ΠΏΡ€Π΅ΠΌΠΈΠ½Π° историчСския ΠΏΡ€Π°Π³ ΠΎΡ‚ 1000 Π·Π²Π΅Π·Π΄ΠΈ Π² GitHub β€” Π½ΠΈΠ΅ сС надявамС, Ρ‡Π΅ растящата общност ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Ρ‰Π΅ улСсни ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ.

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

И Ρ‚Π°ΠΊΠ°, прСдставямС Π²ΠΈΠ΄Π΅ΠΎ с Π΄ΠΎΠΊΠ»Π°Π΄Π° (~47 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎ ΠΎΡ‚ статията) ΠΈ основната ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π² тСкстов Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ!

Доставката Π½Π° ΠΊΠΎΠ΄ Π² Kubernetes

Π’ Π΄ΠΎΠΊΠ»Π°Π΄Π° Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π·Π° werf, Π° Π·Π° CI/CD Π² Kubernetes, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΠΊΠΈ, Ρ‡Π΅ Π½Π°ΡˆΠΈΡΡ‚ софтуСр Π΅ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ Π² Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ (Π·Π° Ρ‚ΠΎΠ²Π° говоря Π² Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΡ‚ 2016 Π³ΠΎΠ΄ΠΈΠ½Π°), ΠΈ K8s Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ стартиранС Π² продукция (Π·Π° Ρ‚ΠΎΠ²Π° β€” Π² 2017 Π³ΠΎΠ΄ΠΈΠ½Π°).

Как ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° доставката Π² Kubernetes?

  • Има Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌ с ΠΊΠΎΠ΄ ΠΈ инструкции Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° Π² Docker ΠΎΠ±Ρ€Π°Π· ΠΈ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° Π² Docker Registry.
  • Π’ ΡΡŠΡ‰ΠΈΡ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΈΠΌΠ° инструкции ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° сС Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π° ΠΈ стартира ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. На Π΅Ρ‚Π°ΠΏΠ° Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π°Π½Π΅ Ρ‚Π΅Π·ΠΈ инструкции сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π² Kubernetes, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° нуТния ΠΎΠ±Ρ€Π°Π· ΠΎΡ‚ registry ΠΈ Π³ΠΎ стартира.
  • ОсвСн Ρ‚ΠΎΠ²Π°, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠΌΠ° тСстовС. Някои ΠΎΡ‚ тях ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ€Π°Π·Π°. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ (ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ‚Π΅ инструкции) Π΄Π° сС Ρ€Π°Π·Π³Ρ€ΡŠΠ½Π΅ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° K8s ΠΈΠ»ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€) ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ тСстовС Ρ‚Π°ΠΌ.
  • Накрая, Π½ΡƒΠΆΠ½Π° Π΅ CI систСма, която ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΎΡ‚ Git (ΠΈΠ»ΠΈ натискания Π½Π° Π±ΡƒΡ‚ΠΎΠ½ΠΈ) ΠΈ задСйства всички ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ: build, publish, deploy, test.

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π’ΡƒΠΊ ΠΈΠΌΠ° няколко Π²Π°ΠΆΠ½ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈ:

  1. Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ нСизмСняСма инфраструктура (immutable infrastructure), ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° всички Π΅Ρ‚Π°ΠΏΠΈ (staging, production ΠΈ Ρ‚.Π½.), трябва Π΄Π° бъдС Π΅Π΄ΠΈΠ½. По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° Ρ‚ΠΎΠ²Π° ΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ съм Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Ρ‚ΡƒΠΊ..
  2. Въй ΠΊΠ°Ρ‚ΠΎ слСдвамС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° инфраструктура ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄ (IaC), ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, инструкциитС Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ стартиранС трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΄ΠΈΠ½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌ. По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° Ρ‚ΠΎΠ²Π° β€” Π²ΠΈΠΆ Π² ΡΡŠΡ‰ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄.
  3. Π¦Π΅ΠΏΠΎΡ‡ΠΊΠ°Ρ‚Π° Π·Π° доставка (delivery) ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ я Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ‚Π°ΠΊΠ°: ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΡΡŠΠ±Ρ€Π°Π½ΠΎ, тСствано, Ρ€Π΅Π»ΠΈΠ·Π½Π°Ρ‚ΠΎ (Π΅Ρ‚Π°ΠΏ release) ΠΈ всичко β€” доставката Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π°. Но Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ потрСбитСлят ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ стС пуснали, Π½Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΈΠ΅ стС Π³ΠΎ доставили Π² production, Π° ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠΉ Π΅ могъл Π΄Π° Π²Π»Π΅Π·Π΅ ΠΈ производството Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΠ»ΠΎ. Π—Π°Ρ‚ΠΎΠ²Π° считам, Ρ‡Π΅ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° Π½Π° доставка ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π° само Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° Сксплоатация (run), Π° Π°ΠΊΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎ-Ρ‚ΠΎΡ‡Π½ΠΎ, Π΄ΠΎΡ€ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ ΠΎΡ‚ production (замСняйки Π³ΠΎ с Π½ΠΎΠ²).

НСка сС Π²ΡŠΡ€Π½Π΅ΠΌ към посочСната ΠΏΠΎ-Π³ΠΎΡ€Π΅ схСма Π½Π° доставка Π² Kubernetes: тя Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π° Π½Π΅ само ΠΎΡ‚ нас, Π½ΠΎ ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΡ‚ всСки, ΠΊΠΎΠΉΡ‚ΠΎ сС Π΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°Π» с Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. По ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ‚ΡŠΡ€Π½ сСга Π½Π°Ρ€ΠΈΡ‡Π°Ρ‚ GitOps (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠΈ стоящитС Π·Π°Π΄ Π½Π΅Π³ΠΎ ΠΈΠ΄Π΅ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ Ρ‚ΡƒΠΊ.). НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ Π½Π° схСмата.

Π•Ρ‚Π°ΠΏ Π½Π° сглобяванС (build)

На ΠΏΡ€ΡŠΠ² ΠΏΠΎΠ³Π»Π΅Π΄, ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅ ΠΏΡ€Π΅Π· 2019 Π³. Π·Π° сглобяванСто Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ всички умСят Π΄Π° ΠΏΠΈΡˆΠ°Ρ‚ Dockerfile-ΠΈ ΠΈ Π΄Π° стартират docker build?.. Π’ΠΎΡ‚ Π½ΡŽΠ°Π½ΡΡ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:

  1. Π Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠΌΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ multi-stage, Π·Π° Π΄Π° оставитС Π² ΠΎΠ±Ρ€Π°Π·Π° само наистина Π½ΡƒΠΆΠ½ΠΎΡ‚ΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.
  2. Броят Π½Π° слоСвСтС трябва Π΄Π° сС ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°, ΠΊΠ°Ρ‚ΠΎ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π²Π΅Ρ€ΠΈΠ³ΠΈ ΠΎΡ‚ RUN-ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΠΎ смисъл.
  3. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠ²Π° добавя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² отстраняванСто Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π°Π» Π½Π° сглобяванСто трябва Π΄Π° сС ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ Π½ΡƒΠΆΠ½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π°, която Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.
  4. Бкоростта Π½Π° сглобяванС Π΅ Π²Π°ΠΆΠ½Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ искамС Π±ΡŠΡ€Π·ΠΎ Π΄Π° пускамС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π° наблюдавамС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅. НапримСр, Π½Π΅ искамС Π΄Π° ΠΏΡ€Π΅ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π°ΠΌΠ΅ зависимоститС Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΏΡ€ΠΈ всяко сглобяванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.
  5. ЧСсто ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ сС изискват ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠΈ с Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Dockerfile-ΠΈ (ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ Π² Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ») ΠΈ Bash скрипт с тяхната послСдоватСлна сглобка.

Π’ΠΎΠ²Π° бСшС само Π²Ρ€ΡŠΡ… Π½Π° айсбСрга, с ΠΊΠΎΠΉΡ‚ΠΎ сС ΡΠ±Π»ΡŠΡΠΊΠ²Π°Ρ‚ всички. Но ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

  1. ЧСсто Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° сглобяванС Π½ΠΈ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅Ρ‰ΠΎ Π΄Π° ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π°ΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‚ΠΈΠΏ apt Π² външна дирСктория).
  2. ИскамС Ansible вмСсто Π΄Π° пишСм Π½Π° shell-Π°.
  3. ИскамС Π΄Π° сглобявамС Π±Π΅Π· Docker (Π·Π°Ρ‰ΠΎ Π½ΠΈ Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина, Π² която трябва Π΄Π° настроим всичко Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Kubernetes, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ?).
  4. ΠŸΠ°Ρ€Π°Π»Π΅Π»Π½Π° сглобка, която ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π° ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½: Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΎΡ‚ Dockerfile (Π°ΠΊΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° multi-stage), няколко ΠΊΠΎΠΌΠΈΡ‚Π° ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, няколко Dockerfile-Π°.
  5. Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° сглобка: искамС Π΄Π° създавамС Π½Π΅Ρ‰ΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са β€žΠ΅Ρ„ΠΈΠΌΠ΅Ρ€Π½ΠΈβ€œ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΊΠ΅ΡˆΡŠΡ‚ ΠΈΠ·Ρ‡Π΅Π·Π²Π°, Π° слСдоватСлно β€” трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° някъдС ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ.
  6. Накрая Π½Π°Ρ€Π΅ΠΊΠΎΡ… Π²ΡŠΡ€Ρ…Π° Π½Π° ТСланията си автоматизация: ΠΈΠ΄Π΅Π°Π»Π½ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄Π° Π²Π»Π΅Π·Π΅ΠΌ Π² рСпозитория, Π΄Π° напишСм някаква ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π³ΠΎΡ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Π·, ΡΡŠΠ±Ρ€Π°Π½ с Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΊΠ°ΠΊ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π»ΠΈΡ‡Π½ΠΎ Π°Π· Π½Π΅ съм ΡƒΠ±Π΅Π΄Π΅Π½, Ρ‡Π΅ всички нюанси ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½.

И Ρ‚Π°ΠΊΠ°, ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ:

  • moby/buildkit β€” сборщик ΠΎΡ‚ компанията Docker Inc (Π²Π΅Ρ‡Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ Π² Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ вСрсии Π½Π° Docker), ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° Ρ€Π΅ΡˆΠΈ всички Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ;
  • kaniko β€” сборщик ΠΎΡ‚ Google, позволяващ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π±Π΅Π· Docker;
  • Buildpacks.io β€” ΠΎΠΏΠΈΡ‚ Π½Π° CNCF Π·Π° автоматизация ΠΈ Π² частност интСрСсно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с rebase Π·Π° слоСвС;
  • ΠΈ ΠΎΡ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ инструмСнти, ΠΊΠ°Ρ‚ΠΎ buildah, genuinetools/img…

… ΠΈ Π²ΠΈΠΆΡ‚Π΅ ΠΊΠΎΠ»ΠΊΠΎ Π·Π²Π΅Π·Π΄ΠΈ ΠΈΠΌΠ°Ρ‚ Π² GitHub. ВоСст, ΠΎΡ‚ Π΅Π΄Π½Π° страна, docker build ΠΈΠΌΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π½Π΅Ρ‰ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ, Π½ΠΎ Π² дСйствитСлност Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π½Π΅ Π΅ Ρ€Π΅ΡˆΠ΅Π½ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎ β€” доказатСлство Π·Π° Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ сборщики, всСки ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π΅ΡˆΠ°Π²Π° част ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅.

Π‘Π±ΠΎΡ€ΠΊΠ° Π² werf

Π’Π°ΠΊΠ° стигнахмС Π΄ΠΎ werf (ΠΏΡ€Π΅Π΄ΠΈ извСстна ΠΊΠ°ΠΊΡ‚ΠΎ dapp) β€” Open Source инструмСнт Π½Π° компания β€žΠ€Π»Π°Π½Ρ‚β€œ, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ Π²Π΅Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Всичко Π·Π°ΠΏΠΎΡ‡Π½Π° ΠΏΡ€Π΅Π΄ΠΈ 5 Π³ΠΎΠ΄ΠΈΠ½ΠΈ с Bash скриптовС, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‰ΠΈ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Dockerfile-ΠΎΠ²Π΅, Π° ΠΏΡ€Π΅Π· послСднитС 3 Π³ΠΎΠ΄ΠΈΠ½ΠΈ сС ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π° ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с собствСн Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π½Π° Ruby, Π° слСд Ρ‚ΠΎΠ²Π° прСнаписан Π½Π° Go, ΠΈ Π·Π°Π΅Π΄Π½ΠΎ с Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½). Какви ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ със сборката са Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π² werf?

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

ЗасСнчСнитС Π² синьо ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π²Π΅Ρ‡Π΅ са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ, ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½Π°Ρ‚Π° сборка Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½Π° Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ хост, Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΡ‚Π΅ ΠΆΡŠΠ»Ρ‚ΠΎ Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈΠΌ Π΄ΠΎ края Π½Π° лятото.

Π€Π°Π·Π° Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π² registry (publish)

Π‘ΡŠΠ±Ρ€Π°Ρ…ΠΌΠ΅ docker push… β€” ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π² Ρ‚ΠΎΠ²Π° Π΄Π° ΠΊΠ°Ρ‡ΠΈΡˆ ΠΎΠ±Ρ€Π°Π· Π² registry? И Ρ‚ΡƒΠΊ възниква Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚: β€žΠšΠ°ΠΊΡŠΠ² Ρ‚Π°Π³ Π΄Π° поставим Π½Π° ΠΎΠ±Ρ€Π°Π·Π°?β€œ Π’ΡŠΠ·Π½ΠΈΠΊΠ²Π° Ρ‚ΠΎΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Gitflow (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° стратСгия Π½Π° Git) ΠΈ Kubernetes, Π° индустрията сС стрСми случващото сС Π² Kubernetes Π΄Π° слСдва Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ Π² Git. ВсС ΠΏΠ°ΠΊ Git β€” Π½Π°ΡˆΠΈΡΡ‚ СдинствСн ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° истина.

Какво ΠΈΠΌΠ° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π² Ρ‚ΠΎΠ²Π°? Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° повторяСмост: ΠΎΡ‚ ΠΊΠΎΠΌΠΈΡ‚Π° Π² Git, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎ своята ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ (immutable), Π΄ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Π½Π° Docker, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° останС ΡΡŠΡ‰ΠΈΡΡ‚.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° нас Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Ρ…ΠΎΠ΄Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ искамС Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΎΡ‚ коя вСрсия Π΅ ΡΡŠΠ±Ρ€Π°Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, стартирано Π² Kubernetes (ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π΅Ρ‰Π°).

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ Π·Π° Ρ‚Π°Π³ΠΈΡ€Π°Π½Π΅

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π΅ просто git tag. ИмамС Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ с ΠΎΠ±Ρ€Π°Π·, Ρ‚Π°Π³ΠΈΡ€Π°Π½ ΠΊΠ°Ρ‚ΠΎ 1.0. Π’ Kubernetes ΠΈΠΌΠ° staging ΠΈ production, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Ρ€Π°Π· Π΅ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½. Π’ Git ΠΏΡ€Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΈΡ‚ΠΈ ΠΈ Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ поставямС Ρ‚Π°Π³ 2.0. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π³ΠΎ ΠΏΠΎ инструкциитС ΠΎΡ‚ рСпозитория ΠΈ Π³ΠΎ поставямС Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° с Ρ‚Π°Π³ 2.0. РазгъвамС Π½Π° staging ΠΈ, Π°ΠΊΠΎ всичко Π΅ Π½Π°Ρ€Π΅Π΄, слСд Ρ‚ΠΎΠ²Π° Π½Π° production.

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ с Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΎ поставямС Ρ‚Π°Π³Π°, Π° Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° тСствамС ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°ΠΌΠ΅. Π—Π°Ρ‰ΠΎ? ΠŸΡŠΡ€Π²ΠΎ, Ρ‚ΠΎΠ²Π° Π΅ просто Π½Π΅Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ: ΠΈΠ·Π΄Π°Π²Π°ΠΌΠ΅ вСрсия Π½Π° софтуСр, ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ смС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ (Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈΠ½Π°Ρ‡Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° поставим Ρ‚Π°Π³). Π’Ρ‚ΠΎΡ€ΠΎ, Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Π½Π΅ съвпада с Gitflow.

Вторият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅ git commit + tag. Π’ основната ΠΊΠ»ΠΎΠ½ΠΊΠ° (master) ΠΈΠΌΠ° Ρ‚Π°Π³ 1.0; Π·Π° Π½Π΅Π³ΠΎ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° – ΠΎΠ±Ρ€Π°Π·, Ρ€Π°Π·Π²ΡŠΡ€Π½Π°Ρ‚ Π½Π° production. ОсвСн Ρ‚ΠΎΠ²Π°, Π² Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈΠΌΠ° ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΈ preview ΠΈ staging. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° слСдвамС Gitflow: Π² основната ΠΊΠ»ΠΎΠ½ΠΊΠ° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (develop) ΠΏΡ€Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ сС появява ΠΊΠΎΠΌΠΈΡ‚ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ #c1. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π³ΠΎ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (#c1). Π‘ Ρ‚Π°ΠΊΡŠΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ€Π°Π·Π³ΡŠΠ²Π°ΠΌΠ΅ Π½Π° preview. Аналогично ΠΏΡ€Π°Π²ΠΈΠΌ с ΠΊΠΎΠΌΠΈΡ‚ΠΈΡ‚Π΅ #c2 ΠΈ #c3.

ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, Ρ‡Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ стабилни, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ всичко Π΄Π° стабилизирамС. Π’ Git създавамС ΠΊΠ»ΠΎΠ½ release_1.1 (Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° #c3 ΠΎΡ‚ develop). НС Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π»ΠΈΠ·, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Π΅Ρ‚Π°ΠΏ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° Π³ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π½Π° staging. ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ Π² #c4 ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π³ΠΈ Ρ€Π°Π·Π³ΡŠΠ²Π°ΠΌΠ΅ Π½Π° staging. ΠŸΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ с Ρ‚ΠΎΠ²Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π² develop, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΡ‚ release_1.1. Π’ Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΡΡŠΠ±Ρ€Π°Π½ ΠΈ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π½Π° staging ΠΊΠΎΠΌΠΈΡ‚, с ΠΊΠΎΠΉΡ‚ΠΎ смС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ (#c25).

Π’ΠΎΠ³Π°Π²Π° ΠΏΡ€Π°Π²ΠΈΠΌ merge (с fast-forward) Π½Π° Ρ€Π΅Π»ΠΈΠ·Π½Π°Ρ‚Π° ΠΊΠ»ΠΎΠ½ΠΊΠ° (release_1.1) Π² master. ΠŸΠΎΡΡ‚Π°Π²ΡΠΌΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΈΡ‚ Ρ‚Π°Π³ с Π½ΠΎΠ²Π° вСрсия (1.1). Но Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Ρ€Π°Π· Π²Π΅Ρ‡Π΅ Π΅ ΡΡŠΠ±Ρ€Π°Π½ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°, Π·Π°Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Π° Π½Π΅ Π³ΠΎ ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ, просто добавямС Π²Ρ‚ΠΎΡ€ΠΈ Ρ‚Π°Π³ към ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ ΠΎΠ±Ρ€Π°Π· (сСга Ρ‚ΠΎΠΉ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° ΠΈΠΌΠ° Ρ‚Π°Π³ΠΎΠ²Π΅ #c25 ΠΈ 1.1). Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π³ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π½Π° production.

Има Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ, Ρ‡Π΅ Π½Π° staging Π΅ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π΅Π΄ΠΈΠ½ ΠΎΠ±Ρ€Π°Π· (#c25), Π° Π½Π° production – сякаш Π΄Ρ€ΡƒΠ³ (1.1), Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ "физичСски" Ρ‚ΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΎΠ±Ρ€Π°Π· ΠΎΡ‚ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°.

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π˜ΡΡ‚ΠΈΠ½ΡΠΊΠΈΡΡ‚ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ Π΅, Ρ‡Π΅ няма ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° merge commit-ΠΎΠ²Π΅, трябва Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ fast-forward.

МоТСм Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ трик… НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° прост Dockerfile:

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

Π©Π΅ построим Ρ„Π°ΠΉΠ» ΠΏΠΎ Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Ρ‡Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ:

  • SHA256 ΠΎΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ (ruby:2.3 ΠΈ nginx:alpine), ΠΊΠΎΠΈΡ‚ΠΎ са ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ суми Π½Π° тяхното ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅;
  • всички ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (RUN, CMD ΠΈ Ρ‚.Π½.);
  • SHA256 ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ бяха добавяни.

… ΠΈ Ρ‰Π΅ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π° сума (ΠΎΡ‚Π½ΠΎΠ²ΠΎ SHA256) ΠΎΡ‚ Ρ‚Π°ΠΊΡŠΠ² Ρ„Π°ΠΉΠ». Π’ΠΎΠ²Π° Π΅ сигнатура Π½Π° всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ опрСдСля ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Docker-ΠΎΠ±Ρ€Π°Π·Π°.

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

НСка сС Π²ΡŠΡ€Π½Π΅ΠΌ към схСмата ΠΈ вмСсто ΠΊΠΎΠΌΠΈΡ‚ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚Π°ΠΊΠΈΠ²Π° сигнатури, Ρ‚.Π΅. Π΄Π° Ρ‚Π°Π³ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ с сигнатури.

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° 'сливамС' измСнСния ΠΎΡ‚ Ρ€Π΅Π»ΠΈΠ· Π² master, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ истински merge commit: Ρ‚ΠΎΠΉ Ρ‰Π΅ ΠΈΠΌΠ° Π΄Ρ€ΡƒΠ³ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½ΠΎ ΡΡŠΡ‰Π°Ρ‚Π° сигнатура. Π‘ Ρ‚Π°ΠΊΡŠΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° пуснСм ΠΎΠ±Ρ€Π°Π·Π° ΠΈ Π½Π° продукция.

ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊΡŠΡ‚ Π΅, Ρ‡Π΅ сСга Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ какъв ΠΊΠΎΠΌΠΈΡ‚ Π΅ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ Π½Π° продукция β€” ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ суми работят само Π² Π΅Π΄Π½Π° посока. Π’ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ сС Ρ€Π΅ΡˆΠ°Π²Π° с Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ слой с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ β€” ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΏΠΎ-късно.

Π’Π°Π³ΠΈΡ€Π°Π½Π΅ Π² werf

Π’ werf ΠΎΡ‚ΠΈΠ΄ΠΎΡ…ΠΌΠ΅ ΠΎΡ‰Π΅ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ‡ ΠΈ сС Π³ΠΎΡ‚Π²ΠΈΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° компилация с кСш, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½Π° Π΅Π΄Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°β€¦ И Ρ‚Π°ΠΊΠ°, създавамС Docker-ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΎΡ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°Ρ€ΠΈΡ‡Π°ΠΌΠ΅ ΠΈ Π΄Π° разпространяватС обновлСния Π² Π½Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΈ разпространСниСто Π² ΠΊΠ°Π½Π°Π»ΠΈΡ‚Π΅ ΠΈ image.

Π’ Git рСпозитория werf сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ спСцифични инструкции Π·Π° компилация, описващи Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° компилацията (beforeInstall, инсталиранС, прСдиНастройка, настройка). ΠŸΡŠΡ€Π²ΠΈΡΡ‚ stage-ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΌΠ΅ със сигнатура, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π° сума Π½Π° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡ‚Π΅ ΡΡ‚ΡŠΠΏΠΊΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° добавямС изходния ΠΊΠΎΠ΄, Π·Π° новия stage-ΠΎΠ±Ρ€Π°Π· смятамС Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π° сума… Π’Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сС повтарят Π·Π° всички Π΅Ρ‚Π°ΠΏΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ stage-ΠΎΠ±Ρ€Π°Π·ΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈΠΌ Ρ„ΠΈΠ½Π°Π»Π΅Π½ image-ΠΎΠ±Ρ€Π°Π·, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ ΡΡŠΡ‰ΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π·Π° нСговия ΠΏΡ€ΠΎΠΈΠ·Ρ…ΠΎΠ΄. И ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Ρ€Π°Π· Ρ‚Π°Π³ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ (подробности ΠΏΠΎ-късно).

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

НСка слСд Ρ‚ΠΎΠ²Π° сС появи Π½ΠΎΠ² ΠΊΠΎΠΌΠΈΡ‚, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ само ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Какво Ρ‰Π΅ сС случи? Π—Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ΄Π° Ρ‰Π΅ бъдС създадСн ΠΏΠ°Ρ‚Ρ‡, ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π½ΠΎΠ² stage-ΠΈΠΌΠΈΠ΄ΠΆ. НСговият подпис Ρ‰Π΅ бъдС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π° сума Π½Π° стария stage-ΠΈΠΌΠΈΠ΄ΠΆ ΠΈ новия ΠΏΠ°Ρ‚Ρ‡. ΠžΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΈΠΌΠΈΠ΄ΠΆ Ρ‰Π΅ бъдС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½ Π½ΠΎΠ² Ρ„ΠΈΠ½Π°Π»Π΅Π½ image-ΠΈΠΌΠΈΠ΄ΠΆ. Аналогично ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‰Π΅ сС случи ΠΏΡ€ΠΈ измСнСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Π΅Ρ‚Π°ΠΏΠΈ.

Π’Π°ΠΊΠ° stage-ΠΈΠΌΠΈΠ΄ΠΆΠΈΡ‚Π΅ са кСш, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ image-ΠΈΠΌΠΈΠ΄ΠΆΠΈ сС ΠΊΠ°Ρ‡Π²Π°Ρ‚ Π² Docker Registry.

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

ΠŸΠΎΡ‡ΠΈΡΡ‚Π²Π°Π½Π΅ Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°

Π‘Ρ‚Π°Π²Π° Π²ΡŠΠΏΡ€ΠΎΡ Π½Π΅ Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° слоСвС, ΠΊΠΎΠΈΡ‚ΠΎ остават висящи слСд ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ Ρ‚Π°Π³ΠΎΠ²Π΅, β€” Ρ‚ΠΎΠ²Π° Π΅ стандартна Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π½Π° самия Docker Registry. Π‘Ρ‚Π°Π²Π° Π΄ΡƒΠΌΠ° Π·Π° ситуация, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ²Π°Ρ‚ мноТСство Docker-Ρ‚Π°Π³ΠΎΠ²Π΅ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ част ΠΎΡ‚ тях Π½Π΅ са Π½ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ, Π° Π·Π°Π΅ΠΌΠ°Ρ‚ място (ΠΈ/ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‰Π°ΠΌΠ΅ Π·Π° Π½Π΅Π³ΠΎ).

Какви стратСгии Π·Π° почистванС ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚?

  1. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ чистим. Понякога наистина Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΏΠ»Π°Ρ‚ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ Π·Π° ΠΈΠ·Π»ΠΈΡˆΠ½ΠΎΡ‚ΠΎ пространство, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° Ρ€Π°Π·ΠΏΠ»Π΅Ρ‚Π° ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ ΠΊΠ»ΡƒΠ±ΡŠΠΊ ΠΎΡ‚ Ρ‚Π°Π³ΠΎΠ²Π΅. Но Ρ‚ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ само Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚.
  2. ПълСн рСсСт. Ако ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ всички ΠΈΠΌΠΈΠ΄ΠΆΠΈ ΠΈ ΠΏΡ€Π΅ΡΡŠΠ·Π΄Π°Π΄Π΅ΠΌ само Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ Π² CI-систСмата, ΠΌΠΎΠΆΠ΅ Π΄Π° сС появи ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Ако Π½Π° продукция сС рСстартира ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π·Π° Π½Π΅Π³ΠΎ Ρ‰Π΅ сС Π·Π°Ρ€Π΅Π΄ΠΈ Π½ΠΎΠ² ΠΈΠΌΠΈΠ΄ΠΆ β€” Ρ‚Π°ΠΊΡŠΠ², ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‰Π΅ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΅ тСствал. Π’ΠΎΠ²Π° ΡƒΠ±ΠΈΠ²Π° идСята Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π° инфраструктура.
  3. Blue-green. Π•Π΄ΠΈΠ½ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° ΠΏΡ€Π΅Π»ΠΈΠ²Π° β€” ΠΊΠ°Ρ‡Π²Π°ΠΌΠ΅ ΠΈΠΌΠΈΠ΄ΠΆΠΈ Π² Π΄Ρ€ΡƒΠ³. Π‘ΡŠΡ‰ΠΈΡΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΠΊΡ‚ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄: Π² ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° почистим Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° ΠΏΡ€Π΅Π»ΠΈΠ²Π°?
  4. По Π²Ρ€Π΅ΠΌΠ΅. Π”Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ всички ΠΈΠΌΠΈΠ΄ΠΆΠΈ ΠΏΠΎ-стари ΠΎΡ‚ 1 мСсСц? Но Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ ΠΈΠΌΠ° услуга, която Π½Π΅ Π΅ обновявана цял мСсСц…
  5. Π ΡŠΡ‡Π½ΠΎ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅.

Наистина ТизнСспособни Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ са Π΄Π²Π°: Π΄Π° Π½Π΅ чистим ΠΈΠ»ΠΈ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ blue-green + Ρ€ΡŠΡ‡Π½ΠΎ. Π’ послСдния случай става Π΄ΡƒΠΌΠ° Π·Π° слСдното: ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° почиститС Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°, ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Π½ΠΎΠ² ΠΈ добавятС всички Π½ΠΎΠ²ΠΈ ΠΈΠΌΠΈΠ΄ΠΆΠΈ Π² Π½Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° мСсСц. А слСд мСсСц Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΠΊΠΎΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² Kubernetes всС ΠΎΡ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ стария Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ ΠΈ Π³ΠΈ прСмСстватС ΠΈ Π² новия Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€.

Π”ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ стигнахмС Π² werf? ΠœΡ‹ собираСм:

  1. Git head: всички Ρ‚Π°Π³ΠΎΠ²Π΅, всички ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, β€” ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΠΊΠΈ, Ρ‡Π΅ всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ Π² Git, Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈ Π² ΠΈΠΌΠΈΠ΄ΠΆΠΈΡ‚Π΅ (Π° Π°ΠΊΠΎ Π½Π΅, трябва Π΄Π° сС ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ Π² самия Git);
  2. всички pod’и, ΠΊΠΎΠΈΡ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° са ΠΊΠ°Ρ‡Π΅Π½ΠΈ Π² Kubernetes;
  3. стари ReplicaSet’и (Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ наскоро бСшС ΠΊΠ°Ρ‡Π΅Π½ΠΎ), Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° сканирамС Helm-Ρ€Π΅Π»ΠΈΠ·ΠΈΡ‚Π΅ ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ послСднитС ΠΎΠ±Ρ€Π°Π·ΠΈ Ρ‚Π°ΠΌ.

… ΠΈ ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Π½Π°Π±ΠΎΡ€ whitelist β€” списък с ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ няма Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅. Всичко останало почиствамС, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ осиротСли stage-ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΈ Π³ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅ ΡΡŠΡ‰ΠΎ.

Π•Ρ‚Π°ΠΏ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ (deploy)

НадСТдна дСкларативност

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Π±ΠΈΡ… искал Π΄Π° ΠΎΠ±ΡŠΡ€Π½Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² дСплоя, Π΅ изтСглянСто Π½Π° ΠΎΠ±Π½ΠΎΠ²Π΅Π½Π°Ρ‚Π° конфигурация Π½Π° рСсурситС, обявСна Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΡ‚ YAML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с описаниС Π½Π° Kubernetes-рСсурситС Π²ΠΈΠ½Π°Π³ΠΈ силно сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Kubernetes добавя Π² конфигурацията:

  1. ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ;
  2. слуТСбна информация;
  3. мноТСство стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅;
  4. сСкция с Ρ‚Π΅ΠΊΡƒΡ‰ статус;
  5. ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° admission webhook;
  6. Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ (ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°).

Π—Π°Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС появи Π½ΠΎΠ²Π° конфигурация Π½Π° рСсурс (Π½ΠΎΠ²), Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈ ΠΏΡ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π°, 'ΠΆΠΈΠ²Π°', конфигурация (live). Π—Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ трябва Π΄Π° сравним Π½ΠΎΠ² с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π°Ρ‚Π° конфигурация ('last-applied') ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ live получСния ΠΏΠ°Ρ‚Ρ‡.

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сС Π½Π°Ρ€ΠΈΡ‡Π° 2-way merge.Π’ΠΎΠΉ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Helm.

Има ΠΈ 3-way merge,ΠΊΠΎΠΉΡ‚ΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅:

  • ΠΏΡ€ΠΈ сравняванС 'last-applied' ΠΈ Π½ΠΎΠ², Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π±ΠΈΠ»ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΎ;
  • ΠΏΡ€ΠΈ сравняванС Π½ΠΎΠ² ΠΈ live, Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ;
  • сумарният ΠΏΠ°Ρ‚Ρ‡ Π½Π°Π»Π°Π³Π°ΠΌΠ΅ Π½Π° live.

Π”Π΅ΠΏΠ»ΠΎΠΉΠ²Π°ΠΌΠ΅ 1000+ прилоТСния с Helm, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΆΠΈΠ²Π΅Π΅ΠΌ с 2-way merge. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠΉ ΠΈΠΌΠ° Ρ€Π΅Π΄ΠΈΡ†Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ с Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠ°Ρ‚Ρ‡ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π½Π° Helm Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ.

Π Π΅Π°Π»Π΅Π½ статус Π½Π° изтСглянСто

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ€Π΅Π΄Π½ΠΎ ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Π½Π°ΡˆΠ°Ρ‚Π° CI-систСма Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½ΠΎΠ²Π° конфигурация Π·Π° Kubernetes, тя я ΠΏΡ€Π΅Π΄Π°Π²Π° Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ (apply) Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° β€” с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Helm ΠΈΠ»ΠΈ kubectl apply. Π‘Π»Π΅Π΄Π²Π° Π²Π΅Ρ‡Π΅ описаният N-way merge, Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Kubernetes API ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ отговаря Π½Π° CI-систСмата, Π° тя β€” Π½Π° своя ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π».

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Но ΠΈΠΌΠ° ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ изтСглянС.Ако Kubernetes Π΅ Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π» ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΈ Π³ΠΈ ΠΏΡ€ΠΈΠ»Π°Π³Π° β€” Π½ΠΈΠ΅ всС ΠΎΡ‰Π΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ какъв Ρ‰Π΅ бъдС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚. НапримСр, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ рСстарт Π½Π° pod’овСтС във frontend’а ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΠΈΠ½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π° Π² backend’а β€” Π½Π΅, ΠΈ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° стартиранитС ΠΎΠ±Ρ€Π°Π·ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π—Π° Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ всичко ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Π² Ρ‚Π°Π·ΠΈ схСма Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π²Π΅Π½ΠΎ β€” спСциалСн Ρ‚Ρ€Π°ΠΊΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° информация ΠΎΡ‚ Kubernetes API Π·Π° статуса ΠΈ Ρ‰Π΅ я ΠΏΡ€Π΅Π΄Π°Π²Π° Π·Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ€Π΅Π°Π»Π½Π°Ρ‚Π° ситуация. Π‘ΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π½Π° Go β€” kubedog (Π²ΠΆ. Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ анонсиранС Ρ‚ΡƒΠΊ.), β€” която Ρ€Π΅ΡˆΠ°Π²Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π° Π² werf.

ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ‚Ρ€Π°ΠΊΠ΅Ρ€ Π½Π° Π½ΠΈΠ²ΠΎ werf сС настройва с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС поставят Π½Π° Deployments ΠΈΠ»ΠΈ StatefulSets. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° анотация β€” fail-mode β€” Ρ€Π°Π·Π±ΠΈΡ€Π° слСднитС стойности:

  • IgnoreAndContinueDeployProcess β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΈ внСдряванСто Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°Π½Π΅ Π½Π° дСплоя;
  • FailWholeDeployProcessImmediately β€” Π³Ρ€Π΅ΡˆΠΊΠ° Π² Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ спира процСса Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ;
  • HopeUntilEndOfDeployProcess β€” Π½Π°Π΄Π΅ΠΆΠ΄Π°, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ‰Π΅ Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎ края Π½Π° дСплоя.

НапримСр, Ρ‚Π°ΠΊΠ°Π²Π° комбинация ΠΎΡ‚ рСсурси ΠΈ стойности Π½Π° анотация fail-mode:

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

ΠšΠΎΠ³Π°Ρ‚ΠΎ внСдрявамС Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚, Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ (MongoDB) всС ΠΎΡ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ Π³ΠΎΡ‚ΠΎΠ²Π° β€” Deployment-ΠΈΡ‚Π΅ Ρ‰Π΅ ΠΏΠ°Π΄Π½Π°Ρ‚. Но ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ тя сС стартира, ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ всС ΠΏΠ°ΠΊ Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅.

Има ΠΎΡ‰Π΅ Π΄Π²Π΅ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π·Π° kubedog Π² werf:

  • failures-allowed-per-replica β€” Π±Ρ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ падСния Π½Π° всяка Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°;
  • show-logs-until β€” Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π΄ΠΎ ΠΊΠΎΠΉΡ‚ΠΎ werf ΠΏΠΎΠΊΠ°Π·Π²Π° (Π² stdout) Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚ всички внСдрявани pod-ΠΎΠ²Π΅. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‚ΠΎΠ²Π° Π΅ PodIsReady (Π·Π° Π΄Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π΅Π΄Π²Π° Π»ΠΈ Ρ‰Π΅ Π½ΠΈ трябват, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π° pod Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° ΠΈΠ΄Π²Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ), Π½ΠΎ са допустими ΡΡŠΡ‰ΠΎ стойности ControllerIsReady ΠΈ EndOfDeploy.

Какво ΠΎΡ‰Π΅ искамС ΠΎΡ‚ дСплоя?

ОсвСн Π²Π΅Ρ‡Π΅ описанитС Π΄Π²Π° ΠΏΡƒΠ½ΠΊΡ‚Π°, Π±ΠΈΡ…ΠΌΠ΅ искали:

  • Π΄Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ β€” ΠΈ Ρ‚ΠΎ само Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅, Π° Π½Π΅ всичкитС.
  • Π΄Π° слСдим прогрСса, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π°ΠΊΠΎ job β€žΠΌΡŠΠ»Ρ‡ΠΈβ€œ няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС случва;
  • Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½ ΠΎΡ‚ΠΊΠ°Ρ‚ Π² случай, Ρ‡Π΅ Π½Π΅Ρ‰ΠΎ сС ΠΎΠ±ΡŠΡ€ΠΊΠ° (ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π΄Π° Π·Π½Π°Π΅ΠΌ рСалния статус Π½Π° дСплоя). ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° внСдряванС трябва Π΄Π° бъдС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π΅Π½: ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° Π΄ΠΎ края, ΠΈΠ»ΠΈ всичко сС Π²Ρ€ΡŠΡ‰Π° Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.

Π˜Ρ‚ΠΎΠ³

ΠšΠ°Ρ‚ΠΎ компания, Π·Π° Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ всички описани нюанси Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° доставка (build, publish, deploy), Π½ΠΈ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π° CI-систСма ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°. werf.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

werf β€” Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° werf Π½Π°ΠΏΡ€Π΅Π΄Π½Π°Ρ…ΠΌΠ΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ΠΎ Π² Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π΄ΠΈΡ†Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ ΠΈ Ρ‰Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌΠ΅, Π°ΠΊΠΎ ΠΏΠΎ-ΡˆΠΈΡ€ΠΎΠΊΠΎΡ‚ΠΎ общСство ΠΏΠΎΠ½Π΅ ΠΎΠΏΠΈΡ‚Π° Ρ‚Π°Π·ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π² дСйствиС. Π”Π° постигнСм Π΄ΠΎΠ±Ρ€ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π·Π°Π΅Π΄Π½ΠΎ Ρ‰Π΅ бъдС ΠΏΠΎ-лСсно.

Π’ΠΈΠ΄Π΅ΠΎ ΠΈ слайдовС

Π’ΠΈΠ΄Π΅ΠΎ ΠΎΡ‚ прСдставянСто (~47 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ):

Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΠΈ Π²ΠΈΠ΄Π΅ΠΎ

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

P.S.

Π”Ρ€ΡƒΠ³ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π·Π° Kubernetes Π² нашия Π±Π»ΠΎΠ³:

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

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