ื“ื™ื ืึทืžื™ืฉ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืžื™ื˜ ื•ื•ืึธืจืฃ ื ื™ืฆืŸ ื“ื™ ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืึท ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืคึผืœืึทืฅ

ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ืื•ื ื“ื–ืขืจ GitOps ื’ืขืฆื™ื™ึทื’ ืžืขืจ ื•ื•ื™ ืึทืžืึธืœ. werf, ืื•ืŸ ื“ืึธืก ืžืึธืœ ืžื™ืจ ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื˜ื™ื™ืœืŸ ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืื™ืŸ ืึทืกืขืžื‘ืึทืœื™ื ื’ ื“ืขื ืคึผืœืึทืฅ ืžื™ื˜ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื–ื™ืš - werf.io (ื–ื™ื™ืŸ ืจื•ืกื™ืฉ ื•ื•ืขืจืกื™ืข ืื™ื– en.werf.io). ื“ืึธืก ืื™ื– ืึท ืคึผืจืึธืกื˜ ืกื˜ืึทื˜ื™ืง ืคึผืœืึทืฅ, ืึธื‘ืขืจ ื–ื™ื™ึทืŸ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืื™ื– ื˜ืฉื™ืงืึทื•ื•ืข ื•ื•ื™ื™ึทืœ ืขืก ืื™ื– ื’ืขื‘ื•ื™ื˜ ืžื™ื˜ ืึท ื“ื™ื ืึทืžื™ืฉ ื ื•ืžืขืจ ืคื•ืŸ ืึทืจื˜ืึทืคืึทืงืฅ.

ื“ื™ื ืึทืžื™ืฉ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืžื™ื˜ ื•ื•ืึธืจืฃ ื ื™ืฆืŸ ื“ื™ ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืึท ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืคึผืœืึทืฅ

ื’ื™ื™ืŸ ืื™ืŸ ื“ื™ ื ื•ืึทื ืกื™ื– ืคื•ืŸ ื“ื™ ืคึผืœืึทืฅ ืกื˜ืจื•ืงื˜ื•ืจ: ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ืึท ืคึผืจืึธืกื˜ ืžืขื ื™ื• ืคึฟืึทืจ ืึทืœืข ื•ื•ืขืจืกื™ืขืก, ื‘ืœืขื˜ืขืจ ืžื™ื˜ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ืจื™ืœื™ืกื™ื–, ืขื˜ืง. โ€• ืžื™ืจ ืฐืขืœืŸ ื ื™ืฉื˜. ืึทื ืฉื˜ืึธื˜, ืœืึธืžื™ืจ ืคืึธืงื•ืก ืื•ื™ืฃ ื“ื™ ื™ืฉื•ื– ืื•ืŸ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ ื“ื™ื ืึทืžื™ืฉ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืื•ืŸ ืึท ื‘ื™ืกืœ ืื•ื™ืฃ ื“ื™ ืึทืงืึทืžืคึผืึทื ื™ื™ื ื’ ืกื™ / ืกื™ ืคึผืจืึทืกืขืกืึทื–.

ื”ืงื“ืžื”: ื•ื•ื™ ื“ื™ ืคึผืœืึทืฅ ืึทืจื‘ืขื˜

ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜, ื•ื•ืึธืจืฃ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื™ื– ืกื˜ืึธืจื“ ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื–ื™ื™ึทืŸ ืงืึธื“. ื“ืึธืก ื™ืžืคึผืึธื•ื–ืึทื– ื–ื™ื›ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืจืขืงื•ื•ื™ืจืขืžืขื ืฅ ื•ื•ืึธืก ื–ืขื ืขืŸ ื‘ื›ืœืœ ื•ื•ื™ื™ึทื˜ืขืจ ืคื•ืŸ ื“ื™ ืคืึทืจื ืขื ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืึธื‘ืขืจ ืื™ืŸ ืึท ืžื™ื ื™ืžื•ื ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื–ืึธื’ื˜ ืึทื–:

  • ื ื™ื• ื•ื•ืึธืจืฃ ืคืึทื ื’ืงืฉืึทื ื– ื–ืึธืœ ื ื™ื˜ ื–ื™ื™ืŸ ื‘ืืคืจื™ื™ื˜ ืึธืŸ ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ืŸ, ืคืึทืจืงืขืจื˜, ืงื™ื™ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื™ืžืคึผืœื™ื™ื– ื“ื™ ืžืขืœื“ื•ื ื’ ืคื•ืŸ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื•ื•ืขืจืฃ;
  • ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื”ืื˜ ืึท ื’ืึทื ืฅ ืื™ื ื˜ืขื ืกื™ื•ื•ืข ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’: ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจืขืœืขืึทืกืขื“ ืขื˜ืœืขื›ืข ืžืึธืœ ืึท ื˜ืึธื’;
  • ืงื™ื™ืŸ ืžืึทื ื•ืึทืœ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ืึท ืคึผืœืึทืฅ ืžื™ื˜ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื–ืขื ืขืŸ ืœืคึผื—ื•ืช ื˜ื™ื“ื™ืึทืก;
  • ื“ืขืจ ืคึผืจื•ื™ืขืงื˜ ืึทื“ืึทืคึผืฅ ืึท ืกืขืžืึทื ื˜ื™ืง ืฆื•ื’ืึทื ื’ ื•ื•ืขืจืกื™ืข, ืžื™ื˜ 5 ืคืขืกื˜ืงื™ื™ึทื˜ ื˜ืฉืึทื ืึทืœื–. ื“ืขืจ ืžืขืœื“ื•ื ื’ ืคึผืจืึธืฆืขืก ื™ื ื•ื•ืึทืœื•ื•ื– ืกืึทืงื•ื•ืขื ื˜ืฉืึทืœ ื“ื•ืจื›ืคืึธืจ ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก ื“ื•ืจืš ื˜ืฉืึทื ืึทืœื– ืื™ืŸ ืกื“ืจ ืคื•ืŸ ื™ื ืงืจื™ืกื™ื ื’ ืคืขืกื˜ืงื™ื™ึทื˜: ืคื•ืŸ ืึทืœืฃ ืฆื• ืฉื˜ื™ื™ืŸ-ื”ืึทืจื˜;
  • ื“ืขืจ ืคึผืœืึทืฅ ื”ืื˜ ืึท ืจื•ืกื™ืฉ-ืฉืคึผืจืึทืš ื•ื•ืขืจืกื™ืข, ื•ื•ืึธืก "ืœืขื‘ื˜ ืื•ืŸ ื“ืขื•ื•ืขืœืึธืคึผืก" (ื“"ื”, ื“ืขืจ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื•ื•ืึธืก ืื™ื– ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜) ืื™ืŸ ืคึผืึทืจืึทืœืขืœ ืžื™ื˜ ื“ื™ ื”ื•ื™ืคึผื˜ (ื“"ื” ืขื ื’ืœื™ืฉ-ืฉืคึผืจืึทืš) ื•ื•ืขืจืกื™ืข.

ืฆื• ื‘ืึทื”ืึทืœื˜ืŸ ืึทืœืข ื“ืขื "ื™ื ืขืจ ืงื™ืš" ืคื•ืŸ ื“ื™ ื‘ืึทื ื™ืฆืขืจ, ืคืึธืจืฉืœืึธื’ืŸ ืื™ื ืขืคึผืขืก ื•ื•ืึธืก "ื ืึธืจ ืึทืจื‘ืขื˜", ืžื™ืจ ื”ืื‘ืŸ ื‘ืึทื–ื•ื ื“ืขืจ ื•ื•ืึธืจืฃ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืื•ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื’ืขืฆื™ื™ึทื’ - ืื™ื– multiwerf. ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืžืขืœื“ื•ื ื’ ื ื•ืžืขืจ ืื•ืŸ ื“ื™ ืคืขืกื˜ืงื™ื™ึทื˜ ืงืึทื ืึทืœ ืึทื– ืื™ืจ ื–ืขื ื˜ ื’ืจื™ื™ื˜ ืฆื• ื ื•ืฆืŸ, ืื•ืŸ Multiwerf ื•ื•ืขื˜ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืื•ื™ื‘ ืขืก ืื™ื– ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืื•ื™ืฃ ื“ืขื ืงืึทื ืึทืœ ืื•ืŸ ืืจืืคืงืืคื™ืข ืขืก ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง.

ืื™ืŸ ื“ื™ ื•ื•ืขืจืกื™ืข ืกืขืœืขืงืฆื™ืข ืžืขื ื™ื• ืื•ื™ืฃ ื“ืขื ื•ื•ืขื‘ื–ื™ื™ื˜ืœ, ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ werf ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื ืื™ืŸ ื™ืขื“ืขืจ ืงืึทื ืึทืœ. ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ื“ื•ืจืš ืึทื“ืจืขืก werf.io/ื“ืึธืงื•ืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ื™ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืžืขืจืกื˜ ืกื˜ืึทื‘ื™ืœ ืงืึทื ืึทืœ ืคึฟืึทืจ ื“ื™ ืœืขืฆื˜ืข ืžืขืœื“ื•ื ื’ ืึธืคึผืขื ืก - ืขืก ืื™ื– ืื•ื™ืš ื™ื ื“ืขืงืกื˜ ื“ื•ืจืš ื–ื•ื›ืŸ ืขื ื“ื–ืฉืึทื ื–. ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืคึฟืึทืจ ื“ืขื ืงืึทื ืึทืœ ืื™ื– ื‘ื ื™ืžืฆื ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ ื•ื•ืขื ื“ื˜ (ืœืžืฉืœ, werf.io/v1.0-beta/documentation ืคึฟืึทืจ ื‘ื™ืชื ืžืขืœื“ื•ื ื’ 1.0).

ืื™ืŸ ื’ืึทื ืฅ, ื“ื™ ืคึผืœืึทืฅ ื”ืื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ื•ื•ืขืจืกื™ืขืก ื‘ื ื™ืžืฆื:

  1. root (ืขืคืขื ืขืŸ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜),
  2. ืคึฟืึทืจ ื™ืขื“ืขืจ ืึทืงื˜ื™ื•ื• ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืงืึทื ืึทืœ ืคื•ืŸ ื™ืขื“ืขืจ ืžืขืœื“ื•ื ื’ (ืœืžืฉืœ, werf.io/v1.0-beta).

ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ืึท ืคึผืœืึทืฅ, ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ื–ืึทืžืœืขืŸ ืขืก ื ื™ืฆืŸ Jekyllื“ื•ืจืš ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ /docs werf ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ื‘ืึทืคึฟืขืœ (jekyll build), ื ืึธืš ืกื•ื•ื™ื˜ืฉื™ื ื’ ืฆื• ื“ื™ ื’ื™ื˜ ืงื•ื•ื™ื˜ืœ ืคื•ืŸ ื“ื™ ืคืืจืœืื ื’ื˜ ื•ื•ืขืจืกื™ืข.

ืขืก ื‘ืœื™ื™ื‘ื˜ ื ืึธืจ ืฆื• ืœื™ื™ื’ืŸ ืึทื–:

  • ื“ื™ ื ื•ืฆืŸ ื–ื™ืš (werf) ืื™ื– ื’ืขื ื™ืฆื˜ ืคึฟืึทืจ ืคึฟืึทืจื–ืึทืžืœื•ื ื’;
  • ืกื™ / ืกื™ ืคึผืจืึทืกืขืกืึทื– ื–ืขื ืขืŸ ื’ืขื‘ื•ื™ื˜ ืื•ื™ืฃ ื“ื™ ื™ืงืขืจ ืคื•ืŸ GitLab CI;
  • ืื•ืŸ ื“ืึธืก ืึทืœืฅ ืœื•ื™ืคื˜ ื“ืึธืš ืื™ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก.

ื˜ืึทืกืงืก

ืื™ืฆื˜ ืœืึธื–ืŸ ืื•ื ื“ื– ืคืึธืจืžื•ืœื™ืจืŸ ื˜ืึทืกืงืก ื•ื•ืึธืก ื ืขืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ืึทืœืข ื“ื™ ื“ื™ืกืงืจื™ื™ื‘ื“ ืกืคึผืขืกื™ืคื™ืงืก:

  1. ื ืึธืš ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ื•ื•ืึธืจืฃ ื•ื•ืขืจืกื™ืข ืื•ื™ืฃ ืงื™ื™ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืงืึทื ืึทืœ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ื™ืฃ ื“ืขื ืคึผืœืึทืฅ ื–ืึธืœ ื–ื™ื™ืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜.
  2. ืคึฟืึทืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืงืขื ืขืŸ ืฆื• ืžืืœ ืงื•ืง ืคืึธืจื•ื™ืกื™ืงืข ื•ื•ื™ื™ึทื–ื•ื ื’ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ืขื ืคึผืœืึทืฅ.

ื“ืขืจ ืคึผืœืึทืฅ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืจื™ืงืึธืžืคึผื™ื™ืœื“ ื ืึธืš ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ื•ื•ืขืจืกื™ืข ืื•ื™ืฃ ืงื™ื™ืŸ ืงืึทื ืึทืœ ืคึฟื•ืŸ ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ื’ื™ื˜ ื˜ืึทื’ืก, ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืคื•ืŸ ื‘ื•ื™ืขืŸ ื“ื™ ื‘ื™ืœื“ ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ:

  • ื–ื™ื ื˜ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ื•ื•ืขืจืกื™ืขืก ืื•ื™ืฃ ื˜ืฉืึทื ืึทืœื– ืขื ื“ืขืจื•ื ื’ืขืŸ, ืขืก ืื™ื– ื‘ืœื•ื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ืจื™ื‘ื™ืœื“ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืคึฟืึทืจ ื˜ืฉืึทื ืึทืœื– ื•ื•ื• ื“ื™ ื•ื•ืขืจืกื™ืข ื”ืื˜ ื’ืขื‘ื™ื˜ืŸ. ื ืึธืš ืึทืœืข, ืจื™ื‘ื™ืœื“ื™ื ื’ ืึทืœืฅ ื•ื•ื™ื“ืขืจ ืื™ื– ื ื™ืฉื˜ ื–ื™ื™ืขืจ ืคื™ื™ึทืŸ.
  • ื“ืขืจ ื’ืึทื ื’ ืคื•ืŸ ื˜ืฉืึทื ืึทืœื– ืคึฟืึทืจ ืจื™ืœื™ืกื™ื– ืงืขืŸ ื˜ื•ื™ืฉืŸ. ืื™ืŸ ืขื˜ืœืขื›ืข ืคื•ื ื˜ ืื™ืŸ ืฆื™ื™ื˜, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืขืก ืงืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ืึท ื•ื•ืขืจืกื™ืข ืื•ื™ืฃ ื“ื™ ื˜ืฉืึทื ืึทืœื– ืžืขืจ ืกื˜ืึทื‘ื™ืœ ื•ื•ื™ ื“ื™ ืคืจื™-ืึทืงืกืขืก 1.1 ืžืขืœื“ื•ื ื’, ืึธื‘ืขืจ ืžื™ื˜ ืฆื™ื™ื˜ ื–ื™ื™ ื•ื•ืขืœืŸ ื“ืขืจืฉื™ื™ึทื ืขืŸ - ืื™ืŸ ื“ืขื ืคืึทืœ, ื–ืึธืœ ืื™ืจ ื ื™ืฉื˜ ื˜ื•ื™ืฉืŸ ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืžืึทื ื™ื•ืึทืœื™?

ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืึทื– ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื˜ืฉืึทื ื’ื™ื ื’ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึทื˜ืŸ.

ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ

ื˜ืฉืึธืึธืกื™ื ื’ ืึท ืฆื•ื’ืึทื ื’

ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืœื™, ืื™ืจ ืงืขื ืขืŸ ืœื•ื™ืคืŸ ื™ืขื“ืขืจ ืคืืจืœืื ื’ื˜ ื•ื•ืขืจืกื™ืข ื•ื•ื™ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืคึผืึธื“ ืื™ืŸ Kubernetes. ื“ื™ ืึธืคึผืฆื™ืข ื™ืžืคึผืœื™ื™ื– ืึท ื’ืจืขืกืขืจืข ื ื•ืžืขืจ ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ, ื•ื•ืึธืก ื•ื•ืขื˜ ื•ื•ืึทืงืกืŸ ืžื™ื˜ ื“ื™ ืคืึทืจื’ืจืขืกืขืจืŸ ืื™ืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืกื˜ืึทื‘ื™ืœ ื•ื•ืึธืจืฃ ืจื™ืœื™ืกื™ื–. ืื•ืŸ ื“ืึธืก, ืื™ืŸ ืงืขืจ, ื™ืžืคึผืœื™ื™ื– ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ื•ื™ืฉืึทืœื˜: ื™ืขื“ืขืจ ื•ื•ืขืจืกื™ืข ื”ืื˜ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื”ื˜ื˜ืคึผ ืกืขืจื•ื•ืขืจ ืื•ืŸ ืžื™ื˜ ืึท ืงืœื™ื™ืŸ ืžืึทืกืข. ืคื•ืŸ ืงื•ืจืก, ื“ืึธืก ืื•ื™ืš ื™ื ื˜ื™ื™ืœื– ื’ืจืขืกืขืจืข ืžื™ื˜ืœ ืงืึธืก.

ืžื™ ืจ ื”ืื‘ ืŸ ื’ืขื ื•ืžืข ืŸ ื“ืข ื ื–ืขืœื‘ ืŸ ืฐืขื’ ืึทืกืขืžื‘ืึทืœื™ื ื’ ืึทืœืข ื ื™ื™ื˜ื™ืง ื•ื•ืขืจืกื™ืขืก ืื™ืŸ ืื™ื™ืŸ ื‘ื™ืœื“. ื“ื™ ืงืึทืžืคึผื™ื™ืœื“ ืกื˜ืึทื˜ื™ืงืก ืคื•ืŸ ืึทืœืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ืขื ืคึผืœืึทืฅ ื–ืขื ืขืŸ ืœื™ื’ืŸ ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืžื™ื˜ NGINX, ืื•ืŸ ืคืึทืจืงืขืจ ืฆื• ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืงื•ืžื˜ ื“ื•ืจืš NGINX Ingress. ื ืคึผืฉื•ื˜ ืกื˜ืจื•ืงื˜ื•ืจ - ืึท ืกื˜ื™ื™ื˜ืœืึทืก ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ - ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืœื™ื™ื›ื˜ ื•ื•ืึธื’ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ (ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื“ื™ ืžืึทืกืข) ื ื™ืฆืŸ Kubernetes ื–ื™ืš.

ืฆื• ื–ื™ื™ืŸ ืžืขืจ ื’ืขื ื•ื™, ืžื™ืจ ื–ืขื ืขืŸ ืงืึทืœืขืงื˜ื™ื ื’ ืฆื•ื•ื™ื™ ื‘ื™ืœื“ืขืจ: ืื™ื™ื ืขืจ ืคึฟืึทืจ ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืงืจื™ื™ึทื–, ื“ื™ ืจื’ืข ืื™ื– ืึทืŸ ื ืึธืš ืื™ื™ื ืขืจ ืคึฟืึทืจ ื“ื™ ื“ืขื•ื• ืงืจื™ื™ึทื–. ื“ื™ ื ืึธืš ื‘ื™ืœื“ ืื™ื– ื’ืขื ื™ืฆื˜ (ืœืึทื ื˜ืฉื˜) ื‘ืœื•ื™ื– ืื•ื™ืฃ ื“ื™ ื“ืขื•ื• ืงืจื™ื™ึทื– ืฆื•ื–ืึทืžืขืŸ ืžื™ื˜ ื“ื™ ื”ื•ื™ืคึผื˜ ืื•ืŸ ื›ึผื•ืœืœ ื“ื™ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืคึผืœืึทืฅ ืคึฟื•ืŸ ื“ื™ ืึธืคึผืฉืึทืฆื•ื ื’ ื™ื‘ืขืจื’ืขื‘ืŸ, ืื•ืŸ ืจื•ื˜ื™ื ื’ ืฆื•ื•ื™ืฉืŸ ื–ื™ื™ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ื™ื ื’ืจืขืกืก ืจืขืกื•ืจืกืŸ.

ื•ื•ืขืจืฃ ื•ื•ืก ื’ื™ื˜ ืงืœืึธื•ืŸ ืื•ืŸ ืึทืจื˜ืึทืคืึทืงืฅ

ื•ื•ื™ ืฉื•ื™ืŸ ื“ืขืจืžืื ื˜, ืื™ืŸ ืกื“ืจ ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืคึผืœืึทืฅ ืกื˜ืึทื˜ื™ืงืก ืคึฟืึทืจ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ื•ื™ืขืŸ ื“ื•ืจืš ื‘ืึทืฉื˜ื™ืžืขืŸ ืฆื• ื“ื™ ืฆื•ื ืขืžืขืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืงื•ื•ื™ื˜ืœ. ืื™ืจ ืงืขืŸ ืื•ื™ืš ื˜ืึธืŸ ื“ืึธืก ื“ื•ืจืš ืงืœืึธื•ื ื™ื ื’ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ื™ืขื“ืขืจ ืžืึธืœ ืื™ืจ ื‘ื•ื™ืขืŸ, ืกืขืœืขืงื˜ื™ืจืŸ ื“ื™ ืฆื•ื ืขืžืขืŸ ื˜ืึทื’ืก ืคื•ืŸ ืึท ืจืฉื™ืžื”. ืึธื‘ืขืจ, ื“ืึธืก ืื™ื– ืึท ื’ืึทื ืฅ ืžื™ื˜ืœ-ืื™ื ื˜ืขื ืกื™ื•ื•ืข ืึธืคึผืขืจืึทืฆื™ืข ืื•ืŸ, ื“ืขืจืฆื•, ืจื™ืงื•ื•ื™ื™ืขืจื– ืฉืจื™ื™ื‘ืŸ ื ื™ื˜-ื ื™ื˜-ื ื™ื˜ื•ื•ื™ืึทืœ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ... ืืŸ ืื ื“ืขืจ ืขืจื ืกื˜ ื›ื™ืกืึธืจืŸ ืื™ื– ืึทื– ืžื™ื˜ ื“ืขื ืฆื•ื’ืึทื ื’ ืขืก ืื™ื– ืงื™ื™ืŸ ื•ื•ืขื’ ืฆื• ืงืึทืฉ ืขืคึผืขืก ื‘ืขืฉืึทืก ืคึฟืึทืจื–ืึทืžืœื•ื ื’.

ื“ืึธ ื“ื™ ื•ื•ืึธืจืฃ ื ื•ืฆืŸ ื–ื™ืš ืงื•ืžื˜ ืฆื• ืื•ื ื“ื–ืขืจ ื”ื™ืœืฃ, ื™ืžืคึผืœืึทืžืขื ื™ื ื’ ืงืœื•ื’ ืงืึทื˜ืฉื™ื ื’ ืื•ืŸ ืึทืœืึทื•ื™ื ื’ ืื™ืจ ืฆื• ื ื•ืฆืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื–. ื ื™ืฆืŸ werf ืฆื• ืœื™ื™ื’ืŸ ืงืึธื“ ืคื•ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ื•ื•ืขื˜ ื‘ืื˜ื™ื™ื˜ื™ืง ืคืึทืจื’ื™ื›ืขืจืŸ ื“ื™ ื‘ื•ื™ืขืŸ, ื•ื•ื™ื™ึทืœ ื•ื•ืขืจืฃ ื‘ื™ื™ืกื™ืงืœื™ ืงืœืึธื•ื ื– ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืึทืžืึธืœ ืื•ืŸ ื“ืขืžืึธืœื˜ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ื‘ืœื•ื™ื– fetch ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ื•ื•ืขืŸ ืึทื“ื™ื ื’ ื“ืึทื˜ืŸ ืคื•ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™, ืžื™ืจ ืงืขื ืขืŸ ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ื‘ืœื•ื™ื– ื“ื™ ื ื™ื™ื˜ื™ืง ื“ื™ื™ืจืขืงื˜ืขืจื™ื– (ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ื“ืึธืก ืื™ื– ื“ืขืจ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ docs), ื•ื•ืึธืก ื•ื•ืขื˜ ื‘ืื˜ื™ื™ื˜ื™ืง ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืฆื•ื’ืขื’ืขื‘ืŸ ื“ืึทื˜ืŸ.

ื–ื™ื ื˜ Jekyll ืื™ื– ืึท ื’ืขืฆื™ื™ึทื’ ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ืงืึทืžืคึผื™ื™ืœื™ื ื’ ืกื˜ืึทื˜ื™ืง ื“ืึทื˜ืŸ ืื•ืŸ ืื™ื– ื ื™ื˜ ื“ืืจืฃ ืื™ืŸ ื“ื™ ืœืขืฆื˜ ื‘ื™ืœื“, ืขืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ืœืึทื“ื–ืฉื™ืงืึทืœ ืฆื• ืฆื•ื ื•ื™ืคื ืขืžืขืŸ ืื™ืŸ werf ืึทืจื˜ืึทืคืึทืงื˜, ืื•ืŸ ืื™ืŸ ื“ื™ ืœืขืฆื˜ ื‘ื™ืœื“ ืึทืจื™ื™ึทื ืคื™ืจ ื‘ืœื•ื™ื– ื“ื™ ื–ืึทืžืœื•ื ื’ ืจืขื–ื•ืœื˜ืึทื˜.

ืžื™ืจ ืฉืจื™ื™ึทื‘ืŸ werf.yaml

ืึทื–ื•ื™, ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืึทื– ืžื™ืจ ื•ื•ืขืœืŸ ืฆื•ื ื•ื™ืคื ืขืžืขืŸ ื™ืขื“ืขืจ ื•ื•ืขืจืกื™ืข ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื•ื•ืึธืจืฃ ืึทืจื˜ื™ืคืึทืงื˜. ืึธื‘ืขืจ ืžื™ืจ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื•ื•ื™ืกืŸ ื•ื•ื™ ืคื™ืœืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืึทืจื˜ืึทืคืึทืงืฅ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืขืฉืึทืก ืคึฟืึทืจื–ืึทืžืœื•ื ื’, ืึทื–ื•ื™ ืžื™ืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ืฉืจื™ื™ึทื‘ืŸ ืึท ืคืึทืจืคืขืกื˜ื™ืงื˜ ื‘ื•ื™ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ (ืฉื˜ืจืขื ื’ ื’ืขืจืขื“ื˜, ืžื™ืจ ื ืึธืš ืงืขื ืขืŸ, ืึธื‘ืขืจ ืขืก ื•ื•ืขื˜ ื ื™ืฉื˜ ื–ื™ื™ืŸ ื’ืึธืจ ืขืคืขืงื˜ื™ื•ื•).

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 - ื•ื•ืขืจืฃ ืžืขืœื“ื•ื ื’ ื•ื•ืขืจืกื™ืข ืฆื• ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื–ืŸ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืื•ื™ืฃ ื“ืขื ืคึผืœืึทืฅ (ืขืก ืื™ื– ื ื™ื˜ ืฉื˜ืขื ื“ื™ืง ื ื™ื™ื˜ื™ืง ืฆื• ื•ื•ื™ื™ึทื–ืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื“ื•ืจืš ื“ื™ ื”ืขื›ืกื˜ืŸ ืžืขืœื“ื•ื ื’ ื ื•ืžืขืจ). ื‘ื™ื™ึทืฉืคึผื™ืœ: v1.0.4-beta.20
  • REVIEW_SHA - ื”ืึทืฉ ืคื•ืŸ ื“ื™ ืึธืคึผืฉืึทืฆื•ื ื’ ืคื•ืŸ ื•ื•ืึธืก ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ื•ื™ืขืŸ ื“ื™ ื•ื•ืขืจืกื™ืข ืคึฟืึทืจ ื“ื™ ืคึผืจืึธื‘ืข ืฉืœื™ื™ืฃ.

ื“ื™ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึธื ื’ืขืคื™ืœื˜ ืื™ืŸ ื“ื™ GitLab CI ืจืขืจื  - ืœื™ื ื™ืข, ืื•ืŸ ื•ื•ื™ ืคึผื•ื ืงื˜ ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื•ื ื˜ืŸ.

ืขืจืฉื˜ืขืจ ืคื•ืŸ ืึทืœืข, ืคึฟืึทืจ ืงืึทื ื•ื•ื™ื ื™ืึทื ืก, ืžื™ืจ ื“ืขืคื™ื ื™ืจืŸ ืื™ืŸ werf.yaml ื’ื™ื™ืŸ ืžื•ืกื˜ืขืจ ื•ื•ืขืจื™ืึทื‘ืึทืœื–, ืึทืกื™ื™ื ื™ื ื’ ื–ื™ื™ ื•ื•ืึทืœื•ืขืก ืคึฟื•ืŸ ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื–:

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

ื“ื™ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื“ื™ ืึทืจื˜ืึทืคืึทืงื˜ ืคึฟืึทืจ ืงืึทืžืคึผื™ื™ืœื™ื ื’ ื“ื™ ืกื˜ืึทื˜ื™ืง ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ืขื ืคึผืœืึทืฅ ืื™ื– ื‘ื›ืœืœ ื“ื™ ื–ืขืœื‘ืข ืคึฟืึทืจ ืึทืœืข ืงืึทืกืขืก ื•ื•ืึธืก ืžื™ืจ ื“ืึทืจืคึฟืŸ (ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ื“ื™ ื•ื•ืึธืจืฆืœ ื•ื•ืขืจืกื™ืข, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ื“ื™ ื•ื•ืขืจืกื™ืข ืคึฟืึทืจ ื“ื™ ื“ืขื•ื• ืงืจื™ื™ึทื–). ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทืš ืขืก ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื‘ืœืึธืง ื ื™ืฆืŸ ื“ื™ ืคึฟื•ื ืงืฆื™ืข 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 }}. ืึธื‘ืขืจ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืึทื– ื•ื•ืขืŸ ื™ืžืคึผืึธืจื˜ื™ื ื’ ืคื•ืŸ ืึทืจื˜ืึทืคืึทืงืฅ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธืคึผืฉื™ืงืŸ ืฆื• ื“ื™ ื–ืขืœื‘ืข ื ืขืžืขืŸ.

ื•ื•ืขืŸ ื“ื™ืกืงืจื™ื™ื‘ื™ื ื’ ืึท ืึทืจื˜ืึทืคืึทืงื˜, ื“ื™ ืคืืœื’ืขื ื“ืข ื•ื•ืึธืจืฃ ืฉื˜ืจื™ืš ืื™ื– ื’ืขื ื™ืฆื˜: ืžืึทื•ื ื˜ื™ื ื’. ืžืึทื•ื ื˜ื™ื ื’ ื•ื•ืึธืก ื™ื ื“ื™ืงื™ื™ืฅ ื“ื™ ืกืขืจื•ื•ื™ืก ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ build_dir ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืจืึทื˜ืขื•ื•ืขืŸ ื“ื™ Jekyll ืงืึทืฉ ืฆื•ื•ื™ืฉืŸ ืจืขืจื  - ืœื™ื ื™ืข ืœื•ื™ืคื˜, ื•ื•ืึธืก ื‘ืื˜ื™ื™ื˜ื™ืง ืกืคึผื™ื“ื– ืึทืจื•ื™ืฃ ืจื™ืึทืกืขืžื‘ืึทืœื™ื ื’.

ืื™ืจ ืงืขืŸ ืื•ื™ืš ื”ืึธื‘ืŸ ื‘ืืžืขืจืงื˜ ื“ื™ ื ื•ืฆืŸ ืคื•ืŸ ื“ืขืจ ื˜ืขืงืข releases.yml ืื™ื– ืึท YAML ื˜ืขืงืข ืžื™ื˜ ืžืขืœื“ื•ื ื’ ื“ืึทื˜ืŸ ื’ืขื‘ืขื˜ืŸ ืคึฟื•ืŸ github.com (ืึท ืึทืจื˜ืึทืคืึทืงื˜ ื‘ืืงื•ืžืขืŸ ื•ื•ืขืŸ ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ืึท ืจืขืจื  - ืœื™ื ื™ืข). ืขืก ืื™ื– ื ื•ื™ื˜ื™ืง ื•ื•ืขืŸ ืงืึทืžืคึผื™ื™ืœื™ื ื’ ื“ืขื ืคึผืœืึทืฅ, ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ืงืึธื ื˜ืขืงืกื˜ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืขืก ืื™ื– ื˜ืฉื™ืงืึทื•ื•ืข ืคึฟืึทืจ ืื•ื ื“ื– ื•ื•ื™ื™ึทืœ ืขืก ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ื–ื™ื™ึทืŸ ืฉื˜ืึทื˜ ืจื™ืึทืกืขืžื‘ืึทืœ ืคื•ืŸ ื‘ืœื•ื™ื– ืื™ื™ืŸ ืึทืจื˜ืึทืคืึทืงื˜ - ืึท ืึทืจื˜ืึทืคืึทืงื˜ ืคื•ืŸ ื“ืขืจ ื•ื•ืึธืจืฆืœ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ืขื ืคึผืœืึทืฅ (ืขืก ืื™ื– ื ื™ื˜ ื“ืืจืฃ ืื™ืŸ ืื ื“ืขืจืข ืึทืจื˜ืึทืคืึทืงืฅ).

ื“ืึธืก ืื™ื– ื™ืžืคึผืœืึทืžืขื ืึทื“ ืžื™ื˜ ื“ื™ ืงืึทื ื“ื™ืฉืึทื ืึทืœ ื•ื™ืกื–ืึธื’ื•ื ื’ if ื’ื™ื™ืŸ ื˜ืขืžืคึผืœืึทื˜ืขืก ืื•ืŸ ื“ื™ื–ื™ื™ื ื– {{ $Root.Files.Get "releases.yml" | sha256sum }} ืื™ืŸ ื‘ื™ื ืข ืกื˜ืึทื’ืขืก. ืขืก ืึทืจื‘ืขื˜ ื•ื•ื™ ื’ื™ื™ื˜: ื•ื•ืขืŸ ืื™ืจ ื‘ื•ื™ืขืŸ ืึท ืึทืจื˜ืึทืคืึทืงื˜ ืคึฟืึทืจ ื“ื™ ื•ื•ืึธืจืฆืœ ื•ื•ืขืจืกื™ืข (ื•ื•ืึทืจื™ืึทื‘ืœืข .Channel ืื™ื– ื’ืœื™ื™ืš ืฆื• root) ื˜ืขืงืข ื”ืึทืฉ releases.yml ืึทืคืขืงืฅ ื“ื™ ื›ืกื™ืžืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื’ืื ืฆืข ื‘ื™ื ืข, ื•ื•ื™ื™ึทืœ ืขืก ืื™ื– ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืึทื ืกื™ื‘ืœืข ืึทืจื‘ืขื˜ (ืคึผืึทืจืึทืžืขื˜ืขืจ 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 ื‘ื™ืœื“, ืžื™ืจ ื•ื•ืขืœืŸ ืœืึธื–ืŸ ืขืก ืฆื• ื–ื™ื™ืŸ ื’ืขื‘ื•ื™ื˜ ื‘ืœื•ื™ื– ืžื™ื˜ ื“ื™ ื•ื•ืึธืจืฆืœ ื•ื•ืขืจืกื™ืข ืึทืจื˜ืึทืคืึทืงื˜ (ืขืก ืื™ื– ืฉื•ื™ืŸ ื’ืขื‘ื•ื™ื˜ ืกื™ื™ึท ื•ื•ื™ ืกื™ื™ึท), ืฆื• ืคืึทืจืคึผืึธืฉืขื˜ืขืจืŸ ื“ื™ ืจืขืจื  - ืœื™ื ื™ืข ืกื˜ืจื•ืงื˜ื•ืจ.

ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืื™ื– ื’ืจื™ื™ื˜! ืœืึธืžื™ืจ ื’ื™ื™ืŸ ืฆื• ืกื™ / ืกื™ ืื•ืŸ ื•ื•ื™ื›ื˜ื™ืง ื ื•ืึทื ืกื™ื–.

ืจืขืจื  - ืœื™ื ื™ืข ืื™ืŸ GitLab CI ืื•ืŸ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ ื“ื™ื ืึทืžื™ืฉ ื‘ื•ื™ืขืŸ

ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ ื‘ื•ื™ืขืŸ, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉื˜ืขืœืŸ ื“ื™ ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื’ืขื ื™ืฆื˜ ืื™ืŸ werf.yaml. ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึทืคึผืœื™ื™ื– ืฆื• ื“ื™ REVIEW_SHA ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง, ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ืฉื˜ืขืœืŸ ื•ื•ืขืŸ ืจื•ืคืŸ ืจืขืจื  - ืœื™ื ื™ืข ืคึฟื•ืŸ ื“ื™ GitHub ืงืจื•ืง.

ืžื™ืจ ื•ื•ืขืœืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื“ื™ ื ื™ื™ื˜ื™ืง ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึทื˜ืŸ ืื™ืŸ ืึท ื‘ืึทืฉ ืฉืจื™ืคื˜ generate_artifacts, ื•ื•ืึธืก ื•ื•ืขื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืฆื•ื•ื™ื™ GitLab ืจืขืจื  - ืœื™ื ื™ืข ืึทืจื˜ืึทืคืึทืงืฅ:

  • ื˜ืขืงืข releases.yml ืžื™ื˜ ืžืขืœื“ื•ื ื’ ื“ืึทื˜ืŸ,
  • ื˜ืขืงืข common_envs.sh, ืžื™ื˜ ื“ื™ ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืฆื• ื–ื™ื™ืŸ ื™ืงืกืคึผืึธืจื˜ืึทื“.

ื˜ืขืงืข ืื™ื ื”ืึทืœื˜ generate_artifacts ืื™ืจ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ืื™ืŸ ืื•ื ื“ื–ืขืจ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื– ืžื™ื˜ ื‘ื™ื™ืฉืคื™ืœืŸ. ื‘ืึทืงื•ืžืขืŸ ื“ื™ ื“ืึทื˜ืŸ ื–ื™ืš ืื™ื– ื ื™ืฉื˜ ื“ื™ ื˜ืขืžืข ืคื•ืŸ โ€‹โ€‹ื“ืขื ืึทืจื˜ื™ืงืœ, ืึธื‘ืขืจ ื“ื™ ื˜ืขืงืข common_envs.sh ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ืื•ื ื“ื–, ื•ื•ื™ื™ึทืœ ื“ื™ ืึทืจื‘ืขื˜ ืคื•ืŸ ื•ื•ืึธืจืฃ ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ืื™ื. ื ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ื–ื™ื™ึทืŸ ืื™ื ื”ืึทืœื˜:

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.yaml ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึทื˜ืŸ (ืœืžืฉืœ, ืึท ืจืฉื™ืžื” ืคื•ืŸ ืงืจืึทื ื˜ ื•ื•ืขืจืกื™ืขืก, ื•ื•ื™ ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ), ื“ืขืžืึธืœื˜ ื“ืขืจ ื–ืึทืฅ ืื•ืŸ ื•ื•ืึทืœื•ืขืก ืคื•ืŸ ืึทื–ืึท ื“ืึทื˜ืŸ ื–ืึธืœ ื–ื™ื™ืŸ ืจืขืงืึธืจื“ืขื“ ืื™ืŸ ื“ื™ ืจืขืจื  - ืœื™ื ื™ืข. ื“ืึธืก ืื™ื– ืกืคึผืขืฆื™ืขืœ ื•ื•ื™ื›ื˜ื™ืง ืื•ื™ื‘ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืคึผืึทืจืึทืžืขื˜ืขืจืก ื˜ื•ื™ืฉืŸ ื’ืึทื ืฅ ืึธืคื˜.

ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทืงื•ืžืขืŸ ืื•ืŸ ืจืขืงืึธืจื“ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึทื˜ืŸ ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื‘ื™ื ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืจืขืจื  - ืœื™ื ื™ืข ืื™ืŸ GitLab (Prebuild) ืื•ืŸ ืฉื™ืงืŸ ื–ื™ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืื™ืŸ ื“ื™ ืคืึธืจืขื GitLab CI ืึทืจื˜ื™ืคืึทืงื˜. ื“ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ืฆื• ืœื•ื™ืคืŸ ืื•ืŸ ืจื™ืกื˜ืึทืจื˜ ืจืขืจื  - ืœื™ื ื™ืข ื“ื–ืฉืึธื‘ืก (ื‘ื•ื™ืขืŸ, ืฆืขื•ื•ื™ืงืœืขืŸ, ืงืœื™ื ืึทืคึผ) ืžื™ื˜ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ืŸ 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 ืจืขืจื  - ืœื™ื ื™ืข ืกื˜ืึทื’ืขืก: ื‘ื•ื™ืขืŸ ืื•ืŸ ืฆืขื•ื•ื™ืงืœืขืŸ. ืžื™ืจ ืงืึทื˜ืขืจ ื“ื™ ืจืขืจื  - ืœื™ื ื™ืข ื–ื™ืš ื ื™ืฆืŸ ื›ื•ืงืก ืคื•ืŸ ื“ื™ werf GitHub ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ (ื“"ื” ื•ื•ืขืŸ ืขืก ื–ืขื ืขืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื“ื™ GitHub ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™). ื“ืึทื˜ืŸ ืคึฟืึทืจ ื–ื™ื™ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ื“ื™ GitLab ืคึผืจื•ื™ืขืงื˜ ืคึผืจืึธืคึผืขืจื˜ื™ืขืก ืื™ืŸ ื“ืขืจ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืกื™ / ืกื™ ืกืขื˜ื˜ื™ื ื’ืก -> ืจืขืจื  - ืœื™ื ื™ืข ื˜ืจื™ื’ืขืจื–ืื•ืŸ ื“ืขืจื ืึธืš ืฉืึทืคึฟืŸ ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ื•ื•ืขื‘ื”ืึธืึธืง ืื™ืŸ 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 ื•ื•ืขื˜ ืœื™ื™ื’ืŸ ืฆื•ื•ื™ื™ ืึทืจื˜ืึทืคืึทืงืฅ ืคื•ืŸ ื“ืขืจ ื‘ื™ื ืข ืฆื• ื“ื™ ื‘ื•ื™ืขืŸ ื‘ื™ื ืข Prebuild, ืึทื–ื•ื™ ืžื™ืจ ืึทืจื•ื™ืกืคื™ืจืŸ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืžื™ื˜ ืฆื•ื’ืขื’ืจื™ื™ื˜ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ ื ื™ืฆืŸ ื“ื™ ื‘ื•ื™ืขืŸ source common_envs.sh. ืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ื“ื™ ื‘ื•ื™ืขืŸ ื‘ื™ื ืข ืื™ืŸ ืึทืœืข ืงืึทืกืขืก, ืึทื—ื•ืฅ ืคึฟืึทืจ ืœืึธื ื˜ืฉื™ื ื’ ื“ื™ ืจืขืจื  - ืœื™ื ื™ืข ืœื•ื™ื˜ ืึท ืคึผืœืึทืŸ. ืœื•ื™ื˜ ื“ืขื ืคึผืœืึทืŸ, ืžื™ืจ ื•ื•ืขืœืŸ ืœื•ื™ืคืŸ ืึท ืจืขืจื  - ืœื™ื ื™ืข ืคึฟืึทืจ ืจื™ื™ื ื™ืงื•ื ื’ - ืื™ืŸ ื“ืขื ืคืึทืœ ืขืก ืื™ื– ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ื“ื•ืจื›ืคื™ืจืŸ ืคึฟืึทืจื–ืึทืžืœื•ื ื’.

ืื™ืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื‘ื™ื ืข, ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืฆื•ื•ื™ื™ ื˜ืึทืกืงืก - ืกืขืคึผืขืจืึทื˜ืœื™ ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข ืื•ืŸ ื“ืขื•ื• ืกืขืจืงืึทืฅ, ื ื™ืฆืŸ ืึท 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_KUBE_CONTEXT), ืื•ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™ ืฉืœื™ื™ืฃ ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– (environment.name ะธ environment.url), ื•ื•ืึธืก ื–ืขื ืขืŸ ื“ืขืžืึธืœื˜ ื’ืขื ื™ืฆื˜ ืื™ืŸ ื”ืขืœื ื˜ืฉืึทืจื˜ ื˜ืขืžืคึผืœืึทื˜ืขืก. ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ืฆื•ืฉื˜ืขืœืŸ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ื˜ืขืžืคึผืœืึทื˜ืขืก ื•ื•ื™ื™ึทืœ ... ืขืก ืื™ื– ื’ืึธืจื ื™ืฉื˜ ื˜ืฉื™ืงืึทื•ื•ืข ื“ืึธืจื˜ ืคึฟืึทืจ ื“ื™ ื˜ืขืžืข ืื™ืŸ ืงืฉื™ื, ืึธื‘ืขืจ ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ื–ื™ื™ ืื™ืŸ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื– ืคึฟืึทืจ ื“ืขื ืึทืจื˜ื™ืงืœ.

ืœืขืฆื˜ ืคืึทืจื‘ื™ื ื“ืŸ

ื–ื™ื ื˜ ื•ื•ืึธืจืฃ ื•ื•ืขืจืกื™ืขืก ื–ืขื ืขืŸ ืจืขืœืขืึทืกืขื“ ื’ืึทื ืฅ ืึธืคื˜, ื ื™ื™ึทืข ื‘ื™ืœื“ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื‘ื•ื™ื˜ ืึธืคื˜, ืื•ืŸ ื“ื™ ื“ืึธืงืงืขืจ ืจืขื’ื™ืกื˜ืจื™ ื•ื•ืขื˜ ืงืขืกื™ื™ื“ืขืจ ื•ื•ืึทืงืกืŸ. ื“ืขืจื™ื‘ืขืจ, ืขืก ืื™ื– ื™ืžืคึผืขืจืึทื˜ื™ื•ื• ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืึธื˜ืึทืžืึทื˜ื™ืง ื‘ื™ืœื“ ืงืœื™ื ืึทืคึผ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืคึผืึทืœืึทืกื™ื–. ืขืก ืื™ื– ื–ื™ื™ืขืจ ื’ืจื™ื ื’ ืฆื• ื˜ืึธืŸ.

ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืื™ืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ:

  • ืœื™ื™ื’ ืึท ืจื™ื™ื ื™ืงื•ื ื’ ืฉืจื™ื˜ ืฆื• .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

ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขื–ืขืŸ ื›ึผืžืขื˜ ืึทืœืข ื“ืขื ืึท ื‘ื™ืกืœ ื”ืขื›ืขืจ - ื ืึธืจ ืฆื• ืจื™ื™ืŸ ืขืก ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืขืจืฉื˜ืขืจ ืงืœืึธืฅ ืื™ืŸ ืฆื• ื“ื™ ื“ืึธืงืงืขืจ ืจืขื’ื™ืกื˜ืจื™ ืžื™ื˜ ืึท ืกื™ืžืขืŸ ื•ื•ืึธืก ื”ืื˜ ื“ื™ ืจืขื›ื˜ ืฆื• ื•ื™ืกืžืขืงืŸ ื‘ื™ืœื“ืขืจ ืื™ืŸ ื“ื™ ื“ืึธืงืขืจ ืจืขื’ื™ืกื˜ืจื™ (ื“ื™ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืืจื•ื™ืก GitLab CI ืึทืจื‘ืขื˜ ืกื™ืžืขืŸ ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืึทื–ืึท ืจืขื›ื˜). ื“ืขืจ ืกื™ืžืขืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ ืื™ืŸ GitLab ืื™ืŸ ืฉื˜ื™ื™ึทื’ืŸ ืื•ืŸ ื–ื™ื™ืŸ ื•ื•ืขืจื˜ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง WERF_IMAGES_CLEANUP_PASSWORD ื“ื™ ืคึผืจื•ื™ืขืงื˜ (ืกื™ / ืกื™ ืกืขื˜ื˜ื™ื ื’ืก -> ื•ื•ืขืจื™ืึทื‘ืึทืœื–).

ืึทื“ื™ื ื’ ืึท ืจื™ื™ื ื™ืงื•ื ื’ ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ ืคืืจืœืื ื’ื˜ ืคึผืœืึทืŸ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื™ืŸ ืกื™ / ืกื™ ->
ื‘ืืฉื˜ื™ืžื˜ืข ืฆื™ื™ื˜ืŸ
.

ืึทื– ืก ืขืก: ืึท ืคึผืจื•ื™ืขืงื˜ ืื™ืŸ ื“ื™ ื“ืึธืงืขืจ ืจืขื’ื™ืกื˜ืจื™ ื•ื•ืขื˜ ื ื™ื˜ ืžืขืจ ืงืขืกื™ื™ื“ืขืจ ื•ื•ืึทืงืกืŸ ืคึฟื•ืŸ ืึทื ื™ื•ื–ื“ ื‘ื™ืœื“ืขืจ.

ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ื™ ืคึผืจืึทืงื˜ื™ืฉ ื˜ื™ื™ืœ, ืœืึธื–ืŸ ืžื™ืจ ื“ืขืจืžืึธื ืขืŸ ืื™ืจ ืึทื– ืคื•ืœ ืœื™ืกื˜ื™ื ื’ืก ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื ืื™ืŸ ื’ื™ื™ืŸ:

ื˜ืึทื›ืœืขืก

  1. ืžื™ืจ ื‘ืืงื•ืžืขืŸ ืึท ืœืึทื“ื–ืฉื™ืงืึทืœ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืกื˜ืจื•ืงื˜ื•ืจ: ืื™ื™ืŸ ืึทืจื˜ืึทืคืึทืงื˜ ืคึผืขืจ ื•ื•ืขืจืกื™ืข.
  2. ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืื™ื– ื•ื ื™ื•ื•ืขืจืกืึทืœ ืื•ืŸ ื˜ื•ื˜ ื ื™ืฉื˜ ื“ืึทืจืคืŸ ืžืึทื ื•ืึทืœ ืขื ื“ืขืจื•ื ื’ืขืŸ ื•ื•ืขืŸ ื ื™ื™ึท ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื•ื•ืึธืจืฃ ื–ืขื ืขืŸ ืจืขืœืขืึทืกืขื“: ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ื™ืฃ ื“ืขืจ ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ืื™ื– ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜.
  3. ืฆื•ื•ื™ื™ ื‘ื™ืœื“ืขืจ ื–ืขื ืขืŸ ืคืืจื–ืืžืœื˜ ืคึฟืึทืจ ืคืึทืจืฉื™ื“ืขื ืข ืงืึทื ื˜ื•ืจื–.
  4. ืขืก ืึทืจื‘ืขื˜ ื’ืขืฉื•ื•ื™ื ื“, ื•ื•ื™ื™ึทืœ ืงืึทื˜ืฉื™ื ื’ ืื™ื– ื’ืขื ื•ืฆื˜ ื•ื•ื™ ืคื™ืœ ื•ื•ื™ ืžืขื’ืœืขืš - ื•ื•ืขืŸ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื•ื•ืขืจ ืื™ื– ื‘ืืคืจื™ื™ื˜ ืึธื“ืขืจ ืึท GitHub ื›ืึธืง ืื™ื– ื’ืขืจื•ืคึฟืŸ ืคึฟืึทืจ ืึท ืจืขืฆืขื ื–ื™ืข ื™ื‘ืขืจื’ืขื‘ืŸ, ื‘ืœื•ื™ื– ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืึทืจื˜ืึทืคืึทืงื˜ ืžื™ื˜ ื“ื™ ื˜ืฉื™ื™ื ื“ื–ืฉื“ ื•ื•ืขืจืกื™ืข ืื™ื– ืจื™ื‘ื™ืœื˜.
  5. ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ืจืึทื›ื˜ืŸ ื•ื•ืขื’ืŸ ื•ื™ืกืžืขืงืŸ ืึทื ื™ื•ื–ื“ ื‘ื™ืœื“ืขืจ: ืจื™ื™ื ื™ืงื•ื ื’ ืœื•ื™ื˜ ื•ื•ืขืจืฃ ืคึผืึทืœืึทืกื™ื– ื•ื•ืขื˜ ื”ืึทืœื˜ืŸ ื“ื™ ื“ืึธืงืงืขืจ ืจืขื’ื™ืกื˜ืจื™ ืื™ืŸ ืกื“ืจ.

ืคื™ื™ื ื“ื™ื ื’ื–

  • ื ื™ืฆืŸ werf ืึทืœืึทื•ื– ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ืฆื• ืึทืจื‘ืขื˜ืŸ ื’ืขืฉื•ื•ื™ื ื“ ืจืขื›ื˜ ืฆื• ืงืึทื˜ืฉื™ื ื’ ืคื•ืŸ ื‘ื™ื™ื“ืข ื“ื™ ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื–ื™ืš ืื•ืŸ ืงืึทื˜ืฉื™ื ื’ ื•ื•ืขืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื–.
  • ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง Git ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื– ื™ืœื™ืžืึทื ื™ื™ืฅ ื“ื™ ื ื•ื™ื˜ ืฆื• ืงืœืึธื•ืŸ ื“ื™ ื’ืื ืฆืข ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ื™ืขื“ืขืจ ืžืึธืœ ืึธื“ืขืจ ืจื™ื™ื ื•ื•ืขื ื˜ ื“ื™ ืจืึธื“ ืžื™ื˜ ื˜ืจื™ืงื™ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ ืœืึธื’ื™ืง. werf ื ื™ืฆื˜ ืึท ืงืึทืฉ ืื•ืŸ ื˜ื•ื˜ ื“ื™ ืงืœืึธื•ื ื™ื ื’ ื‘ืœื•ื™ื– ืึทืžืึธืœ, ืื•ืŸ ื“ืขืžืึธืœื˜ ื ื™ืฆื˜ fetch ืื•ืŸ ื ืึธืจ ื•ื•ืขืŸ ื ื™ื™ื˜ื™ืง.
  • ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื ื•ืฆืŸ Go ื˜ืขืžืคึผืœืึทื˜ืขืก ืื™ืŸ ื“ื™ ื‘ื•ื™ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข werf.yaml ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืึท ืคึฟืึทืจื–ืึทืžืœื•ื ื’ ื•ื•ืขืžืขื ืก ืจืขื–ื•ืœื˜ืึทื˜ ื“ืขืคึผืขื ื“ืก ืื•ื™ืฃ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ืึทื˜ืŸ.
  • ื ื™ืฆืŸ ืึธื ืงืœืึทืคึผืŸ ืื™ืŸ ื•ื•ืึธืจืฃ ื‘ืื˜ื™ื™ื˜ื™ืง ืกืคึผื™ื“ื– ื“ื™ ื–ืึทืžืœื•ื ื’ ืคื•ืŸ ืึทืจื˜ืึทืคืึทืงืฅ - ืจืขื›ื˜ ืฆื• ื“ืขืจ ืงืึทืฉ, ื•ื•ืึธืก ืื™ื– ืคึผืจืึธืกื˜ ืคึฟืึทืจ ืึทืœืข ืคึผื™ื™ืคึผืœื™ื™ื ื–.
  • werf ืžืื›ื˜ ืขืก ื’ืจื™ื ื’ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืงืœื™ื ืึทืคึผ, ื•ื•ืึธืก ืื™ื– ืกืคึผืขืฆื™ืขืœ ื•ื•ื™ื›ื˜ื™ืง ื•ื•ืขืŸ ื“ื™ื ืึทืžื™ืง ื‘ื ื™ืŸ.

ืคึผืก

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’