ΠΠ΅ΡΠ΅ Π½Π΅ Π²Π΅Π΄Π½ΡΠΆ ΡΠ°Π·ΠΊΠ°Π·Π²Π°Ρ ΠΌΠ΅ Π·Π° Π½Π°ΡΠΈΡ GitOps ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ , Π° ΡΠΎΠ·ΠΈ ΠΏΡΡ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ ΠΎΠΏΠΈΡΠ° ΡΠΈ ΠΎΡ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΉΡ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΠ°ΠΌΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ β (ΡΡΡΠΊΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π΅ β ). Π’ΠΎΠ²Π° Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΡΡΠ°ΡΠΈΡΠ΅Π½ ΡΠ°ΠΉΡ, Π½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΠΌΡ Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ.

ΠΡΠΌΠ° Π΄Π° ΡΠ΅ Π²ΠΏΡΡΠΊΠ°ΠΌΠ΅ Π² Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΡΠ°ΠΉΡΠ°: Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠΎ ΠΌΠ΅Π½Ρ Π·Π° Π²ΡΠΈΡΠΊΠΈ Π²Π΅ΡΡΠΈΠΈ, ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΡΡΠ° ΠΈ Ρ.Π½. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π°, ΡΠ΅ ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΡΡ
Ρ Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ ΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΌΠ°Π»ΠΊΠΎ Π½Π° ΡΡΠΏΡΡΡΡΠ²Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ CI/CD.
ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: ΠΊΠ°ΠΊ Π΅ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ ΡΠ°ΠΉΡΡΡ
ΠΠ°ΠΏΠΎΡΠ²Π°ΠΌΠ΅ Ρ ΡΠΎΠ²Π°, ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° werf Π΅ ΡΡΡ ΡΠ°Π½Π΅Π½Π° Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΊΠΎΠ΄Π° ΠΌΡ. Π’ΠΎΠ²Π° Π½Π°Π»Π°Π³Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ Π² ΡΡΠ»ΠΎΡΡ ΠΈΠ·Π»ΠΈΠ·Π°Ρ ΠΈΠ·Π²ΡΠ½ ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π½Π°ΡΡΠΎΡΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡ, Π½ΠΎ ΠΏΠΎΠ½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅:
- ΠΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° werf Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π»ΠΈΠ·Π°Ρ Π±Π΅Π· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Ρ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° werf;
- ΠΡΠΎΠ΅ΠΊΡΡΡ ΠΈΠΌΠ° Π΄ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅: Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·Π»ΠΈΠ·Π°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΡΠΈ Π½Π° Π΄Π΅Π½;
- ΠΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΡΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π΄Π΅ΠΏΠ»ΠΎΡ Π½Π° ΡΠ°ΠΉΡΠ° Ρ Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎΠ½Π΅ ΡΠ° ΠΈΠ·ΠΌΠΎΡΠΈΡΠ΅Π»Π½ΠΈ;
- Π ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ ΠΏΡΠΈΠ΅Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅Π½ , Ρ 5 ΠΊΠ°Π½Π°Π»Π° Π½Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡ. ΠΡΠΎΡΠ΅ΡΡΡ Π½Π° ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅ ΠΏΡΠ΅Π· ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅ Π² ΡΠ΅Π΄Π° Π½Π° ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ°: ΠΎΡ alpha Π΄ΠΎ rock-solid;
- Π‘Π°ΠΉΡΡΡ ΠΈΠΌΠ° ΡΡΡΠΊΠ° Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΡΠΎ "ΠΆΠΈΠ²Π΅Π΅ ΠΈ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°" (Ρ.Π΅. ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Ρ ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°) ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° (Ρ.Π΅. Π°Π½Π³Π»ΠΎΠ³ΠΎΠ²ΠΎΡΡΡΠ°) Π²Π΅ΡΡΠΈΡ.
ΠΠ° Π΄Π° ΡΠΊΡΠΈΠ΅ΠΌ Π²ΡΠΈΡΠΊΠ°ΡΠ° ΡΠ°Π·ΠΈ "Π²ΡΡΡΠ΅ΡΠ½Π° ΠΊΡΡ Π½Ρ" ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΉΠΊΠΈ ΠΌΡ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ "ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ", Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° werf β ΡΠΎΠ²Π° Π΅ . ΠΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΊΠ°Π½Π°Π»Π° Π½Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅, Π° multiwerf ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈ Π΄Π°Π»ΠΈ ΠΈΠΌΠ° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π² ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΡΠ΅ Ρ ΠΈΠ·ΡΠ΅Π³Π»ΠΈ.
Π ΠΌΠ΅Π½ΡΡΠΎ Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΡΠ° ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° werf Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ ΠΊΠ°Π½Π°Π». ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Π½Π° Π°Π΄ΡΠ΅Ρ ΡΠ΅ ΠΎΡΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π½Π°ΠΉ-ΡΡΠ°Π±ΠΈΠ»Π½ΠΈΡ ΠΊΠ°Π½Π°Π» Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ β ΡΡ ΡΡΡΠΎ ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡa ΠΎΡ ΡΡΡΡΠ°ΡΠΊΠΈΡΠ΅. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΊΠ°Π½Π°Π»Π° Π΅ Π½Π°Π»ΠΈΡΠ½Π° Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π°Π΄ΡΠ΅ΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° beta-ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ 1.0).
Π ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΉΡΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ:
- ΠΎΡΠ½ΠΎΠ²Π½Π° (ΠΎΡΠ²ΠΎΡΠ΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅),
- Π·Π° Π²ΡΠ΅ΠΊΠΈ Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΊΠ°Π½Π°Π» Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π²ΡΡΠΊΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ).
ΠΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ°ΠΉΡΠ°, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° , ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΠΊΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° /docs Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ werf Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° (jekyll build), ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΠΉΠΊΠΈ Π½Π° Git-ΡΠ΅Π³ Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ.
ΠΡΡΠ°Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ, ΡΠ΅:
- Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠ°ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° (werf);
- CI/CD ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠ° ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° GitLab CI;
- ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠ°Π±ΠΎΡΠΈ Π² Kubernetes.
ΠΠ°Π΄Π°ΡΠΈ
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΠΎΡΠΌΡΠ»ΠΈΡΠ°ΠΌΠ΅ Π·Π°Π΄Π°ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΎΡΡΠΈΡΠ°Ρ ΡΡΠ»Π°ΡΠ° ΠΎΠΏΠΈΡΠ°Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°:
- Π‘Π»Π΅Π΄ ΡΠΌΡΠ½Π° Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° werf Π½Π° ΠΊΠΎΠΉΡΠΎ ΠΈ Π΄Π° Π΅ ΠΊΠ°Π½Π°Π» Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΠ°ΠΉΡΠ° ΡΡΡΠ±Π²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°..
- ΠΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΄Π° ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°ΡΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΡΠ°..
ΠΡΠ΅-ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ°ΠΉΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ»Π΅Π΄ ΡΠΌΡΠ½Π° Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠΉΡΠΎ ΠΈ Π΄Π° Π΅ ΠΊΠ°Π½Π°Π» ΠΎΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ Git-ΡΠ΅Π³ΠΈ, Π½ΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈ:
- ΠΠΎΠ½Π΅ΠΆΠ΅ ΡΠΏΠΈΡΡΠΊΡΡ Ρ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ°ΠΌΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅, Π½Π° ΠΊΠΎΠΈΡΠΎ Π΅ ΡΠΌΠ΅Π½Π΅Π½Π° Π²Π΅ΡΡΠΈΡΡΠ°. ΠΠΈΠΌΠ° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠΌΠ΅ΡΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠ²Π° Π²ΡΠΈΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ?
- Π‘Π°ΠΌΠΈΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π°ΡΠΈΡΠ°. Π Π½ΡΠΊΠ°ΠΊΡΠ² ΠΌΠΎΠΌΠ΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½ΡΠΌΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅, ΠΏΠΎ-ΡΡΠ°Π±ΠΈΠ»Π½ΠΈ ΠΎΡ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ early-access 1.1, Π½ΠΎ Ρ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΡΡ β Π½Π΅ Π±ΠΈΠ²Π° Π»ΠΈ Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΡΡΠ½ΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°?
ΠΠ·Π»ΠΈΠ·Π°, ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠΈ ΡΠ΅ Π²ΡΠ½ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ..
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
ΠΠ·Π±ΠΎΡ Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄
ΠΠ°ΡΠΎ ΠΎΠΏΡΠΈΡ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π²ΡΡΠΊΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π²Π΅ΡΡΠΈΡ Ρ ΠΎΡΠ΄Π΅Π»Π΅Π½ pod Π² Kubernetes. Π’Π°Π·ΠΈ ΠΎΠΏΡΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±Π΅ΠΊΡΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π½Π°ΡΠ°ΡΡΠ²Π° Ρ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π±ΡΠΎΡ Π½Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΈΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΡ Π½Π° werf. Π ΡΠΎΠ²Π° ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅: Π·Π° Π²ΡΡΠΊΠ° Π²Π΅ΡΡΠΈΡ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° ΡΠ²ΠΎΠΉ HTTP-ΡΡΡΠ²ΡΡ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Ρ ΠΌΠ°Π»ΠΊΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ Π·Π° ΡΠ΅ΡΡΡΡΠΈ.
ΠΠΈΠ΅ ΠΎΠ±Π°ΡΠ΅ ΠΈΠ·Π±ΡΠ°Ρ ΠΌΠ΅ ΠΏΡΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΎΠ±ΡΠ°Π·.Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΡΠ° ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ NGINX, Π° ΡΡΠ°ΡΠΈΠΊΡΡ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ Deployment ΠΈΠ΄Π²Π° ΡΡΠ΅Π· NGINX Ingress. ΠΡΠΎΡΡΠ°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° β stateless ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π»Π΅ΡΠ½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° Deployment (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ) Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ°ΠΌΠΈΡ Kubernetes.
ΠΠΊΠΎ Π΄Π° Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎ-ΡΠΎΡΠ½ΠΈ, Π½ΠΈΠ΅ ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π΄Π²Π° ΠΎΠ±ΡΠ°Π·Π°: Π΅Π΄ΠΈΠ½ β Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡ, ΠΈ Π²ΡΠΎΡΠΈ β Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½, Π·Π° dev-ΠΊΠΎΠ½ΡΡΡΠ°. ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΡ ΠΎΠ±ΡΠ°Π· ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° (ΡΡΠ°ΡΡΠΈΡΠ°) ΡΠ°ΠΌΠΎ Π½Π° dev-ΠΊΠΎΠ½ΡΡΡΠ° Π² ΡΡΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΈ ΡΡΠ΄ΡΡΠΆΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ°ΠΉΡΠ° ΠΎΡ ΡΠ΅Π²Ρ-ΠΊΠΎΠΌΠΈΡΠ°, Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Ingress-ΡΠ΅ΡΡΡΡΠΈ.
werf ΡΡΠ΅ΡΡ git clone ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ
ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ ΠΌΠ΅, Π·Π° Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΠΌΠ΅ ΡΡΠ°ΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ°ΠΉΡΠ° Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° Π²Π΅ΡΡΠΈΡ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΠΌ ΡΠ±ΠΎΡΠΊΠ°, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈΠΌ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΡΠ°Π³ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΠΎΠΆΠ΅Ρ ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π° ΠΈ ΠΊΠ°ΡΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ°, ΠΈΠ·Π±ΠΈΡΠ°ΠΉΠΊΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΠ°Π³ΠΎΠ²Π΅ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈ ΠΎΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΈΠ·ΠΈΡΠΊΠ²Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈβ¦ ΠΡΡΠ³ ΡΠ΅ΡΠΈΠΎΠ·Π΅Π½ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ β ΠΏΡΠΈ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½ΡΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ±ΠΎΡΠΊΠ°ΡΠ°.
Π’ΡΠΊ Π½Π° ΠΏΠΎΠΌΠΎΡ Π½ΠΈ ΠΈΠ΄Π²Π° ΡΠ°ΠΌΠ°ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° werf, ΠΊΠΎΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΡΠΌΠ½ΠΎ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ . ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° werf Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΡΡΠΊΠΎΡΠΈ ΡΠ±ΠΎΡΠΊΠ°ΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ werf ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠ° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π΅Π΄ΠΈΠ½ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ΠΏΡΡ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·Π²ΡΡΡΠ²Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ fetch ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ ΡΠ°ΠΌΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ (Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° Π΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΡΡ docs), ΠΊΠΎΠ΅ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Jekyll Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°ΡΠ° ΠΈ ΡΠΎΠΉ Π½Π΅ Π΅ Π½ΡΠΆΠ΅Π½ Π² ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΠΎΠ±ΡΠ°Π·, Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π² , Π° Π² ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΠΎΠ±ΡΠ°Π· Π΄Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°..
ΠΠΈΡΠ΅ΠΌ werf.yaml
Π ΡΠ°ΠΊΠ°, ΡΠ΅ΡΠΈΡ ΠΌΠ΅, ΡΠ΅ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ Π²ΡΡΠΊΠ° Π²Π΅ΡΡΠΈΡ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Π½Π° werf. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π½ΠΈΠ΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΊΠΎ ΠΎΡ ΡΠ΅Π·ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ°ΡΠ°, Π·Π°ΡΠΎΠ²Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° ΡΠ±ΠΎΡΠΊΠ° (ΡΡΡΠΎΠ³ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, Π²ΡΡΡΠ½ΠΎΡΡ ΠΌΠΎΠΆΠ΅ΠΌ, Π½ΠΎ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π΅ ΡΡΠ²ΡΠ΅ΠΌ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ).
werf ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΡΠ²ΠΎΡ ΡΠ°ΠΉΠ» Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (werf.yaml), Π° ΡΠΎΠ²Π° Π΄Π°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° "Π½Π° Π»Π΅ΡΡ" Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ (ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π½ΠΈ ΡΡΡΠ±Π²Π°!). ΠΡΠ½ΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅ ΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡΡΠ°, Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΊΠΎΡΡΠΎ ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π΄Π²Π° ΠΎΠ±ΡΠ°Π·Π°: werf-doc ΠΈ werf-dev Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΡΡΠΈ.
ΠΡΠ½ΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΡΡΠ΅Π· ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°. ΠΡΠΎ ΡΠ΅Ρ Π½ΠΈΡ ΡΡΡΡΠ°Π²:
-
RELEASESβ Π½ΠΈΠ· ΡΡΡ ΡΠΏΠΈΡΡΠΊ Π½Π° ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ΅ ΠΈ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠ°ΡΠ° ΠΈΠΌ Π°ΠΊΡΡΠ°Π»Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° werf, ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠΏΠΈΡΡΠΊ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ ΡΡΡ ΡΠΏΠ΅ΠΉΡΠΎΠ²Π΅ Π² ΡΠΎΡΠΌΠ°Ρ%. ΠΡΠΈΠΌΠ΅Ρ:1.0%v1.0.4-beta.20 -
CHANNELSβ Π½ΠΈΠ· ΡΡΡ ΡΠΏΠΈΡΡΠΊ Π½Π° ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΈ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠ°ΡΠ° ΠΈΠΌ Π°ΠΊΡΡΠ°Π»Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° werf, ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠΏΠΈΡΡΠΊ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ ΡΡΡ ΡΠΏΠ΅ΠΉΡΠΎΠ²Π΅ Π² ΡΠΎΡΠΌΠ°Ρ%. ΠΡΠΈΠΌΠ΅Ρ:1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22 -
ROOT_VERSIONβ Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ΅Π»ΠΈΠ·Π° Π½Π° werf Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΉΡΠ° (Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π·Π° Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΈΡ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΡΠ΅Π»ΠΈΠ·Π°). ΠΡΠΈΠΌΠ΅Ρ:v1.0.4-beta.20 -
REVIEW_SHAβ Ρ Π΅Ρ Π½Π° review-ΠΊΠΎΠΌΠΌΠΈΡΠ°, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΠΈ Π²Π΅ΡΡΠΈΡΡΠ° Π·Π° ΡΠ΅ΡΡΠΎΠ²ΠΈΡ ΠΊΠΎΠ½ΡΡΡ.
Π’Π΅Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠΏΡΠ»Π²Π°Ρ Π² GitLab CI pipeline, Π° ΠΊΠ°ΠΊ ΡΠΎΡΠ½ΠΎ β Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
ΠΡΡΠ²ΠΎ, Π·Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ, ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π² werf.yaml ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° Go-ΡΠ°Π±Π»ΠΎΠ½ΠΈ, ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΈΠΌ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°:
{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }} ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ°ΠΉΡΠ° Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ Π·Π° Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΡΠ»ΡΡΠ°ΠΈ (Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈ Π²Π΅ΡΡΠΈΡΡΠ° Π·Π° dev-ΠΊΠΎΠ½ΡΡΡ). ΠΠ°ΡΠΎΠ²Π° ΡΠ΅ Π³ΠΎ ΠΈΠ·Π½Π΅ΡΠ΅ΠΌ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ Π±Π»ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡ define β Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° include. ΠΠ° ΡΠ°Π±Π»ΠΎΠ½Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ:
-
Versionβ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π° Π²Π΅ΡΡΠΈΡ (ΠΈΠΌΠ΅ Π½Π° Π΅ΡΠΈΠΊΠ΅Ρ); -
Channelβ ΠΈΠΌΠ΅ Π½Π° ΠΊΠ°Π½Π°Π»Π° Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, Π·Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π°ΡΡΠ΅ΡΠ°ΠΊΡ; -
Commitβ Ρ Π΅Ρ Π½Π° ΠΊΠΎΠΌΠΌΠΈΡΠ°, Π°ΠΊΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡΡ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π·Π° review-ΠΊΠΎΠΌΠΌΠΈΡ; - ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ°
{{- define "doc_artifact" -}}
{{- $Root := index . "Root" -}}
Π°ΡΡΠ΅ΡΠ°ΠΊΡ: doc-{{ .Channel }}
ΠΎΡ: jekyll/builder:3
ΠΌΠΎΠ½ΡΠΈΡΠ°Π½Π΅:
- ΠΎΡ: build_dir
Π΄ΠΎ: /usr/local/bundle
ansible:
ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅:
- shell: |
export PATH=/usr/jekyll/bin/:$PATH
- ΠΈΠΌΠ΅: "ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ"
shell: bundle install
args:
executable: /bin/bash
chdir: /app/docs
ΠΏΡΠ΅Π΄ΠΈΠΠ°ΡΡΡΠΎΠΉΠΊΠ°:
{{- if .Commit }}
- shell: echo "ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ SHA - {{ .Commit }}."
{{- end }}
{{- if eq .Channel "root" }}
- ΠΈΠΌΠ΅: "releases.yml HASH: {{ $Root.Files.Get "releases.yml" | sha256sum }}"
copy:
ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅: |
{{ $Root.Files.Get "releases.yml" | indent 8 }}
dest: /app/docs/_data/releases.yml
{{- else }}
- ΡΠ°ΠΉΠ»:
ΠΏΡΡ: /app/docs/_data/releases.yml
ΡΡΡΡΠΎΡΠ½ΠΈΠ΅: touch
{{- end }}
- ΡΠ°ΠΉΠ»:
ΠΏΡΡ: "{{`{{ item }}`}}"
ΡΡΡΡΠΎΡΠ½ΠΈΠ΅: Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
ΡΠ΅ΠΆΠΈΠΌ: 0777
with_items:
- /app/main_site/
- /app/ru_site/
- ΡΠ°ΠΉΠ»:
dest: /app/docs/pages_ru/cli
ΡΡΡΡΠΎΡΠ½ΠΈΠ΅: Π»ΠΈΠ½ΠΊ
src: /app/docs/pages/cli
- shell: |
echo -e "werfVersion: {{ .Version }}nwerfChannel: {{ .Channel }}" > /tmp/_config_additional.yml
export PATH=/usr/jekyll/bin/:$PATH
{{- if and (ne .Version "review") (ne .Channel "root") }}
{{- $_ := set . "BaseURL" ( printf "v%s" .Channel ) }}
{{- else if ne .Channel "root" }}
{{- $_ := set . "BaseURL" .Channel }}
{{- end }}
jekyll build -s /app/docs -d /app/_main_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/tmp/_config_additional.yml
jekyll build -s /app/docs -d /app/_ru_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/app/docs/_config_ru.yml,/tmp/_config_additional.yml
args:
executable: /bin/bash
chdir: /app/docs
git:
- url: https://github.com/flant/werf.git
Π΄ΠΎ: /app/
ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊ: jekyll
Π³ΡΡΠΏΠ°: jekyll
{{- if .Commit }}
commit: {{ .Commit }}
{{- else }}
tag: {{ .Version }}
{{- end }}
stageDependencies:
ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅: ['docs/Gemfile','docs/Gemfile.lock']
ΠΏΡΠ΅Π΄ΠΈΠΠ°ΡΡΡΠΎΠΉΠΊΠ°: '**/*'
includePaths: 'docs'
excludePaths: '**/*.sh'
{{- end }} ΠΠΌΠ΅ΡΠΎ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎ. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΡΠΎΠ²Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ°Π½Π°Π»Π° (ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° .Channel) ΠΊΠ°ΡΠΎ ΡΡΡΠΈΠΊΡ Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ°: Π°ΡΡΠ΅ΡΠ°ΠΊΡ: doc-{{ .Channel }}. ΠΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅, ΡΠ΅ ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ ΠΎΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π°ΡΠ΅ Π½Π° ΡΡΡΠΈΡΠ΅ ΠΈΠΌΠ΅Π½Π°.
ΠΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΊΠ°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π° werf, ΠΊΠ°ΡΠΎ . ΠΠΎΠ½ΡΠΈΡΠ°Π½Π΅ΡΠΎ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΡΠ»ΡΠΆΠ΅Π±Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ build_dir ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠ°Π·ΠΈ ΠΊΠ΅ΡΠ° Π½Π° Jekyll ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΡΡΠ° Π½Π° pipeline, ΠΊΠΎΠ΅ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΡΠ²Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ΅ заб注ζΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° releases.yml β ΡΠΎΠ²Π° Π΅ YAML ΡΠ°ΠΉΠ» Ρ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ΅, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π·Π°ΡΠ²ΡΠ²Π° Ρ (Π°ΡΡΠ΅ΡΠ°ΠΊΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° pipeline). Π’ΠΎΠΉ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΉΡΠ°, Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° Π½ΠΈ Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΠΎΡ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ ΠΌΡ Π·Π°Π²ΠΈΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° Π΅Π΄ΠΈΠ½ Π°ΡΡΠ΅ΡΠ°ΠΊΡ β Π°ΡΡΠ΅ΡΠ°ΠΊΡΡΡ Π½Π° ΡΠ°ΠΉΡΠ° Ρ ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ (Π² Π΄ΡΡΠ³ΠΈΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ).
Π’ΠΎΠ²Π° Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ»ΠΎΠ²Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ if Go ΡΠ°Π±Π»ΠΎΠ½ΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° {{ $Root.Files.Get "releases.yml" | sha256sum }} Π² Π΅ΡΠ°ΠΏΠ° . Π Π°Π±ΠΎΡΠΈ ΡΠΎΠ²Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½: ΠΏΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡ Π·Π° ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ (ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° .Channel ΡΠ°Π²Π½Π° Π½Π° root) Ρ
Π°Ρ Π½Π° ΡΠ°ΠΉΠ»Π° releases.yml Π²Π»ΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠ° Π½Π° ΡΡΠ»Π°ΡΠ° ΡΠ°Π·Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠΉ Π΅ ΡΠ°ΡΡ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Ansible Π·Π°Π΄Π°ΡΠ°ΡΠ° (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠΌΠ΅). Π’Π°ΠΊΠ° ΡΠ΅, ΠΏΡΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ ΡΠ°ΠΉΠ»Π° releases.yml , ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΎΡΠ½ΠΎΠ²Π΅Π½.
ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Π²ΡΠ½ΡΠ½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. Π ΠΎΠ±ΡΠ°Π·Π° Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΎΡ , ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΡΠ°ΠΌΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° /docs, ΠΊΠ°ΡΠΎ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΠΎΠ΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π΄Π°Π½Π½ΠΈ Π·Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡ ΡΠ°Π³ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄Π΅Π½ ΠΊΠΎΠΌΠΈΡ.
ΠΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΈ ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ΅, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΠΊΡΠ» ΠΏΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° .WerfVersions Π² werf.yaml:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}} Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΈΠΊΡΠ»ΡΡ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° (Π½Π°Π΄ΡΠ²Π°ΠΌΠ΅ ΡΠ΅ Π½Π° ΡΠΎΠ²Π°), Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ
β ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΡΠ° --- (ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ» Π²ΠΈΠΆΡΠ΅ Π² ). ΠΠ°ΠΊΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ
ΠΌΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ, ΠΏΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π² ΡΠΈΠΊΡΠ»Π° ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡ, URL ΠΈ ΠΊΠΎΡΠ΅Π½ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Π½ΠΎ Π²Π΅ΡΠ΅ Π±Π΅Π· ΡΠΈΠΊΡΠ», ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π·Π° Β«ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΡΠ»ΡΡΠ°ΠΈΒ»: Π·Π° ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ, Π° ΡΡΡΠΎ ΠΈ Π²Π΅ΡΡΠΈΡ ΠΎΡ ΠΏΡΠ΅Π³Π»Π΅Π΄Π½ΠΈΡ ΠΊΠΎΠΌΠΈΡ:
{{ dict "Version" .WerfRootVersion "Channel" "root" "Root" $Root | include "doc_artifact" }}
---
{{- if .WerfReviewCommit }}
{{ dict "Version" "review" "Channel" "review" "Commit" .WerfReviewCommit "Root" $Root | include "doc_artifact" }}
{{- end }} ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡΡ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄Π½ΠΈΡ ΠΊΠΎΠΌΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ±ΡΠ°Π½ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° .WerfReviewCommit.
ΠΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ° Π³ΠΎΡΠΎΠ²ΠΈ β Π²ΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° ΡΠ΅ Π·Π°Π΅ΠΌΠ΅ΠΌ Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ΡΠΎ!
ΠΡΠ°ΠΉΠ½ΠΈΡΡ ΠΎΠ±ΡΠ°Π·, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π² Kubernetes, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ NGINX, Π² ΠΊΠΎΠΉΡΠΎ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΡΠ°ΠΉΠ»ΡΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΡΡΠ²ΡΡΠ° nginx.conf ΠΈ ΡΡΠ°ΡΠΈΠΊΠ°ΡΠ° ΠΎΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅. ΠΡΠ²Π΅Π½ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π½Π° ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ°ΠΉΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΠΈΠΊΡΠ»Π° ΠΏΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° .WerfVersions Π·Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π½Π° ΠΊΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΈ ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ΅ + Π΄Π° ΡΠΏΠ°Π·ΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΈΠ΅Ρ
ΠΌΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ. ΠΠΎΠ½Π΅ΠΆΠ΅ Π²ΡΠ΅ΠΊΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΡΡΡ
ΡΠ°Π½ΡΠ²Π° Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΡΠ° Π·Π° Π΄Π²Π° Π΅Π·ΠΈΠΊΠ°, ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°ΠΌΠ΅ Π³ΠΈ Π½Π° ΠΌΠ΅ΡΡΠ°ΡΠ°, ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΠΎΠ±ΡΠ°Π· werf-doc
image: werf-doc
from: nginx:stable-alpine
ansible:
setup:
- name: "ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° /etc/nginx/nginx.conf"
copy:
content: |
{{ .Files.Get ".werf/nginx.conf" | indent 8 }}
dest: /etc/nginx/nginx.conf
- file:
path: "{{`{{ item }}`}}"
state: directory
mode: 0777
with_items:
- /app/main_site/assets
- /app/ru_site/assets
import:
- artifact: doc-root
add: /app/_main_site
to: /app/main_site
before: setup
- artifact: doc-root
add: /app/_ru_site
to: /app/ru_site
before: setup
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
add: /app/_main_site
to: /app/main_site/v{{ $Channel }}
before: setup
{{ end -}}
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
add: /app/_ru_site
to: /app/ru_site/v{{ $Channel }}
before: setup
{{ end -}}ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΠΎΠ±ΡΠ°Π·, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ Π½Π° dev-ΠΊΠΎΠ½ΡΡΡ, ΡΡΠ΄ΡΡΠΆΠ° ΡΠ°ΠΌΠΎ Π΄Π²Π΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΡΠ°: Π²Π΅ΡΡΠΈΡ ΠΎΡ review-ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ°ΠΉΡΠ° (ΡΠ°ΠΌ ΡΠ° ΠΎΠ±ΡΠΈΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈ ΠΈ, Π°ΠΊΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Π΄Π°Π½Π½ΠΈΡΠ΅ Π·Π° ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ΅). Π’Π°ΠΊΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΡ ΠΎΠ±ΡΠ°Π· ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅ΠΊΡΠΈΡΡΠ° Π·Π° ΠΈΠΌΠΏΠΎΡΡ (ΠΈ, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΏΠΎ ΠΈΠΌΠ΅ΡΠΎ):
image: werf-dev
...
import:
- artifact: doc-root
add: /app/_main_site
to: /app/main_site
before: setup
- artifact: doc-root
add: /app/_ru_site
to: /app/ru_site
before: setup
{{- if .WerfReviewCommit }}
- artifact: doc-review
add: /app/_main_site
to: /app/main_site/review
before: setup
- artifact: doc-review
add: /app/_ru_site
to: /app/ru_site/review
before: setup
{{- end }} ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅, Π°ΡΡΠ΅ΡΠ°ΠΊΡΡΡ Π·Π° review-ΠΊΠΎΠΌΠΌΠΈΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° REVIEW_SHA. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠΎ Π΄Π° Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠ±ΡΠ°Π· werf-dev, Π°ΠΊΠΎ Π½ΡΠΌΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° REVIEW_SHA, Π½ΠΎ Π·Π° Π΄Π° Π½Π° Docker-ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ Π² werf, ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΎΠ±ΡΠ°Π·Π° werf-dev ΡΠ΅ ΠΎΡΡΠ°Π²ΠΈ ΡΠ°ΠΌΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ (ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΄Π° Π΅, ΡΠΎΠΉ Π²Π΅ΡΠ΅ Π΅ ΡΡΠ±ΡΠ°Π½), Π·Π° Π΄Π° ΠΎΠΏΡΠΎΡΡΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° pipeline.
Π‘Π±ΠΎΡΠΊΠ°ΡΠ° Π΅ Π³ΠΎΡΠΎΠ²Π°! ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ CI/CD ΠΈ Π²Π°ΠΆΠ½ΠΈΡΠ΅ Π½ΡΠ°Π½ΡΠΈ.
Pipeline Π² GitLab CI ΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½Π°ΡΠ° ΡΠ±ΠΎΡΠΊΠ°
ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ±ΠΎΡΠΊΠ°ΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² werf.yaml. Π’ΠΎΠ²Π° Π½Π΅ ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° REVIEW_SHA, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° pipeline ΠΎΡ GitHub hook.
ΠΠ·Π²Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π²ΡΠ½ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·Π½Π΅ΡΠ΅Π½ΠΎ Π² Bash-ΡΠΊΡΠΈΠΏΡ generate_artifacts, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π΄Π²Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π·Π° pipeline Π½Π° GitLab:
- ΡΠ°ΠΉΠ»
releases.ymlΡ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ΅, - ΡΠ°ΠΉΠ»
common_envs.sh, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ°Π½Π΅.
Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° generate_artifacts ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² Π½Π°ΡΠ΅ΡΠΎ . Π‘Π°ΠΌΠΎΡΠΎ ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π΅ Π΅ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°, Π½ΠΎ ΡΠ°ΠΉΠ»ΡΡ common_envs.sh Π΅ Π²Π°ΠΆΠ΅Π½ Π·Π° Π½Π°Ρ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΎΡ Π½Π΅Π³ΠΎ Π·Π°Π²ΠΈΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° werf. ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅:
export RELEASES='1.0%v1.0.6-4'
export CHANNELS='1.0-alpha%v1.0.7-1 1.0-beta%v1.0.7-1 1.0-ea%v1.0.6-4 1.0-stable%v1.0.6-4 1.0-rock-solid%v1.0.6-4'
export ROOT_VERSION='v1.0.6-4' ΠΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΈΠ·Π²ΠΎΠ΄Π° ΠΎΡ ΡΠ°ΠΊΡΠ² ΡΠΊΡΠΈΠΏΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Bash ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ.
Π ΡΠ΅Π³Π° Π½Π°ΠΉ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΡΠΎ. ΠΠ° Π΄Π° ΡΠ°Π±ΠΎΡΡΡ ΠΊΠ°ΠΊΡΠΎ ΡΠ±ΠΎΡΠΊΠ°ΡΠ°, ΡΠ°ΠΊΠ° ΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΡΠ΅, ΡΠ΅ werf.yaml Π±Π΅ΡΠ΅ ΡΠ° Π΅Π΄Π½Π°ΠΊΠ²ΠΈ ΠΏΠΎΠ½Π΅ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ pipeline. ΠΠΊΠΎ ΡΠΎΠ²Π° ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΎ, ΡΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈΡΠ΅ Π½Π° Π΅ΡΠ°ΠΏΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ werf ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π° ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ°ΡΠ° ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΏΠ»ΠΎΡ, ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ. Π’ΠΎΠ²Π° ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΡ Π·Π° Π΄Π΅ΠΏΠ»ΠΎΡ ΠΎΠ±ΡΠ°Π· ΡΠ΅ Π»ΠΈΠΏΡΠ²Π°.
Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, Π°ΠΊΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π·Π° Π½Π° ΡΠ°ΠΉΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ΅ ΠΈ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π΅ Π΅Π΄Π½Π°, Π° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π΄Π΅ΠΏΠ»ΠΎΡ ΠΈΠ·Π»Π΅Π·Π΅ Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° ΠΈΠΌΠ°Ρ Π΄ΡΡΠ³ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, ΡΠΎ Π΄Π΅ΠΏΠ»ΠΎΡΡ ΡΠ΅ Π·Π°Π²ΡΡΡΠΈ Ρ Π³ΡΠ΅ΡΠΊΠ°: ΠΎΠ±ΡΠ°Π·ΡΡ Π½Π° Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ ΡΡΠ±ΡΠ°Π½.
ΠΠΊΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ werf.yaml Π·Π°Π²ΠΈΡΠΈ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΈΡΡΠΊ Ρ Π°ΠΊΡΡΠ°Π»Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠ°ΠΊΡΠΎ Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ), ΡΠΎ ΡΡΡΡΠ°Π²ΡΡ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° pipeline. Π’ΠΎΠ²Π° Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ, Π°ΠΊΠΎ Π²ΡΠ½ΡΠ½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ Π΄ΠΎΡΡΠ° ΡΠ΅ΡΡΠΎ.
ΠΠΈΠ΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΈ ΡΠΈΠΊΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΠ½ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΡΡΠ²ΠΈΡ Π΅ΡΠ°ΠΏ ΠΎΡ pipeline Π² GitLab (Prebuild) ΠΈ ΡΠ΅ Π³ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ Π½Π°ΡΠ°ΡΡΠΊ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡ GitLab CI. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅ Π² pipeline (ΡΠ±ΠΎΡΠΊΠ°, Π΄Π΅ΠΏΠ»ΠΎΠΉ, ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅) Ρ Π΅Π΄Π½Π°ΠΊΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² werf.yaml.
Π‘ΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ Π½Π° Π΅ΡΠ°ΠΏΠ° Prebuild ΡΠ°ΠΉΠ»Π° .gitlab-ci.yml:
Prebuild:
stage: prebuild
script:
- bash .\/generate_artifacts 1> common_envs.sh
- cat .\/common_envs.sh
artifacts:
paths:
- releases.yml
- common_envs.sh
expire_in: 2 weekΠ‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠΈΠΊΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΠ½ΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π² Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΠΌΠ΅ ΡΠ±ΠΎΡΠΊΠ° ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ Π½Π° GitLab CI pipeline: Build ΠΈ Deploy. Π‘Π°ΠΌΠΈΡΡ pipeline ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎ Ρ ΡΠΊΠΎΠ²Π΅ ΠΎΡ GitHub ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π½Π° werf (Ρ.Π΅. ΠΏΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π½Π° GitHub). ΠΠ°Π½Π½ΠΈΡΠ΅ Π·Π° ΡΡΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° GitLab Π² ΡΠ°Π·Π΄Π΅Π»Π° CI / CD Settings -> Pipeline triggers, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Webhook Π² GitHub (Settings -> Webhooks).
ΠΡΠ°ΠΏΡΡ Π½Π° ΡΠ±ΠΎΡΠΊΠ° ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
Build:
stage: build
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- werf build-and-publish --stages-storage :local
except:
refs:
- schedules
dependencies:
- Prebuild GitLab ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈ Π² Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΠ±ΠΎΡΠΊΠ° Π΄Π²Π΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΎΡ Π΅ΡΠ°ΠΏΠ° Prebuild, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈΡΠ΅ Π²Ρ
ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° source common_envs.sh. Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·Π° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΏΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΠ»ΡΡΠ°ΠΈ, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΏΠΎ ΡΠ°Π·ΠΏΠΈΡΠ°Π½ΠΈΠ΅. ΠΠΎ ΡΠ°Π·ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ β Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
ΠΠ° Π΅ΡΠ°ΠΏΠ° Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ΠΌ Π΄Π²Π΅ Π·Π°Π΄Π°ΡΠΈ β ΠΏΠΎΠΎΡΠ΄Π΅Π»Π½ΠΎ Π·Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° production ΠΈ dev ΠΊΠΎΠ½ΡΡΡΠΈ, Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° YAML ΡΠ°Π±Π»ΠΎΠ½:
.base_deploy: &base_deploy
stage: deploy
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- werf deploy --stages-storage :local
dependencies:
- Prebuild
except:
refs:
- schedules
Deploy to Production:
<<: *base_deploy
variables:
WERF_KUBE_CONTEXT: prod
environment:
name: production
url: werf.io
only:
refs:
- master
except:
variables:
- $REVIEW_SHA
refs:
- schedules
Deploy to Test:
<<: *base_deploy
variables:
WERF_KUBE_CONTEXT: dev
environment:
name: test
url: werf.test.flant.com
except:
refs:
- schedules
only:
variables:
- $REVIEW_SHA ΠΠ°Π΄Π°ΡΠΈΡΠ΅ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠΊΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, Π² ΠΊΠΎΠΉΡΠΎ werf ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ (WERF_KUBE_CONTEXT), ΠΈ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΡΠΈΡΠ΅ (environment.name ΠΈ environment.url), ΠΊΠΎΠΈΡΠΎ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ Π½Π° Helm-ΡΠ°ΡΡ. ΠΡΠΌΠ° Π΄Π° Π΄Π°Π²Π°ΠΌΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°ΠΌ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π·Π° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π°ΡΠ° ΡΠ΅ΠΌΠ°, Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² .
ΠΡΠ°Π΅Π½ ΡΡΠΈΡ
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π½Π° werf ΠΈΠ·Π»ΠΈΠ·Π°Ρ Π΄ΠΎΡΡΠ° ΡΠ΅ΡΡΠΎ, Π½ΠΎΠ²ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ ΡΠ΅ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ΡΡΠΎ, Π° Docker Registry ΡΠ΅ Π½Π°ΡΠ°ΡΡΠ²Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ. ΠΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ. ΠΡΠ°Π²ΠΈ ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ.
ΠΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
- ΠΠ° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΠ°Π·Π° Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π²
.gitlab-ci.yml; - ΠΠ° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅;
- ΠΠ° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° Ρ ΡΠΎΠΊΠ΅Π½ Π·Π° Π΄ΠΎΡΡΡΠΏ Π·Π° Π·Π°ΠΏΠΈΡ.
ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΠ°Π·Π° Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π² .gitlab-ci.yml:
Cleanup:
stage: cleanup
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- docker login -u nobody -p ${WERF_IMAGES_CLEANUP_PASSWORD} ${WERF_IMAGES_REPO}
- werf cleanup --stages-storage :local
only:
refs:
- schedules
ΠΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π²Π΅ΡΠ΅ Π²ΠΈΠ΄ΡΡ
ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ β ΡΠ°ΠΌΠΎ Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΡΠ΅ Π°Π²ΡΠΎΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π² Docker Registry Ρ ΡΠΎΠΊΠ΅Π½, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° ΠΏΡΠ°Π²Π° Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ Π² Docker Registry (Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΡΡ ΡΠΎΠΊΠ΅Π½ Π·Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅ Π½Π° GitLab CI Π½ΡΠΌΠ° ΡΠ°ΠΊΠΈΠ²Π° ΠΏΡΠ°Π²Π°). Π’ΠΎΠΊΠ΅Π½ΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π² GitLab ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΌΡ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° WERF_IMAGES_CLEANUP_PASSWORD ΠΏΡΠΎΠ΅ΠΊΡ (CI/CD Settings -> Variables).
ΠΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ°Π²Π° Π² CI/CD ->
Schedules.
ΠΡΠΈΡΠΊΠΎ: ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π² Docker Registry Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° Π½Π°ΡΠ°ΡΡΠ²Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΎΡ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΠ°ΡΡ Π½Π°ΠΏΠΎΠΌΠ½ΡΠΌ, ΡΠ΅ ΠΏΡΠ»Π½ΠΈΡΠ΅ Π»ΠΈΡΡΠΈΠ½Π³ΠΈ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π² :
- ;
- .
Π Π΅Π·ΡΠ»ΡΠ°Ρ
- ΠΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°: Π΅Π΄ΠΈΠ½ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Π·Π° Π΅Π΄Π½Π° Π²Π΅ΡΡΠΈΡ.
- ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π½Π° ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΡΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΏΡΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° werf: Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΠ°ΠΉΡΠ° ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ.
- Π‘ΡΠ±ΠΈΡΠ°Ρ ΡΠ΅ Π΄Π²Π° ΠΎΠ±ΡΠ°Π·Π° Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΡΡΠΈ.
- Π Π°Π±ΠΎΡΠΈ Π±ΡΡΠ·ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ β ΠΏΡΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° werf ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° GitHub Ρ ΡΠΊ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠΌΠΈΡ β ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΡΠ°ΠΌΠΎ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Ρ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ.
- ΠΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΌΠΈΡΠ»ΠΈ Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ: ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ΡΠΎ ΡΠΏΠΎΡΠ΅Π΄ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅ Π½Π° werf ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅Π΄Π° Π² Docker Registry.
ΠΠ·Π²ΠΎΠ΄ΠΈ
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° werf ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π±ΡΡΠ·Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΊΠ°ΠΊΡΠΎ Π½Π° ΡΠ°ΠΌΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΡΠ°ΠΊΠ° ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π²ΡΠ½ΡΠ½ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°.
- Π Π°Π±ΠΎΡΠ°ΡΠ° Ρ Π²ΡΠ½ΡΠ½ΠΈ Git Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈΠ·Π±Π°Π²Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΡΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ ΠΈΠ·ΡΡΠ»ΠΎ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΌΠΈΡΠ»ΡΡΠ΅ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ Ρ Ρ
ΠΈΡΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ. werf ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ΅Ρ ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠ° ΡΠ°ΠΌΠΎ Π²Π΅Π΄Π½ΡΠΆ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°
fetchΠΈ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ. - ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Go ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π² ΡΠ°ΠΉΠ»Π° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°
werf.yamlΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°, ΡΠΈΠΈΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ. - ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΎΠ½ΡΠΈΡΠ°Π½Π΅ Π² werf Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΡΠ²Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ β Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ΅ΡΠ°, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΎΠ±Ρ Π·Π° Π²ΡΠΈΡΠΊΠΈ pipeline.
- werf ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π»Π΅ΡΠ½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π°ΠΊΡΡΠ°Π»Π½ΠΎ ΠΏΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
P.S.
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΡΡΠΎ Π² Π½Π°ΡΠΈΡ Π±Π»ΠΎΠ³:
- «»;
- «»;
- «»;
- «».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
