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

27 ΠΌΠ°ΠΉ Π² Π³Π»Π°Π²Π½Π°Ρ‚Π° Π·Π°Π»Π° Π½Π° конфСрСнцията DevOpsConf 2019, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ фСстивала RIT++ 2019, ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π»Π° β€žΠΠ΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚Π° Π΄ΠΎΡΡ‚Π°Π²ΠΊΠ°β€œ, бСшС Π΄Π°Π΄Π΅Π½ Π΄ΠΎΠΊΠ»Π°Π΄ β€žwerf - Π½Π°ΡˆΠΈΡΡ‚ инструмСнт Π·Π° CI/CD Π² Kubernetesβ€œ. Π“ΠΎΠ²ΠΎΡ€ΠΈ сС Π·Π° Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ прСдизвикатСлства, ΠΏΡ€Π΅Π΄ ΠΊΠΎΠΈΡ‚ΠΎ всСки сС изправя ΠΏΡ€ΠΈ внСдряванСто Π² Kubernetes, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π·Π° нюанси, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ сС забСлязват Π²Π΅Π΄Π½Π°Π³Π°. Анализирайки Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Π² инструмСнт с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ werf.

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

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

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

ДоставянС Π½Π° ΠΊΠΎΠ΄ Π½Π° Kubernetes

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

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

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

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

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

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

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

Π•Ρ‚Π°ΠΏ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅

ИзглСТда, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Docker изобраТСния ΠΏΡ€Π΅Π· 2019 Π³., ΠΊΠΎΠ³Π°Ρ‚ΠΎ всСки Π·Π½Π°Π΅ ΠΊΠ°ΠΊ Π΄Π° напишС Dockerfiles ΠΈ Π΄Π° стартира docker build?.. Π•Ρ‚ΠΎ Π½ΡŽΠ°Π½ΡΠΈΡ‚Π΅, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π±ΠΈΡ… искал Π΄Π° ΠΎΠ±ΡŠΡ€Π½Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:

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

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

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

А Π΅Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅:

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

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

БглобяванС в werf

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

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, Π·Π°Ρ‰Ρ€ΠΈΡ…ΠΎΠ²Π°Π½ΠΈ Π² синьо, Π²Π΅Ρ‡Π΅ са изпълнСни, ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ хост, Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈ Π² ΠΆΡŠΠ»Ρ‚ΠΎ, сС ΠΏΠ»Π°Π½ΠΈΡ€Π° Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΈ Π΄ΠΎ края Π½Π° лятото.

Π•Ρ‚Π°ΠΏ Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° (ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅)

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

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

Π—Π° нас ΡΡŠΡ‰ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Ρ…ΠΎΠ΄Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ искамС Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΎΡ‚ ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΈΡ‚ Π΅ създадСно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ Π² Kubernetes (Ρ‚ΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π΅Ρ‰Π°).

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

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

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

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

Вторият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ - git commit + Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚. Главният ΠΊΠ»ΠΎΠ½ ΠΈΠΌΠ° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ 1.0; Π·Π° Π½Π΅Π³ΠΎ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° - ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ Π² производството. Π’ допълнСниС, ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΡŠΡ‚ Π½Π° Kubernetes ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΈ Π·Π° Π΅Ρ‚Π°ΠΏΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° слСдвамС Gitflow: Π² основния ΠΊΠ»ΠΎΠ½ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (develop) създавамС Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° #c1. НиС Π³ΠΎ ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΈ Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (#c1). Бъс ΡΡŠΡ‰ΠΈΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ пускамС Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΡ€Π΅Π³Π»Π΅Π΄. НиС ΠΏΡ€Π°Π²ΠΈΠΌ ΡΡŠΡ‰ΠΎΡ‚ΠΎ с Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ #c2 ΠΈ #c3.

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

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

Има Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ, Ρ‡Π΅ само Π΅Π΄Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сС ΠΊΠ°Ρ‡Π²Π° Π² Π΅Ρ‚Π°ΠΏΠ° (#c25), Π° Π² производството Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ (1.1), Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ β€žΡ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΠΈβ€œ Ρ‚ΠΎΠ²Π° са Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°.

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

Π˜ΡΡ‚ΠΈΠ½ΡΠΊΠΈΡΡ‚ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ Π΅, Ρ‡Π΅ няма ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ Π·Π° сливанС, трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π±ΡŠΡ€Π·ΠΎ ΠΏΡ€Π΅Π²ΡŠΡ€Ρ‚Π°Π½Π΅ Π½Π°ΠΏΡ€Π΅Π΄.

МоТСм Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅ΠΌ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ‡ ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Ρ€ΠΈΠΊ... НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° прост 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, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ€Π΅Π°Π»Π½ΠΎ обСдиняванС: Ρ‚ΠΎ Ρ‰Π΅ ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½ΠΎ ΡΡŠΡ‰ΠΈΡ подпис. Бъс ΡΡŠΡ‰ΠΈΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‰Π΅ Π²Π½Π΅Π΄Ρ€ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² продукцията.

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

ΠœΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ Π² werf

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

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

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

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

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ сцСничнитС изобраТСния са кСш, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Π° Π²Π΅Ρ‡Π΅ ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ изобраТСния сС ΠΊΠ°Ρ‡Π²Π°Ρ‚ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° Docker.

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

ΠŸΠΎΡ‡ΠΈΡΡ‚Π²Π°Π½Π΅ Π½Π° систСмния Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€

НС Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° слоСвС, ΠΊΠΎΠΈΡ‚ΠΎ са останали висящи слСд ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ - Ρ‚ΠΎΠ²Π° Π΅ стандартна функция Π½Π° самия Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½Π° Docker. Π“ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ситуация, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Docker Ρ‚Π°Π³ΠΎΠ²Π΅ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ Π½Π΅ Π½ΠΈ трябват някои ΠΎΡ‚ тях, Π½ΠΎ Π·Π°Π΅ΠΌΠ°Ρ‚ място (ΠΈ/ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‰Π°ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ²Π°).

Какви са стратСгиитС Π·Π° почистванС?

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

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

Π”ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ стигнахмС werf? НиС ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅:

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

... ΠΈ Π½Π°ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ бял списък ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Π½Π°Π±ΠΎΡ€ - списък с изобраТСния, ΠΊΠΎΠΈΡ‚ΠΎ няма Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ. Π˜Π·Ρ‡ΠΈΡΡ‚Π²Π°ΠΌΠ΅ всичко останало, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ осиротСли сцСнични изобраТСния ΠΈ Π³ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅.

Π•Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅

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

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

  1. ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ;
  2. сСрвизна информация;
  3. ΠΌΠ½ΠΎΠ³ΠΎ стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅;
  4. Ρ€Π°Π·Π΄Π΅Π» с Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅;
  5. ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ webhook Π·Π° допусканС;
  6. Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ (ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΠ°).

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС появи Π½ΠΎΠ²Π° конфигурация Π½Π° рСсурс (Π½ΠΎΠ²), Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈ ΠΏΡ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π°, β€žΠΆΠΈΠ²Π°β€œ конфигурация с Π½Π΅Π³ΠΎ (ТивСя). Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, Ρ‰Π΅ трябва Π΄Π° сравним Π½ΠΎΠ² с послСдната ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π° конфигурация (послСдно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΎ) ΠΈ сС Π½Π°Π²ΠΈΠΉΡ‚Π΅ ТивСя ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ пластир.

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сС Π½Π°Ρ€ΠΈΡ‡Π° 2-посочно сливанС. Използва сС Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π₯Π΅Π»ΠΌ.

Има ΠΈ 3-посочно сливанС, която сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΏΠΎ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅:

  • сравняванС послСдно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΎ ΠΈ Π½ΠΎΠ², Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΎ;
  • сравняванС Π½ΠΎΠ² ΠΈ ТивСя, Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΎ;
  • сумираният пластир сС ΠΏΡ€ΠΈΠ»Π°Π³Π° към ТивСя.

Π Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ Π½Π°Π΄ 1000 прилоТСния с Helm, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΆΠΈΠ²Π΅Π΅ΠΌ с двупосочно сливанС. Π’ΠΎΠΉ ΠΎΠ±Π°Ρ‡Π΅ ΠΈΠΌΠ° Ρ€Π΅Π΄ΠΈΡ†Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ смС Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ с Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠ°Ρ‡ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π½Π° Helm Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ.

Π Π΅Π°Π»Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° разпространСниС

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° CI систСма Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½ΠΎΠ²Π° конфигурация Π·Π° Kubernetes въз основа Π½Π° слСдващото ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅, тя я ΠΏΡ€Π΅Π΄Π°Π²Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠΈ) към ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ - ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Helm ΠΈΠ»ΠΈ kubectl apply. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° сС случва Π²Π΅Ρ‡Π΅ описаното N-way сливанС, Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ API Π½Π° Kubernetes отговаря ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° CI систСмата, Π° Ρ‚ΠΎΠ²Π° Π½Π° нСйния ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π».

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

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

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

ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ инструмСнт Π·Π° прослСдяванС Π½Π° Π½ΠΈΠ²ΠΎ werf сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС поставят Π² Deployments ΠΈΠ»ΠΈ StatefulSets. Основна анотация - fail-mode - Ρ€Π°Π·Π±ΠΈΡ€Π° слСднитС значСния:

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

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

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

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

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

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

Какво ΠΎΡ‰Π΅ искамС ΠΎΡ‚ внСдряванСто?

Π’ допълнСниС към Π²Π΅Ρ‡Π΅ описанитС Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π±ΠΈΡ…ΠΌΠ΅ искали:

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

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚

Π—Π° нас ΠΊΠ°Ρ‚ΠΎ компания, Π·Π° Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ всички описани нюанси Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° доставка (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅, внСдряванС), са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ CI систСма ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° werf.

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

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

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

Π’ΠΈΠ΄Π΅ΠΎΠΊΠ»ΠΈΠΏΠΎΠ²Π΅ ΠΈ слайдовС

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

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π°:

PS

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

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

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