ΠΠ°ΠΏΠΈΡΠΎΡ Π³ΠΈ ΡΠ°Π·Π³Π»Π΅Π΄ΡΠ²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΡΠΎ ΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ Π°ΠΊΡΠΌΡΠ»ΠΈΡΠ°Π°Ρ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ (Docker Registry ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π°Π½Π°Π»ΠΎΠ·ΠΈ) Π²ΠΎ ΡΠ΅Π°Π»Π½ΠΎΡΡΠ° Π½Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈΡΠ΅ CI/CD ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ΠΈ Π·Π° ΠΎΠ±Π»Π°ΠΊ ΠΌΠ°ΡΡΠΈΠ½ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π΄ΠΎ Kubernetes. ΠΠ°Π΄Π΅Π½ΠΈ ΡΠ΅ Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ Π·Π° ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎΡΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΠΈ ΡΠ΅ΡΠΊΠΎΡΠΈΠΈΡΠ΅ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π»Π΅Π³ΡΠ²Π°Π°Ρ ΠΎΠ΄ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ, Π·Π°ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΏΡΠΎΡΡΠΎΡ ΠΈ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅ Π½Π° ΡΠΈΠΌΠΎΠ²ΠΈΡΠ΅. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π΄ΠΌΠΈΠ½Π°Ρ ΠΎΠ²ΠΈΠ΅ ΡΠ΅ΡΠΊΠΎΡΠΈΠΈ.
ΠΠΎΠ²Π΅Π΄
ΠΡΠΎΡΠΎΡ Π½Π° ΡΠ»ΠΈΠΊΠΈ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΠΌΠΎΠΆΠ΅ Π±ΡΠ·ΠΎ Π΄Π° ΡΠ°ΡΡΠ΅, Π·Π°Π·Π΅ΠΌΠ°ΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎΡ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠΎ ΡΠΎΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΠ΅Π½Π°. ΠΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π°, ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΈΡΠ°ΡΠ»ΠΈΠ² ΡΠ°ΡΡ Π½Π° ΠΏΡΠΎΡΡΠΎΡΠΎΡ Π·Π°ΡΠ°ΡΠ΅Π½ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ, ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΎ Π΅:
- ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠΈΠΊΡΠ΅Π½ Π±ΡΠΎΡ Π½Π° ΠΎΠ·Π½Π°ΠΊΠΈ Π·Π° ΡΠ»ΠΈΠΊΠΈ;
- ΠΈΡΡΠΈΡΡΠ΅ΡΠ΅ Π³ΠΈ ΡΠ»ΠΈΠΊΠΈΡΠ΅ Π½Π° Π½Π΅ΠΊΠΎΡ Π½Π°ΡΠΈΠ½.
ΠΡΠ²ΠΎΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ Π΅ ΠΏΡΠΈΡΠ°ΡΠ»ΠΈΠ²ΠΎ Π·Π° ΠΌΠ°Π»ΠΈ ΡΠΈΠΌΠΎΠ²ΠΈ. ΠΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΈΠΌΠ°Π°Ρ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΈ ΠΎΠ·Π½Π°ΠΊΠΈ (latest
, main
, test
, boris
ΠΈΡΠ½.), ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π΅ΠΌΠ° Π΄Π° ΠΎΡΠ΅ΡΠ΅ Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π΅ΠΌΠ° Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π²ΠΎΠΎΠΏΡΡΠΎ Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°ΡΠ΅ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎ ΡΠΈΡΡΠ΅ΡΠ΅. ΠΠ° ΠΊΡΠ°ΡΠΎΡ Π½Π° ΠΊΡΠ°ΠΈΡΡΠ°ΡΠ°, ΡΠΈΡΠ΅ Π½Π΅Π±ΠΈΡΠ½ΠΈ ΡΠ»ΠΈΠΊΠΈ ΡΠ΅ Π±ΡΠΈΡΠ°Ρ, Π° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΎΡΡΠ°Π½ΡΠ²Π° ΡΠ°Π±ΠΎΡΠ° Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅ (ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΎΠ΄ ΠΎΠ±ΠΈΡΠ΅Π½ ΡΠΎΠ±ΠΈΡΠ°Ρ Π½Π° ΡΡΠ±ΡΠ΅).
Π‘Π΅ΠΏΠ°ΠΊ, ΠΎΠ²ΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΌΠ΅ΡΠ° Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π° ΡΠ°Π·Π²ΠΎΡΠΎΡ ΠΈ ΡΠ΅ΡΠΊΠΎ Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π»ΠΈΠ² Π·Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π·Π° CI/CD. Π‘ΠΎΡΡΠ°Π²Π΅Π½ Π΄Π΅Π» ΠΎΠ΄ ΡΠ°Π·Π²ΠΎΡΠΎΡ Π±Π΅ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ°, ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ±ΡΠ·ΠΎ Π΄Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅, ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈΡΠ΅ ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π΄ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ ΡΠΈΡΠ΅ Π½Π°ΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, CI Π³Π°ΡΠΎΠ²ΠΎΠ΄ΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ° ΡΠΎ ΡΠ΅ΠΊΠΎΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅. ΠΠΎ Π½Π΅Π³ΠΎ, ΡΠ»ΠΈΠΊΠ°ΡΠ° ΡΠ΅ ΡΠΎΡΡΠ°Π²ΡΠ²Π°, ΡΠ΅ΡΡΠΈΡΠ°, ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»Π° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ»Π° Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΡ Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅ ΠΈ ΠΏΡΠ΅ΠΎΡΡΠ°Π½Π°ΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΠΈ Π°ΠΊΠΎ ΡΠ΅ Π΅ Π²ΠΎ ΡΠ΅Π΄, ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΠΈΠ³Π½ΡΠ²Π°Π°Ρ Π΄ΠΎ ΠΊΡΠ°ΡΠ½ΠΈΠΎΡ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ. Π ΠΎΠ²Π° Π²Π΅ΡΠ΅ Π½Π΅ Π΅ ΡΠ°ΠΊΠ΅ΡΠ½Π° Π½Π°ΡΠΊΠ°, ΡΡΠΊΡ ΡΠ΅ΠΊΠΎΡΠ΄Π½Π΅Π²Π½Π° ΠΏΠΎΡΠ°Π²Π° Π·Π° ΠΌΠ½ΠΎΠ³ΡΠΌΠΈΠ½Π° - Π½Π°ΡΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π·Π° Π²Π°Ρ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠ° ΡΠΈΡΠ°ΡΠ΅ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°.
ΠΠΈΠ΄Π΅ΡΡΠΈ ΠΏΠΎΠΏΡΠ°Π²Π°ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠ΅ Π½Π° Π½ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠ΅ Π²ΡΡΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ, Π° ΠΈΠ·Π΄Π°Π½ΠΈΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΡΡΠ°Ρ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΠ°ΡΠΈ Π½Π° Π΄Π΅Π½, ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ Π΅ Π΄Π΅ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠ°Π·Π²ΠΎΡ Π΅ ΠΏΡΠΈΠ΄ΡΡΠΆΠ΅Π½ ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ Π±ΡΠΎΡ Π½Π° ΠΎΠ±Π²ΡΡΠΊΠΈ, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ Π½Π° ΡΠ»ΠΈΠΊΠΈ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ. ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° ΠΏΡΠ°ΡΠ°ΡΠ΅ΡΠΎ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ, Ρ.Π΅. ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΈ ΡΠ»ΠΈΠΊΠΈ.
ΠΠΎ, ΠΊΠ°ΠΊΠΎ Π²ΠΎΠΎΠΏΡΡΠΎ Π΄Π° ΠΎΠ΄ΡΠ΅Π΄ΠΈΡΠ΅ Π΄Π°Π»ΠΈ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π΅ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½Π°?
ΠΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ Π·Π° ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎΡΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ°
ΠΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΡΠΎ ΠΌΠ½ΠΎΠ·ΠΈΠ½ΡΡΠ²ΠΎ Π½Π° ΡΠ»ΡΡΠ°ΠΈ, Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ:
1. ΠΡΠ²Π°ΡΠ° (Π½Π°ΡΠΎΡΠΈΠ³Π»Π΅Π΄Π½Π° ΠΈ Π½Π°ΡΠΊΡΠΈΡΠΈΡΠ½Π° ΠΎΠ΄ ΡΠΈΡΠ΅) ΡΠ΅ ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΠΊΠΎΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ Kubernetes. ΠΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠ²ΠΈΠ΅ ΡΠ»ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ° ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠΎΡΠΎΡΠΈ Π·Π° ΠΏΡΠ΅ΠΊΠΈΠ½ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°) ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ Π½Π΅Π³ΠΈΡΠ° Π½Π°ΠΏΠΎΡΠΈΡΠ΅ Π½Π° ΡΠΈΠΌΠΎΡ ΡΡΠΎ Π΄Π΅Π±Π°Π³ΠΈΡΠ° Π½Π° ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ ΠΎΠ΄ ΡΠΈΠΊΠ»ΡΡΠΈΡΠ΅. (ΠΠΎΡΠ°Π΄ΠΈ ΠΎΠ²Π°Π° ΠΏΡΠΈΡΠΈΠ½Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠ²ΠΌΠ΅ Π΄ΡΡΠΈ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½Π°
2. ΠΡΠΎΡΠΎ (ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ, Π½ΠΎ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠ½ΠΎΠ³Ρ Π²Π°ΠΆΠ½ΠΎ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π½Π° Π΅ΠΊΡΠΏΠ»ΠΎΠ°ΡΠ°ΡΠΈΡΠ°) - ΡΠ»ΠΈΠΊΠΈ ΠΊΠΎΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° Π²ΡΠ°ΡΠ°ΡΠ΅ Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π²ΠΎ ΡΠ΅ΠΊΠΎΠ²Π½Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ ΡΠ»ΡΡΠ°ΡΠΎΡ Π½Π° Helm, ΠΎΠ²Π° ΡΠ΅ ΡΠ»ΠΈΠΊΠΈ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ Π·Π°ΡΡΠ²Π°Π½ΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ. (ΠΠ°ΡΠ΅ΠΌ, ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π²ΠΎ Helm Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° Π΅ 256 ΡΠ΅Π²ΠΈΠ·ΠΈΠΈ, Π½ΠΎ ΠΌΠ°Π»ΠΊΡ Π΅ Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π΄Π΅ΠΊΠ° Π½Π΅ΠΊΠΎΡ Π½Π°Π²ΠΈΡΡΠΈΠ½Π° ΡΡΠ΅Π±Π° Π΄Π° Π·Π°ΡΡΠ΅Π΄ΠΈ ΠΊΠ°ΠΊΠΎ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ Π²Π΅ΡΠ·ΠΈΠΈ?..) ΠΠ° ΠΊΡΠ°ΡΠΎΡ Π½Π° ΠΊΡΠ°ΠΈΡΡΠ°ΡΠ°, Π½ΠΈΠ΅, ΠΎΡΠΎΠ±Π΅Π½ΠΎ, ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΠΌΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΡΠ½Π° Π΄Π° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅, Ρ.Π΅. βΠ²ΡΠ°ΡΠ΅ΡΠ΅ ΡΠ΅β Π½Π° Π½ΠΈΠ² Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ.
3. Π’ΡΠ΅ΡΠΎ - ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅: Π‘ΠΈΡΠ΅ ΡΠ»ΠΈΠΊΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ Π½ΠΈΠ²Π½Π°ΡΠ° ΡΠ΅ΠΊΠΎΠ²Π½Π° ΡΠ°Π±ΠΎΡΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ Π·Π° ΠΠ , ΡΠΎΠ³Π°Ρ ΠΈΠΌΠ° ΡΠΌΠΈΡΠ»Π° Π΄Π° ΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ ΡΠ»ΠΈΠΊΠ° ΡΡΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΎΠ±Π²ΡΠ·ΡΠ²Π°ΡΠ΅ ΠΈ, Π΄Π° ΡΠ΅ΡΠ΅ΠΌΠ΅, ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅: Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π±ΡΠ·ΠΎ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠΈ Π½Π° ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π·Π°Π΄Π°ΡΠ° ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ.
4. Π§Π΅ΡΠ²ΡΡΠΎ - ΡΠ»ΠΈΠΊΠΈ ΠΊΠΎΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°Π°Ρ Π½Π° Π²Π΅ΡΠ·ΠΈΠΈΡΠ΅ Π½Π° Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, Ρ.Π΅. ΡΠ΅ ΡΠΈΠ½Π°Π»Π½ΠΈΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄: v1.0.0, 20.04.01/XNUMX/XNUMX, sierra, ΠΈΡΠ½.
ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ°: ΠΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΎΠ²Π΄Π΅ Π±Π΅Π° ΡΠΎΡΠΌΡΠ»ΠΈΡΠ°Π½ΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΈΡΠΊΡΡΡΠ²ΠΎ Π²ΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ Π΄Π΅ΡΠ΅ΡΠΈΡΠΈ ΡΠ°Π·Π²ΠΎΡΠ½ΠΈ ΡΠΈΠΌΠΎΠ²ΠΈ ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈΡΠ΅ Π²ΠΎ ΡΠ°Π·Π²ΠΎΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅Π½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Kubernetes Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ), ΠΎΠ²ΠΈΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π°Π°Ρ.
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎΡΡ ΠΈ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ°
ΠΠΎΠΏΡΠ»Π°ΡΠ½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ ΡΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ, ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½ΡΠ΄Π°Ρ ΡΠ²ΠΎΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ°: Π²ΠΎ Π½ΠΈΠ² ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ΄ ΠΊΠΎΠΈ ΠΎΠ·Π½Π°ΠΊΠ°ΡΠ° ΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π° ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ. Π‘Π΅ΠΏΠ°ΠΊ, ΠΎΠ²ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈ ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΈΠΌΠΈΡΠ°, Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΈ Π±ΡΠΎΡ Π½Π° ΠΎΠ·Π½Π°ΠΊΠΈ*.
* ΠΠ°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ. ΠΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°Π²ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ°: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Registry, Harbour Registry, JFrog Artifactory, Quay.io - ΠΎΠ΄ ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ 2020 Π³ΠΎΠ΄ΠΈΠ½Π°.
ΠΠ²ΠΎΡ ΡΠ΅Ρ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π΅ ΡΠΎΡΠ΅ΠΌΠ° Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ Π·Π° Π΄Π° Π³ΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΠΈ ΡΠ΅ΡΠ²ΡΡΠΈΠΎΡ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ - ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ»ΠΈΠΊΠΈ ΡΡΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°Π°Ρ Π½Π° Π²Π΅ΡΠ·ΠΈΠΈΡΠ΅. ΠΠ΅ΡΡΡΠΎΠ°, Π·Π° ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ Π½Π΅ΠΊΠ°ΠΊΠ²ΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ (ΠΏΠΎΡΡΡΠΎΠ³Π° ΠΈΠ»ΠΈ, ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΏΠΎΠ±Π»Π°Π³Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°) - Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΠΎΡΠ΅ΠΊΡΠ²Π°ΡΠ°ΡΠ° ΠΈ ΡΠΈΠ½Π°Π½ΡΠΈΡΠΊΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΡΠΈΠΎΡ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ - ΠΏΠΎΠ²ΡΠ·Π°Π½ ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ - ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ ΡΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ Π²ΠΎ ΡΠΈΠΌΠΎΠ²ΠΈΡΠ΅: ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ»ΠΈΠΊΠΈ, ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΡΠ΅Π±Π½ΠΈ Π»ΠΈΡΡΠΈ Π·Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΈ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ. ΠΠΎ, Π½Π° ΠΊΡΠ°ΡΠΎΡ ΡΠ΅ΠΏΠ°ΠΊ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°. Π Π°ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° Π½Π΅ ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ, ΡΡΠ΅Π±Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½Π΅ΡΡΠΎ ΡΠ²ΠΎΠ΅.
Π‘ΠΈΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΠΎ ΠΏΡΠ²ΠΈΡΠ΅ Π΄Π²Π° ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ Π΅ ΡΠ»ΠΈΡΠ½Π°: ΡΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ Π·Π°Π΄ΠΎΠ²ΠΎΠ»Π°Ρ Π±Π΅Π· Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ - ΠΎΠ½ΠΎΡ ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ (Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, Kubernetes).
ΠΠ»ΡΡΡΡΠ°ΡΠΈΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΠΎΡ ΡΠ΅ΠΊ Π²ΠΎ Git
ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Π½Π΅ΡΡΠΎ ΠΊΠ°ΠΊΠΎ ΠΎΠ²Π° Π²ΠΎ Git:
ΠΠΊΠΎΠ½Π°ΡΠ° ΡΠΎ Π³Π»Π°Π²Π° Π½Π° Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡ ΠΎΠ·Π½Π°ΡΡΠ²Π° ΡΠ»ΠΈΠΊΠΈ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ Π²ΠΎ Kubernetes Π·Π° ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ (ΠΊΡΠ°ΡΠ½ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ, ΡΠ΅ΡΡΠ΅ΡΠΈ, ΠΌΠ΅Π½Π°ΡΠ΅ΡΠΈ ΠΈΡΠ½.) ΠΈΠ»ΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΎΠ΄ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΈΡΠ΅ Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠ»ΠΈΡΠ½ΠΈ ΡΠ΅Π»ΠΈ.
Π¨ΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ Π°ΠΊΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Π°Ρ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ Π·Π°Π΄ΡΠΆΠ°Ρ ΡΠ»ΠΈΠΊΠΈΡΠ΅ (Π½Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π±ΡΠΈΡΠ°Ρ) ΡΠΎ Π΄Π°Π΄Π΅Π½ΠΈ ΠΈΠΌΠΈΡΠ° Π½Π° ΠΎΠ·Π½Π°ΠΊΠΈ?
ΠΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ, Π²Π°ΠΊΠ²ΠΎΡΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠΎ Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠ·ΡΠ°Π΄ΡΠ²Π°.
Π¨ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π°ΠΊΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Π°Ρ ΡΠ»ΠΈΠΊΠΈΡΠ΅ Π΄Π° Π½Π΅ ΡΠ΅ Π±ΡΠΈΡΠ°Ρ? ΡΠΏΠΎΡΠ΅Π΄ Π΄Π°Π΄Π΅Π½ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» / Π±ΡΠΎΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈ ΠΎΠ±Π²ΡΡΠΊΠΈ?
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΎΡ ΡΡΠ°Π½Π° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ΄ΠΎΠ±Π°Ρ, Π½ΠΎ ΡΠ΅ ΡΡΡΠ΅ Π΅ Π΄Π°Π»Π΅ΠΊΡ ΠΎΠ΄ ΠΈΠ΄Π΅Π°Π»Π΅Π½. ΠΠ° ΠΊΡΠ°ΡΠΎΡ Π½Π° ΠΊΡΠ°ΠΈΡΡΠ°ΡΠ°, ΡΓ¨ ΡΡΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ Π½Π° ΠΊΠΎΠΈ ΠΈΠΌ ΡΡΠ΅Π±Π°Π°Ρ ΡΠ»ΠΈΠΊΠΈ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ (ΠΈΠ»ΠΈ Π΄ΡΡΠΈ ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ Π²ΠΎ K8s) Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ...
ΠΠ° ΡΠ° ΡΡΠΌΠΈΡΠ°ΠΌΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° Π½Π° ΠΏΠ°Π·Π°ΡΠΎΡ: ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Π½Π΅ Π½ΡΠ΄Π°Ρ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΠΏΡΠΈ ΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ, Π° Π³Π»Π°Π²Π½Π°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π·Π° ΡΠΎΠ° Π΅ Π½Π΅ΠΌΠ° Π½Π°ΡΠΈΠ½ Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ²Π΅Ρ. ΠΠ·Π»Π΅Π³ΡΠ²Π° Π΄Π΅ΠΊΠ° ΡΠΈΠΌΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠΈ Π±Π°ΡΠ°Π°Ρ ΡΠ°ΠΊΠ²Π° ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ ΡΠ΅ ΠΏΡΠΈΠ½ΡΠ΄Π΅Π½ΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΠ½ΠΎ Π΄Π° ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°Π°Ρ Π±ΡΠΈΡΠ΅ΡΠ΅ ΡΠ»ΠΈΠΊΠΈ βΠΎΠ΄Π½Π°Π΄Π²ΠΎΡβ, ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ Docker Registry API (ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ½ API Π½Π° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°).
Π‘Π΅ΠΏΠ°ΠΊ, Π±Π°ΡΠ°Π²ΠΌΠ΅ ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΅ ΡΠ΅ Π³ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ° ΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° ΡΠ»ΠΈΠΊΠΈΡΠ΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΌΠΎΠ²ΠΈ ΠΊΠΎΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ...
ΠΠ°ΡΠΈΠΎΡ ΠΏΠ°Ρ Π΄ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π½ΠΎ ΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ°
ΠΠ΄ ΠΊΠ°Π΄Π΅ Π΄ΠΎΠ°ΡΠ° ΠΎΠ²Π°Π° ΠΏΠΎΡΡΠ΅Π±Π°? Π€Π°ΠΊΡ Π΅ Π΄Π΅ΠΊΠ° Π½ΠΈΠ΅ Π½Π΅ ΡΠΌΠ΅ ΠΏΠΎΡΠ΅Π±Π½Π° Π³ΡΡΠΏΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ, ΡΡΠΊΡ ΡΠΈΠΌ ΠΊΠΎΡ ΠΎΠΏΡΠ»ΡΠΆΡΠ²Π° ΠΌΠ½ΠΎΠ³Ρ ΠΎΠ΄ Π½ΠΈΠ² ΠΎΠ΄Π΅Π΄Π½Π°Ρ, ΠΏΠΎΠΌΠ°Π³Π°ΡΡΠΈ Π²ΠΎ ΡΠ΅ΠΎΠΏΡΠ°ΡΠ½ΠΎ ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΡΠΎ CI/CD. Π Π³Π»Π°Π²Π½Π°ΡΠ° ΡΠ΅Ρ
Π½ΠΈΡΠΊΠ° Π°Π»Π°ΡΠΊΠ° Π·Π° ΠΎΠ²Π° Π΅ Π°Π»Π°ΡΠΊΠ°ΡΠ° ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄
ΠΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠ»ΠΈΠΊΠΈ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ* (Π²Π΅Π΄Π½Π°Ρ ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈ) Π΅ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° Π½Π° ΡΠ°ΠΊΠ²Π°ΡΠ° Π°Π»Π°ΡΠΊΠ°. Π Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΡΠ°ΠΌΡ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅, ΡΠΎΠ³Π°Ρ - Π°ΠΊΠΎ Π²Π°ΡΠ΅ΡΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ - ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° Π½ΠΈΠ²Π½ΠΎΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΠΈΡΡΠ΅ΡΠ΅. ΠΠ°ΠΊΠΎ ΠΏΠΎΡΡΠΈΠ³Π½Π°Π²ΠΌΠ΅ ΡΡΠΏΠ΅Ρ Π²ΠΎ ΠΎΠ²Π°, Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΠ²Π°ΡΡΠΈ Π³ΠΈ ΡΠΈΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈ, ΡΠ΅ ΡΠ΅ Π΄ΠΈΡΠΊΡΡΠΈΡΠ° ΠΏΠΎΠ½Π°ΡΠ°ΠΌΡ.
* ΠΠ°ΠΊΠΎ ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ (Docker Registry, GitLab Container Registry, Harbor ΠΈΡΠ½.), Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ ΡΠ΅ ΡΠΎΠΎΡΡΠ²Π°Π°Ρ ΡΠΎ ΠΈΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π£Π½ΠΈΠ²Π΅ΡΠ·Π°Π»Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ Π½Π΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠΏΡΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠ°Π±ΠΎΡΠΈ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΠΈ Π½ΡΠ΄ΠΈ ΠΈΡΡΠΎ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π·Π° ΡΠΈΡΠ΅.
ΠΠ°ΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ werf ΠΊΠ°ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°, ΡΠ΅ Π½Π°Π΄Π΅Π²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈ Π·Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΡΠΈΠΌΠΎΠ²ΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΡΠΎΠΎΡΡΠ²Π°Π°Ρ ΡΠΎ ΡΠ»ΠΈΡΠ½ΠΈ ΡΠ΅ΡΠΊΠΎΡΠΈΠΈ.
Π’Π°ΠΊΠ° ΡΠ΅ Π·Π°ΡΠ°ΡΠΈΠ²ΠΌΠ΅ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ»ΠΈΠΊΠΈ - Π½Π°ΠΌΠ΅ΡΡΠΎ ΠΎΠ½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΈ ΡΠ΅ Π²Π΅ΡΠ΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ. ΠΡΠ²ΠΈΠΎΡ ΡΠ΅ΠΊΠΎΡ Π±Π΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Docker Registry API Π·Π° Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π°Ρ ΠΈΡΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π·Π° Π±ΡΠΎΡΠΎΡ Π½Π° ΠΎΠ·Π½Π°ΠΊΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π½ΠΈΠ²Π½ΠΎΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ (ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ ΠΏΠΎΠ³ΠΎΡΠ΅). ΠΠΎΠ΄Π°Π΄Π΅Π½ΠΎ Π½Π° Π½ΠΈΠ² Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ Π»ΠΈΡΡΠ° Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΡΠ»ΠΈΠΊΠΈ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, Ρ.Π΅. ΠΡΠ±Π΅ΡΠ½Π΅ΡΠΈΡ. ΠΠ° Π²ΡΠΎΡΠΎΡΠΎ, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π±Π΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Kubernetes API Π·Π° ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ΅ Π½ΠΈΠ· ΡΠΈΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΈ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ ΡΠΏΠΈΡΠΎΠΊ Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ image
.
ΠΠ²Π° ΡΡΠΈΠ²ΠΈΡΠ°Π»Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π³ΠΎ ΡΠ΅ΡΠΈ Π½Π°ΡΠΊΡΠΈΡΠΈΡΠ½ΠΈΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ (ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ Π±Ρ. 1), Π½ΠΎ Π±Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΏΠΎΡΠ΅ΡΠΎΠΊ Π½Π° Π½Π°ΡΠ΅ΡΠΎ ΠΏΠ°ΡΡΠ²Π°ΡΠ΅ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΡ Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅. Π‘Π»Π΅Π΄Π½ΠΈΠΎΡ - ΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ - ΡΠ΅ΠΊΠΎΡ Π±Π΅ΡΠ΅ ΠΎΠ΄Π»ΡΠΊΠ°ΡΠ° ΠΏΠΎΠ²ΡΠ·Π΅ΡΠ΅ Π³ΠΈ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΈΡΠ΅ ΡΠ»ΠΈΠΊΠΈ ΡΠΎ ΠΈΡΡΠΎΡΠΈΡΠ°ΡΠ° Π½Π° Git.
Π¨Π΅ΠΌΠΈ Π·Π° ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊ, ΠΈΠ·Π±ΡΠ°Π²ΠΌΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏ Π²ΠΎ ΠΊΠΎΡ ΠΊΠΎΠ½Π΅ΡΠ½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡΠ° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅ ΠΈ Π³ΠΎ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠ²ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠ΅ΠΌΠΈ Π·Π° ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅. ΠΠΎΠ³Π° ΠΎΠ±ΡΠ°Π²ΡΠ²Π° ΡΠ»ΠΈΠΊΠ°, ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΠΈΠ·Π±ΡΠ°Π» ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° ΠΎΠΏΡΠΈΡΠ° Π·Π° ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ (git-branch
, git-commit
ΠΈΠ»ΠΈ git-tag
) ΠΈ ΡΠ° ΠΈΡΠΊΠΎΡΠΈΡΡΠΈ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ. ΠΠΎ CI ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅, ΠΎΠ²ΠΈΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ°. ΠΡΡΡΠ½ΠΎΡΡ ΠΊΠΎΠ½Π΅ΡΠ½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° Π±Π΅ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½Π° ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² Git, ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅ Π²ΠΎ Π΅ΡΠΈΠΊΠ΅ΡΠΈ.
ΠΠ²ΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ°ΡΠ΅ ΡΠΎ Π·Π±ΠΈΡ Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΡΡΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ° Git Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠ°ΠΊΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ΠΈΠ·Π²ΠΎΡ Π½Π° Π²ΠΈΡΡΠΈΠ½Π°ΡΠ°:
- ΠΠΎΠ³Π° Π±ΡΠΈΡΠ΅ΡΠ΅ Π³ΡΠ°Π½ΠΊΠ°/ΠΎΠ·Π½Π°ΠΊΠ° Π²ΠΎ Git, ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈΡΠ΅ ΡΠ»ΠΈΠΊΠΈ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π±Π΅Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΠΈΠ·Π±ΡΠΈΡΠ°Π½ΠΈ.
- ΠΡΠΎΡΠΎΡ Π½Π° ΡΠ»ΠΈΠΊΠΈ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ Git ΠΎΠ·Π½Π°ΠΊΠΈ ΠΈ Π·Π°Π»ΠΎΠΆΠ±ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΠΎ Π±ΡΠΎΡΠΎΡ Π½Π° ΠΎΠ·Π½Π°ΠΊΠΈ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΠΈΠ·Π±ΡΠ°Π½Π°ΡΠ° ΡΠ΅ΠΌΠ° ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π²ΠΎ ΠΊΠΎΠ΅ Π΅ ΠΊΡΠ΅ΠΈΡΠ°Π½ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈΠΎΡ commit.
Π‘Π΅Π²ΠΊΡΠΏΠ½ΠΎ, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ°ΡΠ΅ Π³ΠΈ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΠΈ Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈ, Π½ΠΎ Π½Π°ΡΠΊΠΎΡΠΎ Π½Π΅ ΡΠ΅ΠΊΠ°ΡΠ΅ Π½ΠΎΠ² ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊ. Π€Π°ΠΊΡ Π΅ Π΄Π΅ΠΊΠ° Π΄ΠΎΠ΄Π΅ΠΊΠ° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅Π²ΠΌΠ΅ ΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈΡΠ΅ Π½Π° Git, Π½Π°ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠΈ. (ΠΠΈΠ΄Π΅ΡΡΠΈ Π½ΠΈΠ²Π½ΠΈΠΎΡ ΠΎΠΏΠΈΡ Π΅ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ, ΡΠ΅ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ ΡΠΎ Π΄Π΅ΡΠ°Π»ΠΈΡΠ΅
ΠΠΎΠ² Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ
ΠΠΎΡΡΠΎ? Π‘ΠΎ ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°, ΡΠ΅ΠΊΠΎΡΠ° ΠΎΠ·Π½Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ΠΊΡΠ°ΡΠ½ΠΈ ΠΎΠ±Π²ΡΡΠΊΠΈ Π²ΠΎ Git. ΠΠΎΠ³Π° ΡΠΈΡΡΠΈΡΠ΅ ΡΠ»ΠΈΠΊΠΈ, ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΎΠ΄ commit ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π½ΠΎΠ²Π°ΡΠ° ΠΎΠ·Π½Π°ΠΊΠ° Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ.
ΠΠ° Π½ΠΎΠ²ΠΈΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ Π·Π° ΡΠΈΡΡΠ΅ΡΠ΅, Π±Π΅ΡΠ΅ ΠΎΠ΄Π»ΡΡΠ΅Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ΄Π΄Π°Π»Π΅ΡΠΈΠΌΠ΅ ΠΎΠ΄ ΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΌΠ΅ΡΠ°-ΡΠ»ΠΈΠΊΠ°, ΠΎΠ΄ ΠΊΠΎΠΈ ΡΠ΅ΠΊΠΎΡΠ° ΡΠΊΠ»Π°Π΄ΠΈΡΠ° Π΅Π΄Π΅Π½ ΠΊΡΠΏ:
- Π·Π°Π»ΠΎΠΆΠ±Π°ΡΠ° Π·Π° ΠΊΠΎΡΠ° Π΅ ΠΈΠ·Π²ΡΡΠ΅Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° (Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π°Π»ΠΈ ΡΠ»ΠΈΠΊΠ°ΡΠ° Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π°, ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ° ΠΈΠ»ΠΈ ΠΎΡΡΠ°Π½Π°Π»Π° ΠΈΡΡΠ° Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ);
- ΠΈ Π½Π°ΡΠΈΠΎΡ Π²Π½Π°ΡΡΠ΅ΡΠ΅Π½ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° ΡΠΊΠ»ΠΎΠΏΠ΅Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ°.
Π‘ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ, ΡΠΎΠ° Π±Π΅ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΈ ΠΎΠ·Π½Π°ΠΊΠΈ ΡΠΎ ΠΎΠ±Π²ΡΡΠΊΠΈ Π²ΠΎ Git.
ΠΠΎΠ½Π΅ΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΈ ΠΎΠΏΡΡ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ
ΠΠΎΠ³Π° Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ, ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ ΡΠ΅Π³Π° ΠΈΠΌΠ°Π°Ρ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΡΡΠΎ Π³ΠΈ ΠΈΠ·Π±ΠΈΡΠ°Π°Ρ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΡΠ΅ ΡΠ»ΠΈΠΊΠΈ. Π‘Π΅ΠΊΠΎΡΠ° ΡΠ°ΠΊΠ²Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π°:
- ΠΌΠ½ΠΎΠ³Ρ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈ, Ρ.Π΅. Git ΠΎΠ·Π½Π°ΠΊΠΈ ΠΈΠ»ΠΈ Git Π³ΡΠ°Π½ΠΊΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΡΠΈ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅;
- ΠΈ Π»ΠΈΠΌΠΈΡΠΎΡ Π½Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°Π½ΠΈ ΡΠ»ΠΈΠΊΠΈ Π·Π° ΡΠ΅ΠΊΠΎΡΠ° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ° ΠΎΠ΄ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΡΠΎ.
ΠΠ° ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡΠ°, Π²Π°ΠΊΠ° ΠΏΠΎΡΠ½Π° Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ°:
cleanup:
keepPolicies:
- references:
tag: /.*/
limit:
last: 10
- references:
branch: /.*/
limit:
last: 10
in: 168h
operator: And
imagesPerReference:
last: 2
in: 168h
operator: And
- references:
branch: /^(main|staging|production)$/
imagesPerReference:
last: 10
ΠΠ²Π°Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΠΎΠ΄ΡΠΆΠΈ ΡΡΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΊΠΎΠΈ ΡΠ΅ Π²ΠΎ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎΡΡ ΡΠΎ ΡΠ»Π΅Π΄Π½ΠΈΠ²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π°:
- ΠΠ°ΡΡΠ²Π°ΡΡΠ΅ ΡΠ° ΡΠ»ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 10 Git ΠΎΠ·Π½Π°ΠΊΠΈ (ΠΏΠΎ Π΄Π°ΡΡΠΌ Π½Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠ°).
- ΠΠ°ΡΡΠ²Π°ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ 2 ΡΠ»ΠΈΠΊΠΈ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΈ Π²ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π½Π΅Π΄Π΅Π»Π° Π·Π° Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ 10 Π½ΠΈΡΠΊΠΈ ΡΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π²ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π½Π΅Π΄Π΅Π»Π°.
- ΠΠ°ΡΡΠ²Π°ΡΡΠ΅ 10 ΡΠ»ΠΈΠΊΠΈ Π·Π° Π³ΡΠ°Π½ΠΊΠΈ
main
,staging
ΠΈproduction
.
ΠΠΎΠ½Π΅ΡΠ½ΠΈΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ ΡΠ΅ ΡΠ²Π΅Π΄ΡΠ²Π° Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΠΎΡΠΈ:
- ΠΡΠ°ΡΠ°ΡΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈ ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ.
- ΠΡΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΈ ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΠ΅ΡΠ΅ Π³ΠΈ ΠΈΠ·Π±ΡΠ°Π²ΠΌΠ΅ ΠΎΠ΄Π½Π°ΠΏΡΠ΅Π΄ ΡΠΎ Π°Π½ΠΊΠ΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° K8s API.
- Π‘ΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΈΡΡΠΎΡΠΈΡΠ°ΡΠ° Π½Π° Git ΠΈ ΠΈΡΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ»ΠΈΠΊΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°.
- ΠΡΡΡΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠ΅ΠΎΡΡΠ°Π½Π°ΡΠΈΡΠ΅ ΡΠ»ΠΈΠΊΠΈ.
ΠΡΠ°ΡΠ°ΡΡΠΈ ΡΠ΅ Π½Π° Π½Π°ΡΠ°ΡΠ° ΠΈΠ»ΡΡΡΡΠ°ΡΠΈΡΠ°, Π΅Π²Π΅ ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΡΠΎ Π²Π΅ΡΡ:
Π‘Π΅ΠΏΠ°ΠΊ, Π΄ΡΡΠΈ ΠΈ Π°ΠΊΠΎ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ werf, ΡΠ»ΠΈΡΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ Π·Π° Π½Π°ΠΏΡΠ΅Π΄Π½ΠΎ ΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠ»ΠΈΠΊΠΈ - Π²ΠΎ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄ΡΡΠ³Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° (ΡΠΏΠΎΡΠ΅Π΄ ΠΏΡΠ΅ΡΠΏΠΎΡΠΈΡΠ°Π½ΠΈΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ Π·Π° ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ»ΠΈΠΊΠΈ) - ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ/ΡΡΠ»ΡΠΆΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π°Π°Ρ ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠΎΠ½Π°ΡΠ΄Π΅ΡΠ΅ ΠΎΠ½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΠΎ Π²Π°ΡΠΈΠΎΡ ΠΎΡΠ°ΠΊ ΡΡΠΎ Π²ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Π°Ρ Π΄Π° Π³ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΡΠ΅ Π½ΠΈΠ²Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½Π΅ΠΏΡΠ΅ΡΠ΅Π½ΠΎ. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠ°ΡΠΎΡ ΡΡΠΎ Π³ΠΎ ΠΏΠΎΠΌΠΈΠ½Π°Π²ΠΌΠ΅ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅ Π²Π°ΡΠΈΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΡΠ»ΡΡΠ°Ρ ΡΠΎ Π½ΠΎΠ²ΠΈ Π΄Π΅ΡΠ°Π»ΠΈ ΠΈ ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°ΡΠ°.
ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
- ΠΠΎΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΡΠ½Π°, ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠΈΠΌΠΎΠ²ΠΈ ΡΠ΅ ΡΠΎΠΎΡΡΠ²Π°Π°Ρ ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎ ΠΏΡΠ΅Π»Π΅Π²Π°ΡΠ΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ.
- ΠΠΎΠ³Π° Π±Π°ΡΠ°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ°, ΠΏΡΠ²ΠΎ Π΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠ²ΡΠ΄Π°Ρ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈΡΠ΅ Π·Π° ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎΡΡΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ°.
- ΠΠ»Π°ΡΠΊΠΈΡΠ΅ ΡΡΠΎ Π³ΠΈ Π½ΡΠ΄Π°Ρ ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ Π·Π° ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°Π°Ρ Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠΈΡΡΠ΅ΡΠ΅ ΡΡΠΎ Π½Π΅ Π³ΠΎ Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ βΠ½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ²Π΅Ρβ: ΡΠ»ΠΈΠΊΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ Kubernetes ΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΡΠ΅ΠΊΠΎΠ²ΠΈ Π½Π° ΡΠΈΠΌΠΎΡ.
- Π€Π»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π΅Π½ ΠΈ Π΅ΡΠΈΠΊΠ°ΡΠ΅Π½ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌ ΠΌΠΎΡΠ° Π΄Π° ΠΈΠΌΠ° ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° CI/CD ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π·Π° ΡΠ»ΠΈΠΊΠΈΡΠ΅ Π½Π° Docker.
PS
ΠΡΠΎΡΠΈΡΠ°ΡΡΠ΅ ΠΈ Π½Π° Π½Π°ΡΠΈΠΎΡ Π±Π»ΠΎΠ³:
- Β«
ΠΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° Π²ΠΎ ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡΠΎΡ werf: Π·ΠΎΡΡΠΎ ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°? "; - Β«
3-Π½Π°ΡΠΎΡΠ½ΠΎ ΡΠΏΠΎΡΡΠ²Π°ΡΠ΅ Π΄ΠΎ Π²Π΅ΡΡ: ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΡΠ±Π΅ΡΠ½Π΅ΡΠΈΡ ΡΠΎ Π₯Π΅Π»ΠΌ βΠ½Π° ΡΡΠ΅ΡΠΎΠΈΠ΄ΠΈβ "; - Β«
ΠΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° monorepo ΠΈ multirepo Π²ΠΎ werf ΠΈ ΠΊΠ°ΠΊΠ²Π° Π²ΡΡΠΊΠ° ΠΈΠΌΠ° Docker Registry ΡΠΎ ΡΠΎΠ° "; - Β«
ΠΠ΅ΡΡ 1.1 ΠΈΠ·Π΄Π°Π½ΠΈΠ΅: ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ° Π½Π° Π³ΡΠ°Π΄ΠΈΡΠ΅Π»ΠΎΡ Π΄Π΅Π½Π΅Ρ ΠΈ ΠΏΠ»Π°Π½ΠΎΠ²ΠΈ Π·Π° ΠΈΠ΄Π½ΠΈΠ½Π°ΡΠ° ".
ΠΠ·Π²ΠΎΡ: www.habr.com