Π”ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ с werf Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° сайта Π½Π° вСрсионираната докумСнтация

Π’Π΅Ρ‡Π΅ Π½Π΅ вСднъТ Ρ€Π°Π·ΠΊΠ°Π·Π²Π°Ρ…ΠΌΠ΅ Π·Π° нашия GitOps инструмСнт werf, Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Π±ΠΈΡ…ΠΌΠ΅ искали Π΄Π° сподСлим ΠΎΠΏΠΈΡ‚Π° си ΠΎΡ‚ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° сайт с докумСнтацията Π½Π° самия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€” werf.io (руската вСрсия Π΅ β€” ru.werf.io). Π’ΠΎΠ²Π° Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ статичСн сайт, Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π΅ интСрСсно, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ количСство Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ.

Π”ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° Docker ΠΎΠ±Ρ€Π°Π·ΠΈ с werf Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° сайта Π½Π° вСрсионираната докумСнтация

Няма Π΄Π° сС впускамС Π² Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ Π½Π° структурата Π½Π° сайта: Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Ρ‰ΠΎ мСню Π·Π° всички вСрсии, страницитС с информация Π·Π° изданията ΠΈ Ρ‚.Π½. ВмСсто Ρ‚ΠΎΠ²Π°, Ρ‰Π΅ сС фокусирамС Π²ΡŠΡ€Ρ…Ρƒ Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅ ΠΈ особСноститС Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΌΠ°Π»ΠΊΠΎ Π½Π° ΡΡŠΠΏΡŠΡ‚ΡΡ‚Π²Π°Ρ‰ΠΈΡ‚Π΅ процСси CI/CD.

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: ΠΊΠ°ΠΊ Π΅ структуриран ΡΠ°ΠΉΡ‚ΡŠΡ‚

Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ докумСнтацията Π½Π° werf Π΅ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½Π° Π·Π°Π΅Π΄Π½ΠΎ с ΠΊΠΎΠ΄Π° ΠΌΡƒ. Π’ΠΎΠ²Π° Π½Π°Π»Π°Π³Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ изисквания към Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π² цялост ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚ извън Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° настоящата статия, Π½ΠΎ ΠΏΠΎΠ½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅:

  • НовитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° werf Π½Π΅ трябва Π΄Π° ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚ Π±Π΅Π· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° докумСнтацията ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, всякакви ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² докумСнтацията ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²Π° вСрсия Π½Π° werf;
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠΌΠ° доста ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅: Π½ΠΎΠ²ΠΈ вСрсии ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚ няколко ΠΏΡŠΡ‚ΠΈ Π½Π° Π΄Π΅Π½;
  • Всякакви Ρ€ΡŠΡ‡Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ дСплоя Π½Π° сайта с Π½ΠΎΠ²Π° вСрсия Π½Π° докумСнтацията ΠΏΠΎΠ½Π΅ са ΠΈΠ·ΠΌΠΎΡ€ΠΈΡ‚Π΅Π»Π½ΠΈ;
  • Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ ΠΏΡ€ΠΈΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сСмантичСн вСрсиониранС, с 5 ΠΊΠ°Π½Π°Π»Π° Π½Π° стабилност. ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° послСдоватСлно ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° вСрсиитС ΠΏΡ€Π΅Π· ΠΊΠ°Π½Π°Π»ΠΈΡ‚Π΅ Π² Ρ€Π΅Π΄Π° Π½Π° повишаванС Π½Π° стабилността: ΠΎΡ‚ alpha Π΄ΠΎ rock-solid;
  • Π‘Π°ΠΉΡ‚ΡŠΡ‚ ΠΈΠΌΠ° руска вСрсия, която "ΠΆΠΈΠ²Π΅Π΅ ΠΈ сС Ρ€Π°Π·Π²ΠΈΠ²Π°" (Ρ‚.Π΅. ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ ѝ сС обновява) ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ с основната (Ρ‚.Π΅. англоговоряща) вСрсия.

Π—Π° Π΄Π° скриСм всичката Ρ‚Π°Π·ΠΈ "Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° кухня" ΠΎΡ‚ потрСбитСля, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΉΠΊΠΈ ΠΌΡƒ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ "просто Ρ€Π°Π±ΠΎΡ‚ΠΈ", Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ инструмСнт Π·Π° инсталиранС ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° werf β€” Ρ‚ΠΎΠ²Π° Π΅ multiwerf. Π”ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΅ Π΄Π° посочитС Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΊΠ°Π½Π°Π»Π° Π½Π° стабилност, ΠΊΠΎΠΉΡ‚ΠΎ стС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, Π° multiwerf Ρ‰Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ ΠΈΠΌΠ° Π½ΠΎΠ²Π° вСрсия Π² ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΏΡ€ΠΈ нСобходимост Ρ‰Π΅ я ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ.

Π’ ΠΌΠ΅Π½ΡŽΡ‚ΠΎ Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° вСрсии Π½Π° сайта са Π½Π°Π»ΠΈΡ‡Π½ΠΈ послСднитС вСрсии Π½Π° werf във всСки ΠΊΠ°Π½Π°Π». По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π½Π° адрСс werf.io/documentation сС отваря вСрсията Π½Π° Π½Π°ΠΉ-стабилния ΠΊΠ°Π½Π°Π» Π·Π° послСдното ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ β€” тя ΡΡŠΡ‰ΠΎ сС индСксирa ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ°Ρ‡ΠΊΠΈΡ‚Π΅. ДокумСнтацията Π·Π° ΠΊΠ°Π½Π°Π»Π° Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ адрСси (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, werf.io/v1.0-beta/documentation Π·Π° beta-ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ 1.0).

Π’ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΡΠ°ΠΉΡ‚ΡŠΡ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° слСднитС вСрсии:

  1. основна (ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅),
  2. Π·Π° всСки Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ ΠΊΠ°Π½Π°Π» Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° всяко ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, werf.io/v1.0-beta).

Π—Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° вСрсия Π½Π° сайта, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ компилация с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Jekyll, стартирайки Π² дирСкторията /docs Π½Π° рСпозитория werf с подходящата ΠΊΠΎΠΌΠ°Π½Π΄Π° (jekyll build), ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°ΠΉΠΊΠΈ Π½Π° Git-Ρ‚Π΅Π³ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° вСрсия.

ΠžΡΡ‚Π°Π²Π° само Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ, Ρ‡Π΅:

  • Π·Π° компилация сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° самата ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° (werf);
  • CI/CD процСситС са ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° GitLab CI;
  • ΠΈ всичко Ρ‚ΠΎΠ²Π°, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² Kubernetes.

Π—Π°Π΄Π°Ρ‡ΠΈ

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚Ρ‡ΠΈΡ‚Π°Ρ‚ цялата описана спСцифика:

  1. Π‘Π»Π΅Π΄ смяна Π½Π° вСрсията Π½Π° werf Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΊΠ°Π½Π°Π» Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, докумСнтацията Π½Π° сайта трябва Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄Π° сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°..
  2. Π—Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ понякога Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ вСрсии Π½Π° сайта..

ΠŸΡ€Π΅-компилацията Π½Π° сайта трябва Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° слСд смяна Π½Π° вСрсията Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΊΠ°Π½Π°Π» ΠΎΡ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ 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, Π° Π² крайния ΠΎΠ±Ρ€Π°Π· Π΄Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ само Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ компилацията..

ПишСм werf.yaml

И Ρ‚Π°ΠΊΠ°, Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ Ρ‰Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΌΠ΅ всяка вСрсия Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ Π½Π° werf. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π½ΠΈΠ΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΊΠΎ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ Ρ‰Π΅ ΠΈΠΌΠ° ΠΏΡ€ΠΈ сборката, Π·Π°Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° напишСм фиксирана конфигурация Π·Π° сборка (строго ΠΊΠ°Π·Π°Π½ΠΎ, Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΌΠΎΠΆΠ΅ΠΌ, Π½ΠΎ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Π½Π΅ съвсСм Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ).

werf позволява Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Go шаблони Π² своя Ρ„Π°ΠΉΠ» Π·Π° конфигурация (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 Ρ„Π°ΠΉΠ» с Π΄Π°Π½Π½ΠΈ Π·Π° Ρ€Π΅Π»ΠΈΠ·ΠΈΡ‚Π΅, ΠΊΠΎΠΉΡ‚ΠΎ сС заявява с github.com (Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° pipeline). Π’ΠΎΠΉ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° сайта, Π½ΠΎ Π² контСкста Π½Π° статията Π½ΠΈ Π΅ интСрСсСн ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΎΡ‚ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ ΠΌΡƒ зависи ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ само Π½Π° Π΅Π΄ΠΈΠ½ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ β€” Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΡŠΡ‚ Π½Π° сайта с ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π° вСрсия (Π² Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ).

Π’ΠΎΠ²Π° Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° условСн ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if Go шаблони ΠΈ конструкцията {{ $Root.Files.Get "releases.yml" | sha256sum }} Π² Π΅Ρ‚Π°ΠΏΠ° стадия. Π Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½: ΠΏΡ€ΠΈ създаванС Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ Π·Π° ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π°Ρ‚Π° вСрсия (ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° .Channel Ρ€Π°Π²Π½Π° Π½Π° root) Ρ…Π°Ρˆ Π½Π° Ρ„Π°ΠΉΠ»Π° releases.yml влияС Π½Π° подписа Π½Π° цялата Ρ„Π°Π·Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΉ Π΅ част ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ansible Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΠΈΠΌΠ΅). Π’Π°ΠΊΠ° Ρ‡Π΅, ΠΏΡ€ΠΈ промяна Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Π° releases.yml , ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ Ρ‰Π΅ бъдС прСосновСн.

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡŠΡ‰ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с външно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’ ΠΎΠ±Ρ€Π°Π·Π° Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ werf, сС добавя само дирСкторията /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 Π²Π΅Ρ‡Π΅ няма Π΄Π° нараства постоянно ΠΎΡ‚ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° практичСската част напомням, Ρ‡Π΅ ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ листинги ΠΎΡ‚ статията са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π² Git:

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚

  1. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ Π»ΠΎΠ³ΠΈΡ‡Π½Π° структура Π½Π° компилацията: Π΅Π΄ΠΈΠ½ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ Π·Π° Π΅Π΄Π½Π° вСрсия.
  2. ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡΡ‚Π° Π΅ унивСрсална ΠΈ Π½Π΅ изисква Ρ€ΡŠΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ вСрсии Π½Π° werf: докумСнтацията Π½Π° сайта сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ.
  3. Π‘ΡŠΠ±ΠΈΡ€Π°Ρ‚ сС Π΄Π²Π° ΠΎΠ±Ρ€Π°Π·Π° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΈ.
  4. Π Π°Π±ΠΎΡ‚ΠΈ Π±ΡŠΡ€Π·ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° максимално ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ β€” ΠΏΡ€ΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²Π° вСрсия Π½Π° werf ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° GitHub Ρ…ΡƒΠΊ Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠΌΠΈΡ‚ β€” сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° компилация само Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ с ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½Π°Ρ‚Π° вСрсия.
  5. НС Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС мисли Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ: почистванСто спорСд ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π½Π° werf Ρ‰Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Ρ€Π΅Π΄Π° Π² Docker Registry.

Изводи

  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° werf позволява Π±ΡŠΡ€Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° компилацията Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° самата компилация, Ρ‚Π°ΠΊΠ° ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с външни Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.
  • Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° с външни Git Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° избавя ΠΎΡ‚ нСобходимостта Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ всСки ΠΏΡŠΡ‚ изцяло ΠΈΠ»ΠΈ Π΄Π° измислятС вСлосипСд с Ρ…ΠΈΡ‚Ρ€Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° оптимизация. werf ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° кСш ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π° само вСднъТ, Π° слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° fetch ΠΈ само ΠΏΡ€ΠΈ нСобходимост.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Go шаблони Π² Ρ„Π°ΠΉΠ»Π° Π·Π° конфигурация Π½Π° компилацията werf.yaml позволява Π΄Π° сС опишС компилацията, Ρ‡ΠΈΠΈΡ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ зависят ΠΎΡ‚ външни Π΄Π°Π½Π½ΠΈ.
  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅ Π² werf Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ускорява ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ β€” Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° кСша, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΎΠ±Ρ‰ Π·Π° всички pipeline.
  • werf позволява лСсна настройка Π½Π° почистванСто, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ особСно Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΎ ΠΏΡ€ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π° компилация.

P.S.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster