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

Π’ΡΠΊ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΈ Π±Π΅Π»Π΅ΠΆΠΊΠΈ:
- Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° (immutable infrastructure), ΠΎΠ±ΡΠ°Π·ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π° Π²ΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ (staging, production ΠΈ Ρ.Π½.) ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π΅Π΄ΠΈΠ½. ΠΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° ΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΡΠΌ Π³ΠΎΠ²ΠΎΡΠΈΠ» .
- Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ»Π΅Π΄Π²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ (IaC), ΠΊΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΡΡΠ±ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π² ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΄ΠΈΠ½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° β Π²ΠΈΠΆΡΠ΅ Π² .
- ΠΠ΅ΡΠΈΠ³Π° Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° (delivery) ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ: ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΡΡΠ±ΡΠ°Π½ΠΎ, ΡΠ΅ΡΡΠ²Π°Π½ΠΎ, ΠΏΡΡΠ½Π°ΡΠΎ Π½Π° ΠΏΠ°Π·Π°ΡΠ° (Π΅ΡΠ°ΠΏ release) ΠΈ Π²ΡΠΈΡΠΊΠΎ β Π΄ΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° Π΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½Π°. ΠΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠ΅ ΠΈΠ·Π΄Π°Π»ΠΈ, Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°, Π² ΠΊΠΎΠΉΡΠΎ Π²ΠΈΠ΅ Π³ΠΎ Π΄ΠΎΡΡΠ°Π²ΡΡΠ΅ Π² production, ΠΈ ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠΉ Π΅ ΡΡΠΏΡΠ» Π΄Π° Π²Π»Π΅Π·Π΅ ΡΠ°ΠΌ ΠΈ ΡΠΎΠ·ΠΈ 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, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎ ΡΠ²ΠΎΡΡΠ° ΠΏΡΠΈΡΠΎΠ΄Π° Π΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ (Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½), Π΄ΠΎ ΠΎΠ±ΡΠ°Π·Π° Docker, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΡΠ°Π½Π΅ ΡΡΡΠΈΡΡ.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° Π½Π°Ρ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΏΡΠΎΠΈΠ·Ρ ΠΎΠ΄Π°, Π·Π°ΡΠΎΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΎΡ ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΈΡ Π΅ ΡΡΠ±ΡΠ°Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ Π² Kubernetes (ΡΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ diff'ΠΎΠ²Π΅ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π΅ΡΠ°).
Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π·Π° ΡΠ°Π³ΠΈΡΠ°Π½Π΅
ΠΡΡΠ²Π°ΡΠ° Π΅ ΠΏΡΠΎΡΡΠ° git tag. ΠΠΌΠ°ΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ Ρ ΠΎΠ±ΡΠ°Π·, ΡΠ°Π³ΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ 1.0. Π Kubernetes ΠΈΠΌΠ°ΠΌΠ΅ stage ΠΈ production, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠΎΠ·ΠΈ ΠΎΠ±ΡΠ°Π· Π΅ ΠΊΠ°ΡΠ΅Π½. Π Git ΠΏΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΈΡΠΈ ΠΈ Π² Π½ΡΠΊΠ°ΠΊΡΠ² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ»Π°Π³Π°ΠΌΠ΅ ΡΠ°Π³ 2.0. Π‘ΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π³ΠΎ ΠΏΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈ Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° Ρ ΡΠ°Π³ 2.0. ΠΡΡΠΊΠ°ΠΌΠ΅ Π³ΠΎ Π½Π° stage ΠΈ, Π°ΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π½Π° 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-ΠΎΠ±ΡΠ°Π·Π°.

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

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

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

ΠΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° registry
Π’Π΅ΠΌΠ°ΡΠ° Π½Π΅ Π΅ Π·Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° ΡΠ»ΠΎΠ΅Π²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π²ΠΈΡΡΡΠΈ ΡΠ»Π΅Π΄ ΠΈΠ·ΡΡΠΈΡΠΈ ΡΠ°Π³ΠΎΠ²Π΅ - ΡΠΎΠ²Π° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π° ΡΠ°ΠΌΠΈΡ Docker Registry. Π‘ΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π·Π° ΡΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΡΠΎ ΡΠ΅ Π½Π°ΡΡΡΠΏΠ²Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Docker-ΡΠ°Π³ΠΎΠ²Π΅ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΠ°ΡΡ ΠΎΡ ΡΡΡ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ° Π½ΠΈ Π½ΡΠΆΠ½ΠΈ, Π° Π·Π°Π΅ΠΌΠ°Ρ ΠΌΡΡΡΠΎ (ΠΈ/ΠΈΠ»ΠΈ Π½ΠΈΠ΅ ΠΏΠ»Π°ΡΠ°ΠΌΠ΅ Π·Π° Π½Π΅Π³ΠΎ).
ΠΠ°ΠΊΠ²ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ?
- ΠΠΎΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π½Π΅ ΠΏΠΎΡΠΈΡΡΠ²Π°ΡΠ΅. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΠ»Π°ΡΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ Π·Π° ΠΈΠ·Π»ΠΈΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄Π° ΡΠ°Π·ΠΏΠ»Π΅ΡΠ΅ΡΠ΅ ΠΎΠ³ΡΠΎΠΌΠ΅Π½ ΠΊΠ»ΡΠ±ΠΎΠΊ ΠΎΡ ΡΠ°Π³ΠΎΠ²Π΅. ΠΠΎ ΡΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ.
- ΠΡΠ»Π΅Π½ Π½ΡΠ»ΠΈΡΠ°Π½Π΅. ΠΠΊΠΎ ΠΈΠ·ΡΡΠΈΠ΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΡΠ±Π΅ΡΠ΅ΡΠ΅ ΡΠ°ΠΌΠΎ Π°ΠΊΡΡΠ°Π»Π½ΠΈΡΠ΅ Π² CI-ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠΊΠΎ Π½Π° production ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ ΡΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°, Π·Π° Π½Π΅Π³ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ Π½ΠΎΠ² ΠΎΠ±ΡΠ°Π· - ΡΠ°ΠΊΡΠ², ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ΅ Π½Π΅ Π΅ ΡΠ΅ΡΡΠ²Π°Π½ ΠΎΡ Π½ΠΈΠΊΠΎΠ³ΠΎ. Π’ΠΎΠ²Π° ΡΠ±ΠΈΠ²Π° ΠΈΠ΄Π΅ΡΡΠ° Π·Π° immutable infrastructure.
- Blue-green. ΠΠ΄ΠΈΠ½ registry Π·Π°ΠΏΠΎΡΠ½Π° Π΄Π° ΠΏΡΠ΅Π»ΠΈΠ²Π° - ΠΊΠ°ΡΠ²Π°ΠΌΠ΅ ΠΎΠ±ΡΠ°Π·ΠΈ Π² Π΄ΡΡΠ³. Π‘ΡΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄: Π² ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΡΠΈΡΡΠ²Π°ΠΌΠ΅ ΡΠΎΠ·ΠΈ registry, ΠΊΠΎΠΉΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π° Π΄Π° ΠΏΡΠ΅Π»ΠΈΠ²Π°?
- ΠΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠ° ΠΈΠ·ΡΡΠΈΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ ΠΏΠΎ-ΡΡΠ°ΡΠΈ ΠΎΡ 1 ΠΌΠ΅ΡΠ΅Ρ? ΠΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠ΅ ΠΈΠΌΠ° ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΡΠΎ Π½Π΅ Π΅ Π±ΠΈΠ»Π° ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π° ΡΡΠ»Π° ΠΌΠ΅ΡΠ΅ΡΠ°...
- Π ΡΡΠ½ΠΎ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ΅.
ΠΠ°ΠΈΡΡΠΈΠ½Π° ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΈΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΈ ΡΠ° Π΄Π²Π°: Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΠΎΡΠΈΡΡΠ²Π° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡ blue-green + ΡΡΡΠ½ΠΎ. Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠ°Π²Π° Π²ΡΠΏΡΠΎΡ Π·Π° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ: ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅, ΡΠ΅ Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΠΎΡΠΈΡΡΠΈΡΠ΅ registry, ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ Π½ΠΎΠ² ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½ΠΎΠ²ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ Π² Π½Π΅Π³ΠΎ ΠΏΡΠ΅Π·, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΡΠ΅Ρ. Π ΡΠ»Π΅Π΄ ΠΌΠ΅ΡΠ΅Ρ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ ΠΊΠΎΠΈ podβΠΎΠ²Π΅ Π² Kubernetes Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΠ°ΡΠΈΡ registry ΠΈ Π³ΠΈ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΡΠ΅ ΠΈ Π² Π½ΠΎΠ²ΠΈΡ registry.
ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅ Π² 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βΠΈΡΠ΅ Π²ΡΠ² ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π° Π² Π±Π΅ΠΊΠ΅Π½Π΄Π° β Π½Π΅, ΠΈ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π·ΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.. ΠΡΠ»ΠΈ Kubernetes ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π°Π΄ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΅Π³ΠΎ β ΠΌΡ Π΅ΡΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ΡΡΠ°ΡΡ podβΠΎΠ² Π²ΠΎ frontendβΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π° Π² backendβΠ΅ β Π½Π΅Ρ, ΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ
ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π²ΡΠΈΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, Π² ΡΠ°Π·ΠΈ ΡΡ Π΅ΠΌΠ° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ β ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΡΠ°ΠΊΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠ°ΡΡΡΠ° ΠΎΡ Kubernetes API ΠΈ ΡΠ΅ Ρ ΠΏΡΠ΅Π΄Π°Π²Π° Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠ΅Π°Π»Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° Π½Π΅ΡΠ°ΡΠ°. Π‘ΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ Open Source Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° 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
