ΠΠ° 27 ΠΌΠ°ΠΉ Π² Π³Π»Π°Π²Π½Π°ΡΠ° Π·Π°Π»Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° DevOpsConf 2019, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΡΠΈΠ²Π°Π»Π° , Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° βΠΠ΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°β, Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π΄ΠΎΠΊΠ»Π°Π΄ΡΡ βwerf β Π½Π°ΡΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° CI/CD Π² Kubernetesβ. Π Π½Π΅Π³ΠΎ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈ Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΠΈ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅Π»ΡΡΠ²Π°ΡΠ°, Ρ ΠΊΠΎΠΈΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ²Π° ΠΏΡΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π°Π½Π΅ΡΠΎ Π² Kubernetes, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π·Π° Π½ΡΠ°Π½ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΡΠ΅ Π·Π°Π±Π΅Π»ΡΠ·Π²Π°Ρ Π²Π΅Π΄Π½Π°Π³Π°. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ ΡΠΎΠ²Π° Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Π² Open Source ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° .
Π‘Π»Π΅Π΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½ΠΈ, Π½Π°ΡΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ (ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΡΠΎ dapp) ΠΏΡΠ΅ΠΌΠΈΠ½Π° ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠ°Π³ ΠΎΡ 1000 Π·Π²Π΅Π·Π΄ΠΈ Π² GitHub β Π½ΠΈΠ΅ ΡΠ΅ Π½Π°Π΄ΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΡΠ°ΡΡΡΡΠ°ΡΠ° ΠΎΠ±ΡΠ½ΠΎΡΡ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ΅ ΡΠ»Π΅ΡΠ½ΠΈ ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ.

Π ΡΠ°ΠΊΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌΠ΅ (~47 ΠΌΠΈΠ½ΡΡΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠ°) ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΡΡΠ½ΠΎΡΡ ΠΎΡ Π½Π΅Π³ΠΎ Π² ΡΠ΅ΠΊΡΡΠΎΠ² ΡΠΎΡΠΌΠ°Ρ. ΠΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ!
ΠΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠ΄ Π² Kubernetes
Π Π΄ΠΎΠΊΠ»Π°Π΄Π° ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π·Π° werf, Π° Π·Π° CI/CD Π² Kubernetes, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΠΊΠΈ, ΡΠ΅ Π½Π°ΡΠΈΡΡ ΡΠΎΡΡΡΠ΅Ρ Π΅ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ Π² Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ (Π·Π° ΡΠΎΠ²Π° Π³ΠΎΠ²ΠΎΡΡ Π² ), ΠΈ K8s ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ (Π·Π° ΡΠΎΠ²Π° β Π² ).
ΠΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° Π² Kubernetes?
- ΠΠΌΠ° Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ Ρ ΠΊΠΎΠ΄ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° Π² Docker ΠΎΠ±ΡΠ°Π· ΠΈ ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° Π² Docker Registry.
- Π ΡΡΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ ΠΈΠΌΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π° ΠΈ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ° Π΅ΡΠ°ΠΏΠ° Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π°Π½Π΅ ΡΠ΅Π·ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π² Kubernetes, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π½ΡΠΆΠ½ΠΈΡ ΠΎΠ±ΡΠ°Π· ΠΎΡ registry ΠΈ Π³ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°.
- ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠΌΠ° ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΡΠΊΠΎΠΈ ΠΎΡ ΡΡΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π·Π°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ (ΠΏΠΎ ΡΡΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ) Π΄Π° ΡΠ΅ ΡΠ°Π·Π³ΡΡΠ½Π΅ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ (Π² ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° K8s ΠΈΠ»ΠΈ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ) ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ°ΠΌ.
- ΠΠ°ΠΊΡΠ°Ρ, Π½ΡΠΆΠ½Π° Π΅ CI ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΡΠ±ΠΈΡΠΈΡ ΠΎΡ Git (ΠΈΠ»ΠΈ Π½Π°ΡΠΈΡΠΊΠ°Π½ΠΈΡ Π½Π° Π±ΡΡΠΎΠ½ΠΈ) ΠΈ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈ Π΅ΡΠ°ΠΏΠΈ: build, publish, deploy, test.

Π’ΡΠΊ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈ:
- Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° (immutable infrastructure), ΠΎΠ±ΡΠ°Π·ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° Π²ΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ (staging, production ΠΈ Ρ.Π½.), ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π΅Π΄ΠΈΠ½. ΠΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π·Π° ΡΠΎΠ²Π° ΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΡΠΌ Π³ΠΎΠ²ΠΎΡΠΈΠ» .
- Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ»Π΅Π΄Π²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ (IaC), ΠΊΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π² ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΄ΠΈΠ½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ. ΠΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π·Π° ΡΠΎΠ²Π° β Π²ΠΈΠΆ Π² .
- Π¦Π΅ΠΏΠΎΡΠΊΠ°ΡΠ° Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° (delivery) ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Ρ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΠ°ΠΊΠ°: ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΡΡΠ±ΡΠ°Π½ΠΎ, ΡΠ΅ΡΡΠ²Π°Π½ΠΎ, ΡΠ΅Π»ΠΈΠ·Π½Π°ΡΠΎ (Π΅ΡΠ°ΠΏ release) ΠΈ Π²ΡΠΈΡΠΊΠΎ β Π΄ΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° Π΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½Π°. ΠΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ΅ ΠΏΡΡΠ½Π°Π»ΠΈ, Π½Π΅ ΠΊΠΎΠ³Π°ΡΠΎ Π²ΠΈΠ΅ ΡΡΠ΅ Π³ΠΎ Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π² production, Π° ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠΉ Π΅ ΠΌΠΎΠ³ΡΠ» Π΄Π° Π²Π»Π΅Π·Π΅ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π΅ ΡΠ°Π±ΠΎΡΠΈΠ»ΠΎ. ΠΠ°ΡΠΎΠ²Π° ΡΡΠΈΡΠ°ΠΌ, ΡΠ΅ Π²Π΅ΡΠΈΠ³Π°ΡΠ° Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΏΡΠΈΠΊΠ»ΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° Π΅ΠΊΡΠΏΠ»ΠΎΠ°ΡΠ°ΡΠΈΡ (run), Π° Π°ΠΊΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΠΎ-ΡΠΎΡΠ½ΠΎ, Π΄ΠΎΡΠΈ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠ΄ΡΡ Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°Ρ ΠΎΡ production (Π·Π°ΠΌΠ΅Π½ΡΠΉΠΊΠΈ Π³ΠΎ Ρ Π½ΠΎΠ²).
ΠΠ΅ΠΊΠ° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΏΠΎΡΠΎΡΠ΅Π½Π°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΡ Π΅ΠΌΠ° Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π² Kubernetes: ΡΡ Π΅ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½Π° Π½Π΅ ΡΠ°ΠΌΠΎ ΠΎΡ Π½Π°Ρ, Π½ΠΎ ΠΈ ΠΏΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ΅ΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°Π» Ρ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ·ΠΈ ΠΏΠ°ΡΡΡΠ½ ΡΠ΅Π³Π° Π½Π°ΡΠΈΡΠ°Ρ GitOps (ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠ΅ΡΠΌΠΈΠ½Π° ΠΈ ΡΡΠΎΡΡΠΈΡΠ΅ Π·Π°Π΄ Π½Π΅Π³ΠΎ ΠΈΠ΄Π΅ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ΅ ). ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅ΡΠ°ΠΏΠΈΡΠ΅ Π½Π° ΡΡ Π΅ΠΌΠ°ΡΠ°.
ΠΡΠ°ΠΏ Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ (build)
ΠΠ° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄, ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ ΠΏΡΠ΅Π· 2019 Π³. Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Docker ΠΎΠ±ΡΠ°Π·ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΠΌΠ΅ΡΡ Π΄Π° ΠΏΠΈΡΠ°Ρ Dockerfile-ΠΈ ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°Ρ docker build?.. ΠΠΎΡ Π½ΡΠ°Π½ΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:
- Π Π°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΎΠ±ΡΠ°Π·Π° ΠΈΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ , Π·Π° Π΄Π° ΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π² ΠΎΠ±ΡΠ°Π·Π° ΡΠ°ΠΌΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° Π½ΡΠΆΠ½ΠΎΡΠΎ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
- ΠΡΠΎΡΡ Π½Π° ΡΠ»ΠΎΠ΅Π²Π΅ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ Π²Π΅ΡΠΈΠ³ΠΈ ΠΎΡ
RUN-ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΠΎ ΡΠΌΠΈΡΡΠ». - ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π² ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π°Π» Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ Π½ΡΠΆΠ½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ Π²Π΅ΡΠΈΠ³Π°ΡΠ°, ΠΊΠΎΡΡΠΎ Π΅ ΠΏΡΠΈΡΠΈΠ½ΠΈΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
- Π‘ΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π΅ Π²Π°ΠΆΠ½Π°, Π·Π°ΡΠΎΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π±ΡΡΠ·ΠΎ Π΄Π° ΠΏΡΡΠΊΠ°ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΡΠ΅ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΠΌΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
- Π§Π΅ΡΡΠΎ ΠΎΡ Π΅Π΄ΠΈΠ½ Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ Ρ Π½Π°Π±ΠΎΡ ΠΎΡ Dockerfile-ΠΈ (ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ Π΅ΡΠ°ΠΏΠΈ Π² Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ») ΠΈ Bash ΡΠΊΡΠΈΠΏΡ Ρ ΡΡΡ Π½Π°ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°.
Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ Π²ΡΡΡ Π½Π° Π°ΠΉΡΠ±Π΅ΡΠ³Π°, Ρ ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ²Π°Ρ Π²ΡΠΈΡΠΊΠΈ. ΠΠΎ ΠΈΠΌΠ° ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:
- Π§Π΅ΡΡΠΎ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½ΠΈ Π΅ Π½ΡΠΆΠ½ΠΎ Π½Π΅ΡΠΎ Π΄Π° ΠΌΠΎΠ½ΡΠΈΡΠ°ΠΌΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΠΊΠ΅ΡΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΈΠΏ apt Π² Π²ΡΠ½ΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ).
- ΠΡΠΊΠ°ΠΌΠ΅ Ansible Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ Π½Π° shell-Π°.
- ΠΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°ΠΌΠ΅ Π±Π΅Π· Docker (Π·Π°ΡΠΎ Π½ΠΈ Π΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, Π² ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ Π²ΡΠΈΡΠΊΠΎ Π·Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΊΠ»ΡΡΡΠ΅Ρ Kubernetes, Π² ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ?).
- ΠΠ°ΡΠ°Π»Π΅Π»Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ° ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½: ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΎΡ Dockerfile (Π°ΠΊΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° multi-stage), Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠΌΠΈΡΠ° ΠΎΡ Π΅Π΄ΠΈΠ½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π½ΡΠΊΠΎΠ»ΠΊΠΎ Dockerfile-Π°.
- Π Π°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°: ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½Π΅ΡΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° βΠ΅ΡΠΈΠΌΠ΅ΡΠ½ΠΈβ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠ΅ΡΡΡ ΠΈΠ·ΡΠ΅Π·Π²Π°, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ β ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π½ΡΠΊΡΠ΄Π΅ ΠΎΡΠ΄Π΅Π»Π½ΠΎ.
- ΠΠ°ΠΊΡΠ°Ρ Π½Π°ΡΠ΅ΠΊΠΎΡ Π²ΡΡΡ Π° Π½Π° ΠΆΠ΅Π»Π°Π½ΠΈΡΡΠ° ΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ: ΠΈΠ΄Π΅Π°Π»Π½ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄Π° Π²Π»Π΅Π·Π΅ΠΌ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π³ΠΎΡΠΎΠ² ΠΎΠ±ΡΠ°Π·, ΡΡΠ±ΡΠ°Π½ Ρ ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΊΠ°ΠΊ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π»ΠΈΡΠ½ΠΎ Π°Π· Π½Π΅ ΡΡΠΌ ΡΠ±Π΅Π΄Π΅Π½, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½ΡΠ°Π½ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½.
Π ΡΠ°ΠΊΠ°, ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ:
- β ΡΠ±ΠΎΡΡΠΈΠΊ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Docker Inc (Π²Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ Π² Π°ΠΊΡΡΠ°Π»Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° Docker), ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΡΠ΅ΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ;
- β ΡΠ±ΠΎΡΡΠΈΠΊ ΠΎΡ Google, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π±Π΅Π· Docker;
- β ΠΎΠΏΠΈΡ Π½Π° CNCF Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ rebase Π·Π° ΡΠ»ΠΎΠ΅Π²Π΅;
- ΠΈ ΠΎΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, ΠΊΠ°ΡΠΎ , β¦
β¦ ΠΈ Π²ΠΈΠΆΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π·Π²Π΅Π·Π΄ΠΈ ΠΈΠΌΠ°Ρ Π² GitHub. Π’ΠΎΠ΅ΡΡ, ΠΎΡ Π΅Π΄Π½Π° ΡΡΡΠ°Π½Π°, docker build ΠΈΠΌΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π½Π΅ΡΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ, Π½ΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π²ΡΠΏΡΠΎΡΡΡ Π½Π΅ Π΅ ΡΠ΅ΡΠ΅Π½ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎ β Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΠ²ΠΎ Π·Π° ΡΠΎΠ²Π° Π΅ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎΡΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ Π½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΠ±ΠΎΡΡΠΈΠΊΠΈ, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΡΠ°Π²Π° ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅.
Π‘Π±ΠΎΡΠΊΠ° Π² werf
Π’Π°ΠΊΠ° ΡΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅ Π΄ΠΎ (ΠΏΡΠ΅Π΄ΠΈ ΠΊΠ°ΠΊΡΠΎ dapp) β Open Source ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ βΠ€Π»Π°Π½Ρβ, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΠΌΠ΅ Π²Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. ΠΡΠΈΡΠΊΠΎ Π·Π°ΠΏΠΎΡΠ½Π° ΠΏΡΠ΅Π΄ΠΈ 5 Π³ΠΎΠ΄ΠΈΠ½ΠΈ Ρ Bash ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠΈ ΡΡΠ±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Dockerfile-ΠΎΠ²Π΅, Π° ΠΏΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 3 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π° ΠΏΡΠ»Π½ΠΎΡΠ΅Π½Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½ Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ (ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π½Π° Ruby, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π½Π° Go, ΠΈ Π·Π°Π΅Π΄Π½ΠΎ Ρ ΡΠΎΠ²Π° ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½). ΠΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΡΡ ΡΠ±ΠΎΡΠΊΠ°ΡΠ° ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈ Π² werf?

ΠΠ°ΡΠ΅Π½ΡΠ΅Π½ΠΈΡΠ΅ Π² ΡΠΈΠ½ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π²Π΅ΡΠ΅ ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ, ΠΏΠ°ΡΠ°Π»Π΅Π»Π½Π°ΡΠ° ΡΠ±ΠΎΡΠΊΠ° Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ Ρ
ΠΎΡΡ, Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΠΆΡΠ»ΡΠΎ Π²ΡΠΏΡΠΎΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌΠ΅ Π΄Π° Π·Π°Π²ΡΡΡΠΈΠΌ Π΄ΠΎ ΠΊΡΠ°Ρ Π½Π° Π»ΡΡΠΎΡΠΎ.
Π€Π°Π·Π° Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ Π² 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.

ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΅, ΡΠ΅ ΠΏΡΡΠ²ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΡΠ°Π³Π°, Π° Π΅Π΄Π²Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΈ ΡΠ°Π·Π³ΡΡΡΠ°ΠΌΠ΅. ΠΠ°ΡΠΎ? ΠΡΡΠ²ΠΎ, ΡΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π»ΠΎΠ³ΠΈΡΠ½ΠΎ: ΠΈΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠΎΡΡΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠΌΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ (Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΈΠ½Π°ΡΠ΅, Π·Π°ΡΠΎΡΠΎ Π·Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΡΠ°Π³). ΠΡΠΎΡΠΎ, ΡΠΎΠ·ΠΈ ΠΏΡΡ Π½Π΅ ΡΡΠ²ΠΏΠ°Π΄Π° Ρ 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), Π½ΠΎ Π·Π½Π°Π΅ΠΌ, ΡΠ΅ "ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ" ΡΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΠΎΠ±ΡΠ°Π· ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΡΠ°.

ΠΡΡΠΈΠ½ΡΠΊΠΈΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ Π΅, ΡΠ΅ Π½ΡΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° 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-ΠΎΠ±ΡΠ°Π·Π°.

ΠΠ΅ΠΊΠ° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ ΡΡ
Π΅ΠΌΠ°ΡΠ° ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΌΠΈΡΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°ΠΊΠΈΠ²Π° ΡΠΈΠ³Π½Π°ΡΡΡΠΈ, Ρ.Π΅. Π΄Π° ΡΠ°Π³ΠΈΡΠ°ΠΌΠ΅ ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ Ρ ΡΠΈΠ³Π½Π°ΡΡΡΠΈ.

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° 'ΡΠ»ΠΈΠ²Π°ΠΌΠ΅' ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡ ΡΠ΅Π»ΠΈΠ· Π² master, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΈΡΡΠΈΠ½ΡΠΊΠΈ merge commit: ΡΠΎΠΉ ΡΠ΅ ΠΈΠΌΠ° Π΄ΡΡΠ³ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, Π½ΠΎ ΡΡΡΠ°ΡΠ° ΡΠΈΠ³Π½Π°ΡΡΡΠ°. Π‘ ΡΠ°ΠΊΡΠ² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΡΠ½Π΅ΠΌ ΠΎΠ±ΡΠ°Π·Π° ΠΈ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΠΊΡΡ Π΅, ΡΠ΅ ΡΠ΅Π³Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊΡΠ² ΠΊΠΎΠΌΠΈΡ Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ β ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΡΡ ΡΠ°ΠΌΠΎ Π² Π΅Π΄Π½Π° ΠΏΠΎΡΠΎΠΊΠ°. Π’ΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ»ΠΎΠΉ Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ β ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
Π’Π°Π³ΠΈΡΠ°Π½Π΅ Π² werf
Π werf ΠΎΡΠΈΠ΄ΠΎΡ ΠΌΠ΅ ΠΎΡΠ΅ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ ΠΈ ΡΠ΅ Π³ΠΎΡΠ²ΠΈΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Ρ ΠΊΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π½Π° Π΅Π΄Π½Π° ΠΌΠ°ΡΠΈΠ½Π°β¦ Π ΡΠ°ΠΊΠ°, ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Docker-ΠΎΠ±ΡΠ°Π·ΠΈ ΠΎΡ Π΄Π²Π° ΡΠΈΠΏΠ°, ΠΊΠΎΠΈΡΠΎ Π½Π°ΡΠΈΡΠ°ΠΌΠ΅ ΠΈ Π΄Π° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π² Π½Π΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΈ image.
Π Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ werf ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΠΎΠΏΠΈΡΠ²Π°ΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° (beforeInstall, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅, ΠΏΡΠ΅Π΄ΠΈΠΠ°ΡΡΡΠΎΠΉΠΊΠ°, Π½Π°ΡΡΡΠΎΠΉΠΊΠ°). ΠΡΡΠ²ΠΈΡΡ stage-ΠΎΠ±ΡΠ°Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΡΠΌΠ° Π½Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄, Π·Π° Π½ΠΎΠ²ΠΈΡ stage-ΠΎΠ±ΡΠ°Π· ΡΠΌΡΡΠ°ΠΌΠ΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΡΠΌΠ°β¦ Π’Π΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΡΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ stage-ΠΎΠ±ΡΠ°Π·ΠΈ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΈΠ½Π°Π»Π΅Π½ image-ΠΎΠ±ΡΠ°Π·, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΡΡΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΈΡ ΠΏΡΠΎΠΈΠ·Ρ ΠΎΠ΄. Π ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ·ΠΈ ΠΎΠ±ΡΠ°Π· ΡΠ°Π³ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ).

ΠΠ΅ΠΊΠ° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π½ΠΎΠ² ΠΊΠΎΠΌΠΈΡ, Π² ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ? ΠΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΊΠΎΠ΄Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΏΠ°ΡΡ, ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ Π½ΠΎΠ² stage-ΠΈΠΌΠΈΠ΄ΠΆ. ΠΠ΅Π³ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΡΠΌΠ° Π½Π° ΡΡΠ°ΡΠΈΡ stage-ΠΈΠΌΠΈΠ΄ΠΆ ΠΈ Π½ΠΎΠ²ΠΈΡ ΠΏΠ°ΡΡ. ΠΡ ΡΠΎΠ·ΠΈ ΠΈΠΌΠΈΠ΄ΠΆ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠΎΡΠΌΠΈΡΠ°Π½ Π½ΠΎΠ² ΡΠΈΠ½Π°Π»Π΅Π½ image-ΠΈΠΌΠΈΠ΄ΠΆ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π° Π΄ΡΡΠ³ΠΈ Π΅ΡΠ°ΠΏΠΈ.
Π’Π°ΠΊΠ° stage-ΠΈΠΌΠΈΠ΄ΠΆΠΈΡΠ΅ ΡΠ° ΠΊΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, Π° ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΎΡ Π½Π΅Π³ΠΎ image-ΠΈΠΌΠΈΠ΄ΠΆΠΈ ΡΠ΅ ΠΊΠ°ΡΠ²Π°Ρ Π² Docker Registry.

ΠΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΡΠ°
Π‘ΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π½Π΅ Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ»ΠΎΠ΅Π²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΎΡΡΠ°Π²Π°Ρ Π²ΠΈΡΡΡΠΈ ΡΠ»Π΅Π΄ ΠΈΠ·ΡΡΠΈΡΠΈ ΡΠ°Π³ΠΎΠ²Π΅, β ΡΠΎΠ²Π° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π° ΡΠ°ΠΌΠΈΡ Docker Registry. Π‘ΡΠ°Π²Π° Π΄ΡΠΌΠ° Π·Π° ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π½Π°ΡΡΡΠΏΠ²Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Docker-ΡΠ°Π³ΠΎΠ²Π΅ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΠ°ΡΡ ΠΎΡ ΡΡΡ Π½Π΅ ΡΠ° Π½ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ, Π° Π·Π°Π΅ΠΌΠ°Ρ ΠΌΡΡΡΠΎ (ΠΈ/ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΠ°ΠΌΠ΅ Π·Π° Π½Π΅Π³ΠΎ).
ΠΠ°ΠΊΠ²ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ?
- ΠΡΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΠΈΡΡΠΈΠΌ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΠΏΠ»Π°ΡΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ Π·Π° ΠΈΠ·Π»ΠΈΡΠ½ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄Π° ΡΠ°Π·ΠΏΠ»Π΅ΡΠ° ΠΎΠ³ΡΠΎΠΌΠ΅Π½ ΠΊΠ»ΡΠ±ΡΠΊ ΠΎΡ ΡΠ°Π³ΠΎΠ²Π΅. ΠΠΎ ΡΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ.
- ΠΡΠ»Π΅Π½ ΡΠ΅ΡΠ΅Ρ. ΠΠΊΠΎ ΠΈΠ·ΡΡΠΈΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΠΈΠΌΠΈΠ΄ΠΆΠΈ ΠΈ ΠΏΡΠ΅ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ°ΠΌΠΎ Π°ΠΊΡΡΠ°Π»Π½ΠΈΡΠ΅ Π² CI-ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠΊΠΎ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ ΡΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π·Π° Π½Π΅Π³ΠΎ ΡΠ΅ ΡΠ΅ Π·Π°ΡΠ΅Π΄ΠΈ Π½ΠΎΠ² ΠΈΠΌΠΈΠ΄ΠΆ β ΡΠ°ΠΊΡΠ², ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ΅ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΅ ΡΠ΅ΡΡΠ²Π°Π». Π’ΠΎΠ²Π° ΡΠ±ΠΈΠ²Π° ΠΈΠ΄Π΅ΡΡΠ° Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
- Blue-green. ΠΠ΄ΠΈΠ½ ΡΠ΅Π³ΠΈΡΡΡΡ Π·Π°ΠΏΠΎΡΠ½Π° Π΄Π° ΠΏΡΠ΅Π»ΠΈΠ²Π° β ΠΊΠ°ΡΠ²Π°ΠΌΠ΅ ΠΈΠΌΠΈΠ΄ΠΆΠΈ Π² Π΄ΡΡΠ³. Π‘ΡΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°ΠΊΡΠΎ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄: Π² ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΡΠΈΡΡΠΈΠΌ ΡΠ΅Π³ΠΈΡΡΡΡΠ°, ΠΊΠΎΠΉΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π° Π΄Π° ΠΏΡΠ΅Π»ΠΈΠ²Π°?
- ΠΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠ° ΠΈΠ·ΡΡΠΈΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΠΈΠΌΠΈΠ΄ΠΆΠΈ ΠΏΠΎ-ΡΡΠ°ΡΠΈ ΠΎΡ 1 ΠΌΠ΅ΡΠ΅Ρ? ΠΠΎ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΈΠΌΠ° ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΡΠΎ Π½Π΅ Π΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π° ΡΡΠ» ΠΌΠ΅ΡΠ΅Ρβ¦
- Π ΡΡΠ½ΠΎ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ΅.
ΠΠ°ΠΈΡΡΠΈΠ½Π° ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ ΡΠ° Π΄Π²Π°: Π΄Π° Π½Π΅ ΡΠΈΡΡΠΈΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ blue-green + ΡΡΡΠ½ΠΎ. Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠ°Π²Π° Π΄ΡΠΌΠ° Π·Π° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ: ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡΠ°, ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ Π½ΠΎΠ² ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½ΠΎΠ²ΠΈ ΠΈΠΌΠΈΠ΄ΠΆΠΈ Π² Π½Π΅Π³ΠΎ Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΌΠ΅ΡΠ΅Ρ. Π ΡΠ»Π΅Π΄ ΠΌΠ΅ΡΠ΅Ρ Π³Π»Π΅Π΄Π°ΡΠ΅ ΠΊΠΎΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π² Kubernetes Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΠ°ΡΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΈ Π³ΠΈ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΈ Π² Π½ΠΎΠ²ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ.
ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅ Π² werf? ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ:
- Git head: Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π³ΠΎΠ²Π΅, Π²ΡΠΈΡΠΊΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, β ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΠΊΠΈ, ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΎ Π² Git, Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈ Π² ΠΈΠΌΠΈΠ΄ΠΆΠΈΡΠ΅ (Π° Π°ΠΊΠΎ Π½Π΅, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ΅ Π² ΡΠ°ΠΌΠΈΡ Git);
- Π²ΡΠΈΡΠΊΠΈ podβΠΈ, ΠΊΠΎΠΈΡΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ° ΠΊΠ°ΡΠ΅Π½ΠΈ Π² Kubernetes;
- ΡΡΠ°ΡΠΈ ReplicaSetβΠΈ (ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΡΠΊΠΎΡΠΎ Π±Π΅ΡΠ΅ ΠΊΠ°ΡΠ΅Π½ΠΎ), Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΠΊΠ°Π½ΠΈΡΠ°ΠΌΠ΅ Helm-ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ΅ ΠΈ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π·ΠΈ ΡΠ°ΠΌ.
β¦ ΠΈ ΠΏΡΠ°Π²ΠΈΠΌ ΠΎΡ ΡΠΎΠ·ΠΈ Π½Π°Π±ΠΎΡ whitelist β ΡΠΏΠΈΡΡΠΊ Ρ ΠΎΠ±ΡΠ°Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ° Π΄Π° ΠΈΠ·ΡΡΠΈΠ²Π°ΠΌΠ΅. ΠΡΠΈΡΠΊΠΎ ΠΎΡΡΠ°Π½Π°Π»ΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°ΠΌΠ΅, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΠΌΠΈΡΠ°ΠΌΠ΅ ΠΎΡΠΈΡΠΎΡΠ΅Π»ΠΈ stage-ΠΎΠ±ΡΠ°Π·ΠΈ ΠΈ Π³ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°ΠΌΠ΅ ΡΡΡΠΎ.
ΠΡΠ°ΠΏ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ (deploy)
ΠΠ°Π΄Π΅ΠΆΠ΄Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΡΡ
ΠΡΡΠ²ΠΈΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΠΉΡΠΎ Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΠΎΠ±ΡΡΠ½Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² Π΄Π΅ΠΏΠ»ΠΎΡ, Π΅ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π΅Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅, ΠΎΠ±ΡΠ²Π΅Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ. ΠΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΡ YAML-Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Kubernetes-ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΡΠΈΠ»Π½ΠΎ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅Π°Π»Π½ΠΎ ΡΠ°Π±ΠΎΡΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°. ΠΠ°ΡΠΎΡΠΎ Kubernetes Π΄ΠΎΠ±Π°Π²Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°:
- ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ;
- ΡΠ»ΡΠΆΠ΅Π±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ;
- ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅;
- ΡΠ΅ΠΊΡΠΈΡ Ρ ΡΠ΅ΠΊΡΡ ΡΡΠ°ΡΡΡ;
- ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° admission webhook;
- ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ (ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°).
ΠΠ°ΡΠΎΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π½ΠΎΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ΅ΡΡΡΡ (Π½ΠΎΠ²), Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈ ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ°ΡΠ°, 'ΠΆΠΈΠ²Π°', ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (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-ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π° ΡΡ β Π½Π° ΡΠ²ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π».

ΠΠΎ ΠΈΠΌΠ° ΠΎΠ³ΡΠΎΠΌΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ: Π²ΡΡΡΠ½ΠΎΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΠΎ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅.ΠΠΊΠΎ Kubernetes Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π» ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΈ Π³ΠΈ ΠΏΡΠΈΠ»Π°Π³Π° β Π½ΠΈΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊΡΠ² ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ΡΡΠ°ΡΡ Π½Π° podβΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ² frontendβΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΠΈΠ½Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π° Π² backendβΠ° β Π½Π΅, ΠΈ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π·ΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΠ° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΡΠΈΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, Π² ΡΠ°Π·ΠΈ ΡΡ Π΅ΠΌΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ Π·Π²Π΅Π½ΠΎ β ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΡΠ°ΠΊΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ Kubernetes API Π·Π° ΡΡΠ°ΡΡΡΠ° ΠΈ ΡΠ΅ Ρ ΠΏΡΠ΅Π΄Π°Π²Π° Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠ΅Π°Π»Π½Π°ΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ. Π‘ΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ Π½Π° Go β (Π²ΠΆ. Π½Π΅ΠΉΠ½ΠΎΡΠΎ Π°Π½ΠΎΠ½ΡΠΈΡΠ°Π½Π΅ ), β ΠΊΠΎΡΡΠΎ ΡΠ΅ΡΠ°Π²Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½Π° Π² werf.
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΡΡΠ°ΠΊΠ΅Ρ Π½Π° Π½ΠΈΠ²ΠΎ werf ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π°Π½ΠΎΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΡ Π½Π° Deployments ΠΈΠ»ΠΈ StatefulSets. ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π°Π½ΠΎΡΠ°ΡΠΈΡ β fail-mode β ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ:
-
IgnoreAndContinueDeployProcessβ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΠΏΡΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°Π½Π΅ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΡ; -
FailWholeDeployProcessImmediatelyβ Π³ΡΠ΅ΡΠΊΠ° Π² ΡΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΏΠΈΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ; -
HopeUntilEndOfDeployProcessβ Π½Π°Π΄Π΅ΠΆΠ΄Π°, ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΎ ΠΊΡΠ°Ρ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠ°Π²Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡ ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° Π°Π½ΠΎΡΠ°ΡΠΈΡ fail-mode:

ΠΠΎΠ³Π°ΡΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°ΠΌΠ΅ Π·Π° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ, Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ (MongoDB) Π²ΡΠ΅ ΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ Π³ΠΎΡΠΎΠ²Π° β Deployment-ΠΈΡΠ΅ ΡΠ΅ ΠΏΠ°Π΄Π½Π°Ρ. ΠΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ°ΠΌΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, Π² ΠΊΠΎΠΉΡΠΎ ΡΡ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°, ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅.
ΠΠΌΠ° ΠΎΡΠ΅ Π΄Π²Π΅ Π°Π½ΠΎΡΠ°ΡΠΈΠΈ Π·Π° kubedog Π² werf:
-
failures-allowed-per-replicaβ Π±ΡΠΎΠΉ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π½Π° Π²ΡΡΠΊΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°; -
show-logs-untilβ ΡΠ΅Π³ΡΠ»ΠΈΡΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠ°, Π΄ΠΎ ΠΊΠΎΠΉΡΠΎ werf ΠΏΠΎΠΊΠ°Π·Π²Π° (Π² stdout) Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½ΠΈ pod-ΠΎΠ²Π΅. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠΎΠ²Π° Π΅PodIsReady(Π·Π° Π΄Π° ΠΈΠ³Π½ΠΎΡΠΈΡΠ°ΠΌΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡΡΠ°, ΠΊΠΎΠΈΡΠΎ Π΅Π΄Π²Π° Π»ΠΈ ΡΠ΅ Π½ΠΈ ΡΡΡΠ±Π²Π°Ρ, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π° pod Π·Π°ΠΏΠΎΡΠ½Π΅ Π΄Π° ΠΈΠ΄Π²Π° ΡΡΠ°ΡΠΈΠΊ), Π½ΠΎ ΡΠ° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΈ ΡΡΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈControllerIsReadyΠΈEndOfDeploy.
ΠΠ°ΠΊΠ²ΠΎ ΠΎΡΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅ ΠΎΡ Π΄Π΅ΠΏΠ»ΠΎΡ?
ΠΡΠ²Π΅Π½ Π²Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π²Π° ΠΏΡΠ½ΠΊΡΠ°, Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ:
- Π΄Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ β ΠΈ ΡΠΎ ΡΠ°ΠΌΠΎ Π½ΡΠΆΠ½ΠΈΡΠ΅, Π° Π½Π΅ Π²ΡΠΈΡΠΊΠΈΡΠ΅.
- Π΄Π° ΡΠ»Π΅Π΄ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ΅ΡΠ°, Π·Π°ΡΠΎΡΠΎ Π°ΠΊΠΎ job βΠΌΡΠ»ΡΠΈβ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ, Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π°;
- Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅Π½ ΠΎΡΠΊΠ°Ρ Π² ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΡΠΊΠ° (ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π΄Π° Π·Π½Π°Π΅ΠΌ ΡΠ΅Π°Π»Π½ΠΈΡ ΡΡΠ°ΡΡΡ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΡ). ΠΡΠΎΡΠ΅ΡΡΡ Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π°ΡΠΎΠΌΠ°ΡΠ΅Π½: ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° Π΄ΠΎ ΠΊΡΠ°Ρ, ΠΈΠ»ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ Π²ΡΡΡΠ° Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΡΠΎΠ³
ΠΠ°ΡΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ, Π·Π° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π½ΡΠ°Π½ΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° (build, publish, deploy), Π½ΠΈ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π° CI-ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΡΡΠΈΠ»ΠΈΡΠ°. .
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅:

Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° werf Π½Π°ΠΏΡΠ΅Π΄Π½Π°Ρ
ΠΌΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π² ΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π΄ΠΈΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ ΠΈ ΡΠ΅ ΡΠ΅ ΡΠ°Π΄Π²Π°ΠΌΠ΅, Π°ΠΊΠΎ ΠΏΠΎ-ΡΠΈΡΠΎΠΊΠΎΡΠΎ ΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ½Π΅ ΠΎΠΏΠΈΡΠ° ΡΠ°Π·ΠΈ ΡΡΠΈΠ»ΠΈΡΠ° Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠ° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ Π΄ΠΎΠ±ΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ.
ΠΠΈΠ΄Π΅ΠΎ ΠΈ ΡΠ»Π°ΠΉΠ΄ΠΎΠ²Π΅
ΠΠΈΠ΄Π΅ΠΎ ΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ (~47 ΠΌΠΈΠ½ΡΡΠΈ):

ΠΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π°:
P.S.
ΠΡΡΠ³ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈ Π·Π° Kubernetes Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- «» (ΠΠΈΠΌΠΈΡΡΡ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 27 Π°ΠΏΡΠΈΠ» 2019 Π½Π° Β«Π‘ΡΠ°ΡΠΊΠ°Β»);
- «» (ΠΠ½Π΄ΡΠ΅ΠΉ ΠΠΎΠ»ΠΎΠ²ΠΎΠ²; 8 Π°ΠΏΡΠΈΠ» 2019 Π½Π° Saint HighLoad++);
- «» (ΠΠΈΠΌΠΈΡΡΡ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 8 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ 2018 Π½Π° HighLoad++);
- «» (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 28 ΠΌΠ°ΠΉ 2018 Π½Π° RootConf);
- «» (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 7 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ 2017 Π½Π° HighLoad++);
- «» (ΠΠΌΠΈΡΡΠΈΠΉ Π‘ΡΠΎΠ»ΡΡΠΎΠ²; 6 ΡΠ½ΠΈ 2017 Π½Π° RootConf).
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
