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

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

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

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

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΡΠ°ΠΉΡ‚ΡŠΡ‚

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

  • Нови Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° werf Π½Π΅ трябва Π΄Π° сС пускат Π±Π΅Π· Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° докумСнтацията ΠΈ, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, всички ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² докумСнтацията ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ Π½ΠΎΠ²Π° вСрсия Π½Π° werf;
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠΌΠ° доста ΠΈΠ½Ρ‚Π΅Π½Π·ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅: Π½ΠΎΠ²ΠΈ вСрсии ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС пускат няколко ΠΏΡŠΡ‚ΠΈ Π½Π° Π΄Π΅Π½;
  • Всички Ρ€ΡŠΡ‡Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° внСдряванС Π½Π° сайт с Π½ΠΎΠ²Π° вСрсия Π½Π° докумСнтацията са Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎΡ‚ΠΎ досадни;
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅ΠΌΠ° сСмантичния ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ създаванС Π½Π° вСрсии, с 5 ΠΊΠ°Π½Π°Π»Π° Π½Π° стабилност. ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° освобоТдаванС Π²ΠΊΠ»ΡŽΡ‡Π²Π° послСдоватСлно ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° вСрсиитС ΠΏΡ€Π΅Π· ΠΊΠ°Π½Π°Π»ΠΈΡ‚Π΅ Π² Ρ€Π΅Π΄Π° Π½Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° стабилността: ΠΎΡ‚ Π°Π»Ρ„Π° Π΄ΠΎ стабилна;
  • Π‘Π°ΠΉΡ‚ΡŠΡ‚ ΠΈΠΌΠ° рускоСзична вСрсия, която β€žΠΆΠΈΠ²Π΅Π΅ ΠΈ сС Ρ€Π°Π·Π²ΠΈΠ²Π°β€œ (Ρ‚.Π΅. ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° която сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°) успорСдно с основната (Ρ‚.Π΅. Π°Π½Π³Π»ΠΎΠ΅Π·ΠΈΡ‡Π½Π°) вСрсия.

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

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

ΠžΠ±Ρ‰ΠΎ ΡΠ°ΠΉΡ‚ΡŠΡ‚ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π° със слСднитС вСрсии:

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

Π—Π° Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° вСрсия Π½Π° сайта, Π² общия случай Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° я ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π”ΠΆΠ΅ΠΊΠΈΠ»ΠΊΠ°Ρ‚ΠΎ стартиратС Π² дирСкторията /docs werf Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ със ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° (jekyll build), слСд ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ към Git Ρ‚Π°Π³Π° Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° вСрсия.

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

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

Π·Π°Π΄Π°Ρ‡ΠΈ

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

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

ΠŸΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° сайта трябва Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ слСд промяна Π½Π° вСрсията Π½Π° всСки ΠΊΠ°Π½Π°Π» ΠΎΡ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ Git Ρ‚Π°Π³ΠΎΠ²Π΅, Π½ΠΎ Π² процСса Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ слСднитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • Въй ΠΊΠ°Ρ‚ΠΎ ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ с вСрсии Π½Π° ΠΊΠ°Π½Π°Π»ΠΈΡ‚Π΅ сС промСня, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ само Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ докумСнтацията Π·Π° ΠΊΠ°Π½Π°Π»ΠΈΡ‚Π΅, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ вСрсията Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½Π°. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° всичко Π½Π°Π½ΠΎΠ²ΠΎ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ красиво.
  • ΠΠ°Π±ΠΎΡ€ΡŠΡ‚ ΠΎΡ‚ ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° издания ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Π’ Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅ Π΄Π° няма вСрсия Π½Π° ΠΊΠ°Π½Π°Π»ΠΈΡ‚Π΅, ΠΏΠΎ-стабилна ΠΎΡ‚ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Ρ€Π°Π½Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ 1.1, Π½ΠΎ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Ρ‚Π΅ Ρ‰Π΅ сС появят - Π² Ρ‚ΠΎΠ·ΠΈ случай Π½Π΅ промСняйтС сборката Π½Π° Ρ€ΡŠΠΊΠ°?

Оказва сС, Ρ‡Π΅ сглобяванСто зависи ΠΎΡ‚ промяна Π½Π° външни Π΄Π°Π½Π½ΠΈ.

ИзпълнСниС

Π˜Π·Π±ΠΎΡ€ Π½Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

ΠšΠ°Ρ‚ΠΎ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС всяка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° вСрсия ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ Π² Kubernetes. Π’Π°Π·ΠΈ опция ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΏΠΎ-голям Π±Ρ€ΠΎΠΉ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ растС с ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° броя Π½Π° стабилнитС вСрсии Π½Π° werf. А Ρ‚ΠΎΠ²Π° ΠΎΡ‚ своя страна ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΏΠΎ-слоТна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°: всяка вСрсия ΠΈΠΌΠ° собствСн HTTP ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ с ΠΌΠ°Π»ΠΊΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅. Π Π°Π·Π±ΠΈΡ€Π° сС, Ρ‚ΠΎΠ²Π° Π²ΠΎΠ΄ΠΈ ΠΈ Π΄ΠΎ ΠΏΠΎ-високи Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ Π·Π° рСсурси.

Π’Ρ€ΡŠΠ³Π½Π°Ρ…ΠΌΠ΅ ΠΏΠΎ ΠΏΡŠΡ‚Ρ сглобяванС Π½Π° всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ вСрсии Π² Π΅Π΄Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π°Ρ‚Π° статика Π½Π° всички вСрсии Π½Π° сайта Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с NGINX, Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡŠΡ‚ към ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ ΠΈΠ΄Π²Π° ΠΏΡ€Π΅Π· NGINX Ingress. Π•Π΄Π½Π° проста структура - ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ - улСснява ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ (Π² зависимост ΠΎΡ‚ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ) с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° самия Kubernetes.

Π—Π° Π΄Π° бъдСм ΠΏΠΎ-Ρ‚ΠΎΡ‡Π½ΠΈ, ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ Π΄Π²Π΅ изобраТСния: Π΅Π΄Π½ΠΎΡ‚ΠΎ Π΅ Π·Π° производствСния Ρ†ΠΈΠΊΡŠΠ», Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π° Ρ†ΠΈΠΊΡŠΠ»Π° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° (стартира) само Π½Π° dev loop Π·Π°Π΅Π΄Π½ΠΎ с основното ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° вСрсията Π½Π° сайта ΠΎΡ‚ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π°, Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ тях сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° рСсурси Π½Π° Ingress.

werf срСщу git ΠΊΠ»ΠΎΠ½ΠΈΠ½Π³ ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнахмС, Π·Π° Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚Π΅ статика Π½Π° сайта Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° вСрсия Π½Π° докумСнтацията, трябва Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ към ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΊΠ°Ρ‚ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅ подходящитС Ρ‚Π°Π³ΠΎΠ²Π΅ ΠΎΡ‚ списъка. Π’ΠΎΠ²Π° ΠΎΠ±Π°Ρ‡Π΅ Π΅ доста рСсурсоСмка опСрация ΠΈ освСн Ρ‚ΠΎΠ²Π° изисква писанС Π½Π° Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΈ инструкции ... Π”Ρ€ΡƒΠ³ сСриозСн Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ Π΅, Ρ‡Π΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ няма Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС ΠΊΠ΅ΡˆΠΈΡ€Π° Π½Π΅Ρ‰ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° асСмблиранСто.

Π’ΡƒΠΊ самата ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° werf ΠΈΠ΄Π²Π° Π½Π° ΠΏΠΎΠΌΠΎΡ‰, внСдрявайки ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΎ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ ΠΈ Π²ΠΈ позволява Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ външни Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° werf Π·Π° добавянС Π½Π° ΠΊΠΎΠ΄ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ ускори ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ werf ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ вСднъТ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ само fetch Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ОсвСн Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ добавямС Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ само Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (Π² нашия случай Ρ‚ΠΎΠ²Π° Π΅ дирСкторията docs), ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ Π½Π°ΠΌΠ°Π»ΠΈ количСството Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ.

Въй ΠΊΠ°Ρ‚ΠΎ Jekyll Π΅ инструмСнт Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° статики ΠΈ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΊΡ€Π°ΠΉΠ½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π΄Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π΄ΠΎ werf Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚, ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ само Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΡ‚ компилация.

ПишСм 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 β€” Ρ…Π΅Ρˆ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚Π° Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ вСрсия Π·Π° тСстовия Ρ†ΠΈΠΊΡŠΠ».

Π’Π΅Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ попълнСни Π² GitLab CI pipeline, Π° ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡Π½ΠΎ Π΅ написано ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

На ΠΏΡŠΡ€Π²ΠΎ място, Π·Π° удобство, Π½ΠΈΠ΅ опрСдСлямС Π² werf.yaml ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° шаблонни ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌ присвоитС стойности ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата:

{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }}

ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° статичната вСрсия Π½Π° сайта ΠΊΠ°Ρ‚ΠΎ цяло Π΅ Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Π·Π° всички случаи, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° root вСрсията, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ вСрсията Π·Π° dev схСмата). Π—Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎ ΠΈΠ·Π²Π°Π΄ΠΈΠΌ Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Π±Π»ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° функцията define - Π·Π° послСдваща ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° include. Π©Π΅ ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ слСднитС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ към шаблона:

  • Version β€” Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π° вСрсия (ΠΈΠΌΠ΅ Π½Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚);
  • Channel β€” ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ°Π½Π°Π»Π° Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΡŠΡ‚;
  • Commit β€” Ρ…Π΅Ρˆ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚, Π°ΠΊΠΎ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΡŠΡ‚ Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ Π·Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄;
  • контСкст.

ОписаниС Π½Π° шаблон Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚

{{- 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 ΠΌΠ΅ΠΆΠ΄Ρƒ стартиранията Π½Π° Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ускорява ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ сглобяванС.

ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° стС забСлязали ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° releases.yml Π΅ YAML Ρ„Π°ΠΉΠ» с Π΄Π°Π½Π½ΠΈ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, поискани ΠΎΡ‚ github.com (Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Ρ‡Ρ€Π΅Π· изпълнСниС Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°). НСобходим Π΅ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° сайта, Π½ΠΎ Π² контСкста Π½Π° статията Π½ΠΈ Π΅ интСрСсСн, Π·Π°Ρ‰ΠΎΡ‚ΠΎ зависи ΠΎΡ‚ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ ΠΌΡƒ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ само Π½Π° Π΅Π΄ΠΈΠ½ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ - Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ Π½Π° сайта Π½Π° основната вСрсия (Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ).

Π’ΠΎΠ²Π° сС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° условния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΈ {{ $Root.Files.Get "releases.yml" | sha256sum }} Π² Π΅Ρ‚Π°ΠΏ Π΅Ρ‚Π°ΠΏΠΈ. Π Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½: ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ Π·Π° основната вСрсия (ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° .Channel Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° root) Ρ„Π°ΠΉΠ» Ρ…Π΅Ρˆ releases.yml засяга сигнатурата Π½Π° цСлия Π΅Ρ‚Π°ΠΏ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ част ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π·Π°Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Ansible (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ name). Π’Π°ΠΊΠ° ΠΏΡ€ΠΈ смяна ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ» 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: "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 -}}

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π°Π΅Π΄Π½ΠΎ с основното във Π²Π΅Ρ€ΠΈΠ³Π°Ρ‚Π° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° само Π΄Π²Π΅ вСрсии Π½Π° сайта: вСрсията ΠΎΡ‚ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚Π° Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄ ΠΈ основната вСрсия Π½Π° сайта (ΠΈΠΌΠ° ΠΎΠ±Ρ‰ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈ ΠΈ, Π°ΠΊΠΎ си спомнятС, Π΄Π°Π½Π½ΠΈ Π·Π° издания). По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‰Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ основното само Π² сСкцията Π·Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ (ΠΈ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π² ΠΈΠΌΠ΅Ρ‚ΠΎ):

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_SHA. Π‘ΠΈ Π±ΠΈΠ»ΠΎ възмоТно ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΄Π° Π½Π΅ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ werf-dev, Π°ΠΊΠΎ няма ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° срСдата REVIEW_SHA, Π½ΠΎ Π·Π° Π΄Π° почистванС ΠΏΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΡ‚Π° Π½Π° Docker Π² werf Ρ€Π°Π±ΠΎΡ‚Π΅Ρ…Π° Π·Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ werf-dev, Π½ΠΈΠ΅ Ρ‰Π΅ Π³ΠΎ оставим Π΄Π° бъдС ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΎ само с Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° Π½Π° основната вСрсия (Ρ‚ΠΎΠΉ Π²Π΅Ρ‡Π΅ Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ Ρ‚Π°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅), Π·Π° Π΄Π° опростим структурата Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°.

ΠœΠΎΠ½Ρ‚Π°ΠΆΡŠΡ‚ Π΅ Π³ΠΎΡ‚ΠΎΠ²! НСка Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към CI / CD ΠΈ Π²Π°ΠΆΠ½ΠΈ нюанси.

ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π² GitLab CI ΠΈ характСристики Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ сглобяванС

ΠšΠΎΠ³Π°Ρ‚ΠΎ изпълнявамС компилацията, трябва Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° срСдата, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² werf.yaml. Π’ΠΎΠ²Π° Π½Π΅ сС отнася Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° REVIEW_SHA, която Ρ‰Π΅ Π·Π°Π΄Π°Π΄Π΅ΠΌ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΎΡ‚ ΠΊΡƒΠΊΠ°Ρ‚Π° Π½Π° GitHub.

НиС Ρ‰Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΠΌ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ външни Π΄Π°Π½Π½ΠΈ към Bash скрипта generate_artifacts, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π΄Π²Π° 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 Π’ΠΎΠ²Π° бСшС ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄. Ако Ρ‚ΠΎΠ²Π° условиС Π½Π΅ Π΅ изпълнСно, Ρ‚ΠΎΠ³Π°Π²Π° сигнатуритС Π½Π° Π΅Ρ‚Π°ΠΏΠ°, ΠΊΠΎΠΈΡ‚ΠΎ werf изчислява ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ. Π’ΠΎΠ²Π° Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ внСдряванСто, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° внСдряванС, Ρ‰Π΅ липсва.

Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Π°ΠΊΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° сайта ΠΈΠΌΠ° само Π΅Π΄Π½Π° информация Π·Π° издания ΠΈ вСрсии ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° внСдряванСто Π΅ пусната Π½ΠΎΠ²Π° вСрсия ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° срСдата ΠΈΠΌΠ°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ стойности, Ρ‚ΠΎΠ³Π°Π²Π° внСдряванСто Ρ‰Π΅ сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ с Π³Ρ€Π΅ΡˆΠΊΠ°: Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΡŠΡ‚ Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° вСрсия всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½.

Ако ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ werf.yaml зависи ΠΎΡ‚ външни Π΄Π°Π½Π½ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ списък с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈ вСрсии, ΠΊΠ°ΠΊΡ‚ΠΎ Π² нашия случай), Ρ‚ΠΎΠ³Π°Π²Π° ΡΡŠΡΡ‚Π°Π²ΡŠΡ‚ ΠΈ стойноститС Π½Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ фиксирани Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. Π’ΠΎΠ²Π° Π΅ особСно Π²Π°ΠΆΠ½ΠΎ, Π°ΠΊΠΎ Π²ΡŠΠ½ΡˆΠ½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ сС промСнят доста чСсто.

Π©Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ ΠΈ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° външни Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ Π΅Ρ‚Π°ΠΏ ΠΎΡ‚ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π² GitLab (ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅) ΠΈ Π³ΠΈ ΠΏΡ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° GitLab CI Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚. Π’ΠΎΠ²Π° Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° стартиратС ΠΈ рСстартиратС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, внСдряванС, почистванС) със ΡΡŠΡ‰Π°Ρ‚Π° конфигурация Π² werf.yaml.

Π‘Ρ†Π΅Π½ΠΈΡ‡Π½ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Ρ„Π°ΠΉΠ» .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 and Deploy. НиС стартирамС самия Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ Ρ‡Ρ€Π΅Π· ΠΊΡƒΠΊΠΈΡ‡ΠΊΠΈ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° werf GitHub (тоСст, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС правят ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° GitHub). Π”Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° тях ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²Π·Π΅Ρ‚ΠΈ Π² свойствата Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GitLab Π² сСкцията CI / CD настройки -> ЗадСйствания Π½Π° Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°ΠΈ слСд Ρ‚ΠΎΠ²Π° ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Webhook Π² GitHub (Настройки -> Π£Π΅Π±ΠΊΡƒΠΊΠΈΡ‡ΠΊΠΈ).

Π•Ρ‚Π°ΠΏΡŠΡ‚ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

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 Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈ Π΄Π²Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° ΠΎΡ‚ Π΅Ρ‚Π°ΠΏΠ° към Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ СкспортирамС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ с конструкцията source common_envs.sh. Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ във всички случаи, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ пусканС Π½Π° Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°. Π‘ΠΏΠΎΡ€Π΅Π΄ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ‰Π΅ пуснСм Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ Π·Π° почистванС - Π² Ρ‚ΠΎΠ·ΠΈ случай Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° строитС.

На Π΅Ρ‚Π°ΠΏΠ° Π½Π° внСдряванС Ρ‰Π΅ опишСм Π΄Π²Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ - ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π·Π° внСдряванС Π² производствСни ΠΈ 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 постоянно Ρ‰Π΅ растС. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π½Π°Π»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ почистванС Π½Π° изобраТСния спорСд ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°. Много Π΅ лСсно Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°.

Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ изисква:

  • Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΡΡ‚ΡŠΠΏΠΊΠ° Π·Π° почистванС към .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 с Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΏΡ€Π°Π²Π° Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° изобраТСния Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° Docker (Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ издадСният Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Π·Π°Π΄Π°Ρ‡Π° GitLab CI няма Ρ‚Π°ΠΊΠΎΠ²Π° ΠΏΡ€Π°Π²Π°). Π’ΠΎΠΊΠ΅Π½ΡŠΡ‚ трябва Π΄Π° бъдС въвСдСн ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π² GitLab ΠΈ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° стойност трябва Π΄Π° бъдС посочСна Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата WERF_IMAGES_CLEANUP_PASSWORD ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ (Настройки Π½Π° CI/CD -> ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ).

ДобавянСто Π½Π° Π·Π°Π΄Π°Ρ‡Π° Π·Π° почистванС с нСобходимия Π³Ρ€Π°Ρ„ΠΈΠΊ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π² CI/CD ->
Π‘ΠΏΠΈΡΡŠΡ†ΠΈ
.

Всичко: ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° Docker Π²Π΅Ρ‡Π΅ няма Π΄Π° нараства постоянно ΠΎΡ‚ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ изобраТСния.

Π’ края Π½Π° практичСската част напомням, Ρ‡Π΅ ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΡΠΏΠΈΡΡŠΡ†ΠΈ ΠΎΡ‚ статията са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π² ΠΎΡ‚ΠΈΠ²Π°ΠΌ:

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

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

Π”Π°Π½Π½ΠΈ

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

PS

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€