ΠΡ ΡΠΆΠ΅ Π½Π΅ ΡΠ°Π· ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ ΠΏΡΠΎ ΡΠ²ΠΎΠΉ GitOps-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ
ΠΠ΄Π°Π²Π°ΡΡΡΡ Π² Π½ΡΠ°Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°ΠΉΡΠ°: Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π²Π΅ΡΡΠΈΠΉ, ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΡΠ΅Π»ΠΈΠ·Π°Ρ
ΠΈ Ρ.ΠΏ. β Π½Π΅ Π±ΡΠ΄Π΅ΠΌ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΡΡΠΎΠΊΡΡΠΈΡΡΠ΅ΠΌΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡΠ°Ρ
ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠΈΡ
ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ
CI/CD.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΡΠ°ΠΉΡ
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ werf Ρ ΡΠ°Π½ΠΈΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΅Π³ΠΎ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΡΠ΅Π»ΠΎΠΌ Π²ΡΡ ΠΎΠ΄ΡΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ, Π½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ:
- ΠΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ werf Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ Π±Π΅Π· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ Π²ΡΡ ΠΎΠ΄ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ werf;
- Π£ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°: Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π² Π΄Π΅Π½Ρ;
- ΠΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΡΡΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π΄Π΅ΠΏΠ»ΠΎΡ ΡΠ°ΠΉΡΠ° Ρ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½Ρ;
- Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΡΠΈΠ½ΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ
Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ , Ρ 5-Ρ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ. Π Π΅Π»ΠΈΠ·Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΉ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ: ΠΎΡ alpha Π΄ΠΎ rock-solid; - Π£ ΡΠ°ΠΉΡΠ° Π΅ΡΡΡ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Β«ΠΆΠΈΠ²ΡΡ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡΒ» (Ρ.Π΅. ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ) ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ (Ρ.Π΅. Π°Π½Π³Π»ΠΎΡΠ·ΡΡΠ½ΠΎΠΉ) Π²Π΅ΡΡΠΈΠ΅ΠΉ.
Π§ΡΠΎΠ±Ρ ΡΠΊΡΡΡΡ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΡ ΡΡΡ Β«Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΊΡΡ
Π½ΡΒ», ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ² Π΅ΠΌΡ ΡΠΎ, ΡΡΠΎ Β«ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΒ», ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ werf β ΡΡΠΎ
Π ΠΌΠ΅Π½Ρ Π²ΡΠ±ΠΎΡΠ° Π²Π΅ΡΡΠΈΠΉ Π½Π° ΡΠ°ΠΉΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ werf Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ
ΠΡΠΎΠ³ΠΎ, Ρ ΡΠ°ΠΉΡΠ° Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ:
- ΠΊΠΎΡΠ½Π΅Π²Π°Ρ (ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ),
- Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
werf.io/v1.0-beta ).
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ°ΠΉΡΠ° Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ /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.
ΠΡΠ»ΠΈ Π±ΡΡΡ ΡΠΎΡΠ½Π΅Π΅, ΡΠΎ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π΄Π²Π° ΠΎΠ±ΡΠ°Π·Π°: ΠΎΠ΄ΠΈΠ½ β Π΄Π»Ρ production-ΠΊΠΎΠ½ΡΡΡΠ°, Π²ΡΠΎΡΠΎΠΉ β Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ, Π΄Π»Ρ dev-ΠΊΠΎΠ½ΡΡΡΠ°. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ (Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ) ΡΠΎΠ»ΡΠΊΠΎ Π½Π° dev-ΠΊΠΎΠ½ΡΡΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π΅ΡΡΠΈΡ ΡΠ°ΠΉΡΠ° ΠΈΠ· review-ΠΊΠΎΠΌΠΌΠΈΡΠ°, Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ingress-ΡΠ΅ΡΡΡΡΠΎΠ².
werf vs git clone ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ
ΠΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ, ΡΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΠΊΡ ΡΠ°ΠΉΡΠ° Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ±ΠΎΡΠΊΡ, ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ²ΡΠΈΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅Π³ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΈ ΠΏΡΡΠ΅ΠΌ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅, Π²ΡΠ±ΠΈΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅Π³ΠΈ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈ, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅, ΡΡΠ΅Π±ΡΡΡΠ°Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉβ¦ ΠΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΉ ΠΌΠΈΠ½ΡΡ β ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΎ-ΡΠΎ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ.
Π’ΡΡ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡ ΡΠ°ΠΌΠ° ΡΡΠΈΠ»ΠΈΡΠ° 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-ΠΊΠΎΠΌΠΌΠΈΡΠ°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΠ°.
ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π½Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² pipeline GitLab CI, Π° ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ β Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½ΠΈΠΆΠ΅.
ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ, Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π² 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" -}}
artifact: doc-{{ .Channel }}
from: jekyll/builder:3
mount:
- from: build_dir
to: /usr/local/bundle
ansible:
install:
- shell: |
export PATH=/usr/jekyll/bin/:$PATH
- name: "Install Dependencies"
shell: bundle install
args:
executable: /bin/bash
chdir: /app/docs
beforeSetup:
{{- if .Commit }}
- shell: echo "Review SHA - {{ .Commit }}."
{{- end }}
{{- if eq .Channel "root" }}
- name: "releases.yml HASH: {{ $Root.Files.Get "releases.yml" | sha256sum }}"
copy:
content: |
{{ $Root.Files.Get "releases.yml" | indent 8 }}
dest: /app/docs/_data/releases.yml
{{- else }}
- file:
path: /app/docs/_data/releases.yml
state: touch
{{- end }}
- file:
path: "{{`{{ item }}`}}"
state: directory
mode: 0777
with_items:
- /app/main_site/
- /app/ru_site/
- file:
dest: /app/docs/pages_ru/cli
state: link
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
to: /app/
owner: jekyll
group: jekyll
{{- if .Commit }}
commit: {{ .Commit }}
{{- else }}
tag: {{ .Version }}
{{- end }}
stageDependencies:
install: ['docs/Gemfile','docs/Gemfile.lock']
beforeSetup: '**/*'
includePaths: 'docs'
excludePaths: '**/*.sh'
{{- end }}
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ .Channel
) Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΡΡΠΈΠΊΡΠ° Π½Π°Π·Π²Π°Π½ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ°: artifact: doc-{{ .Channel }}
. ΠΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ ΠΈΠ· Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π°.
ΠΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ werf, ΠΊΠ°ΠΊ build_dir
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΊΡΡ Jekyll ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΡΠΊΠ°ΠΌΠΈ pipeline, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΡ.
Π’Π°ΠΊΠΆΠ΅ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° releases.yml
β ΡΡΠΎ YAML-ΡΠ°ΠΉΠ» Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎ ΡΠ΅Π»ΠΈΠ·Π°Ρ
, Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠΉ Ρ
ΠΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° if
Go-ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ {{ $Root.Files.Get "releases.yml" | sha256sum }}
Π² ΡΡΠ°ΠΏΠ΅ .Channel
ΡΠ°Π²Π½Π° root
) Ρ
ΡΡ ΡΠ°ΠΉΠ»Π° releases.yml
Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠΈΠ³Π½Π°ΡΡΡΡ Π²ΡΠ΅ΠΉ ΡΡΠ°Π΄ΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΠΈΠΌΠ΅Π½ΠΈ Ansible-Π·Π°Π΄Π°Π½ΠΈΡ (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ name
). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° releases.yml
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°Π½.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ. Π ΠΎΠ±ΡΠ°Π· Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΈΠ· /docs
, ΠΏΡΠΈΡΠ΅ΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ°Π·Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³Π° ΠΈΠ»ΠΈ review-ΠΊΠΎΠΌΠΌΠΈΡΠ°.
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ
Π²Π΅ΡΡΠΈΠΉ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ ΡΠ΅Π»ΠΈΠ·ΠΎΠ², ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΠ» ΠΏΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ .WerfVersions
Π² werf.yaml
:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}}
Π’.ΠΊ. ΡΠΈΠΊΠ» ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² (ΠΌΡ Π½Π°Π΄Π΅Π΅ΠΌΡΡ Π½Π° ΡΡΠΎ), Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ β ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ---
(ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΌ. Π²
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Π½ΠΎ ΡΠΆΠ΅ Π±Π΅Π· ΡΠΈΠΊΠ»Π°, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Π΄Π»Ρ Β«ΠΎΡΠΎΠ±ΡΡ ΡΠ»ΡΡΠ°Π΅Π²Β»: Π΄Π»Ρ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΈΠ· review-ΠΊΠΎΠΌΠΌΠΈΡΠ°:
{{ 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 }}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Π΄Π»Ρ review-ΠΊΠΎΠΌΠΌΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ .WerfReviewCommit
.
ΠΡΡΠ΅ΡΠ°ΠΊΡΡ Π³ΠΎΡΠΎΠ²Ρ β ΠΏΠΎΡΠ° Π·Π°Π½ΡΡΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ!
ΠΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π·, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π² Kubernetes, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ NGINX, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° nginx.conf
ΠΈ ΡΡΠ°ΡΠΈΠΊΠ° ΠΈΠ· Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ². ΠΡΠΎΠΌΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ°ΠΉΡΠ° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ ΡΠΈΠΊΠ» ΠΏΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ .WerfVersions
Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² Π²Π΅ΡΡΠΈΠΉ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ ΡΠ΅Π»ΠΈΠ·ΠΎΠ² + ΡΠΎΠ±Π»ΡΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΏΡΠΈΠ½ΡΠ»ΠΈ ΡΠ°Π½Π΅Π΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Ρ
ΡΠ°Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ ΡΠ°ΠΉΡΠ° Π΄Π»Ρ Π΄Π²ΡΡ
ΡΠ·ΡΠΊΠΎΠ², ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΈΡ
Π² ΠΌΠ΅ΡΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° werf-doc
image: werf-doc
from: nginx:stable-alpine
ansible:
setup:
- name: "Setup /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
, Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ
Π‘Π±ΠΎΡΠΊΠ° Π³ΠΎΡΠΎΠ²Π°! ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ CI/CD ΠΈ Π²Π°ΠΆΠ½ΡΠΌ Π½ΡΠ°Π½ΡΠ°ΠΌ.
ΠΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π² GitLab CI ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² werf.yaml
. ΠΡΠΎ Π½Π΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ REVIEW_SHA, ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ pipeline ΠΎΡ Ρ
ΡΠΊΠ° GitHub.
Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
Π²Π½Π΅ΡΠ½ΠΈΡ
Π΄Π°Π½Π½ΡΡ
Π²ΡΠ½Π΅ΡΠ΅ΠΌ Π² 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-ΡΡΠ½ΠΊΡΠΈΠΈ source
.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅. Π§ΡΠΎΠ±Ρ ΠΈ ΡΠ±ΠΎΡΠΊΠ°, ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ werf.yaml
Π±ΡΠ» ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ pipeline. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, ΡΠΎ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠ°Π΄ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅Ρ werf ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΏΠ»ΠΎΠ΅, Π±ΡΠ΄ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ. ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ Π΄Π΅ΠΏΠ»ΠΎΡ, Ρ.ΠΊ. Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΉ Π΄Π»Ρ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΎΠ±ΡΠ°Π· Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ.
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·Π° ΡΠ°ΠΉΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅Π»ΠΈΠ·Π°Ρ ΠΈ Π²Π΅ΡΡΠΈΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΠ΄Π½Π°, Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π΅ΠΏΠ»ΠΎΡ Π²ΡΠΉΠ΄Π΅Ρ Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ: Π²Π΅Π΄Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π΅ΡΠ΅ Π½Π΅ ΡΠΎΠ±ΡΠ°Π½.
ΠΡΠ»ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ werf.yaml
Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π½Π΅ΡΠ½ΠΈΡ
Π΄Π°Π½Π½ΡΡ
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΈΡΠΊΠ° Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ
Π²Π΅ΡΡΠΈΠΉ, ΠΊΠ°ΠΊ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅), ΡΠΎ ΡΠΎΡΡΠ°Π² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ
Π΄Π°Π½Π½ΡΡ
Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ
pipeline. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ.
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ°Π΄ΠΈΠΈ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π° Π² GitLab (Prebuild) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡ
Π΄Π°Π»Π΅Π΅ Π² Π²ΠΈΠ΄Π΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° GitLab CI. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π·Π°Π΄Π°Π½ΠΈΡ pipelinΠ΅βΠ° (ΡΠ±ΠΎΡΠΊΠ°, Π΄Π΅ΠΏΠ»ΠΎΠΉ, ΠΎΡΠΈΡΡΠΊΠ°) Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ Π² 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: Build ΠΈ Deploy. Π‘Π°ΠΌ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΠΎ Ρ ΡΠΊΠ°ΠΌ ΠΈΠ· GitHub-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ werf ( Ρ.Π΅. ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π½Π° GitHub). ΠΠ°Π½Π½ΡΠ΅ Π΄Π»Ρ Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° GitLab Π² ΡΠ°Π·Π΄Π΅Π»Π΅ CI / CD Settings -> Pipeline triggers, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² GitHub ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Webhook (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-Ρ ΡΠΊΠ° Π΄Π»Ρ review-ΠΊΠΎΠΌΠΌΠΈΡΠ° β ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ.
- ΠΠ΅ Π½ΡΠΆΠ½ΠΎ Π΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ²: ΠΎΡΠΈΡΡΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌ werf Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π² Docker Registry.
ΠΡΠ²ΠΎΠ΄Ρ
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ werf ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ±ΠΎΡΠΊΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠ°ΠΊ ΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ.
- Π Π°Π±ΠΎΡΠ° Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ°ΡΡ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ Ρ Ρ
ΠΈΡΡΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. werf ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΡΡ ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π° Π΄Π°Π»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
fetch
ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. - ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Go-ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² ΡΠ°ΠΉΠ»Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ
werf.yaml
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ±ΠΎΡΠΊΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π½Π΅ΡΠ½ΠΈΡ Π΄Π°Π½Π½ΡΡ . - ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² werf Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ ΡΠ±ΠΎΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² β Π·Π° ΡΡΠ΅Ρ ΠΊΡΡΠ°, ΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ ΠΎΠ±ΡΠΈΠΌ Π΄Π»Ρ Π²ΡΠ΅Ρ pipeline.
- werf ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΎΡΠΈΡΡΠΊΡ, ΡΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅.
P.S.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«
ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Kubernetes Β»; - Β«
Π‘Π±ΠΎΡΠΊΠ° ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Ρ werf ΠΈ GitLab CI Β»; - Β«
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ werf Π΄Π»Ρ Π²ΡΠΊΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΡ Helm-ΡΠ°ΡΡΠΎΠ² Β»; - Β«
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΠΌ werf 1.0 stable: ΠΏΡΠΈ ΡΡΠΌ ΡΡΡ GitOps, ΡΡΠ°ΡΡΡ ΠΈ ΠΏΠ»Π°Π½Ρ Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com