เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง เปเบฅเบฐเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบš Docker เบ”เป‰เบงเบ werf เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเป€เบญเบเบฐเบชเบฒเบ™เบชเบฐเบšเบฑเบš

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบท GitOps เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡. werf, เปเบฅเบฐเบ„เบฑเป‰เบ‡เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบขเบฒเบเปเบšเปˆเบ‡เบ›เบฑเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ”เป‰เบงเบเป€เบญเบเบฐเบชเบฒเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เป€เบญเบ‡ - werf.io (เบชเบฐเบšเบฑเบšเบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบเปเบกเปˆเบ™ en.werf.io). เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเบฐเบ–เบดเบ” เบ—เบณ เบกเบฐเบ”เบฒ, เปเบ•เปˆเบเบฒเบ™เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบกเบฑเบ™เบกเบตเบ„เบงเบฒเบก เปœเป‰เบฒ เบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰ เบˆเบณ เบ™เบงเบ™เบ‚เบญเบ‡เบ›เบญเบก.

เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง เปเบฅเบฐเบเบฒเบ™เบ™เบณเปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบš Docker เบ”เป‰เบงเบ werf เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเป€เบญเบเบฐเบชเบฒเบ™เบชเบฐเบšเบฑเบš

เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ nuances เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒ: เบเบฒเบ™เบชเป‰เบฒเบ‡เป€เบกเบ™เบนเบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบฎเบธเปˆเบ™, เบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบ, เปเบฅเบฐเบญเบทเปˆเบ™เป†. - เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆ. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบธเบกเปƒเบชเปˆเบšเบฑเบ™เบซเบฒเปเบฅเบฐเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบšเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเปเบฅเบฐเป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ CI / CD เบ—เบตเปˆเบกเบฒเบžเป‰เบญเบกเบเบฑเบš.

เปเบ™เบฐเบ™เปเบฒ: เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”

เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ, เป€เบญเบเบฐเบชเบฒเบ™ werf เปเบกเปˆเบ™เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบžเป‰เบญเบกเบเบฑเบšเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™. เบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเป€เบเบตเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เปเบ•เปˆเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเป„เบ”เป‰เบงเปˆเบฒ:

  • เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบซเบกเปˆเบ‚เบญเบ‡ werf เบšเปเปˆเบ„เบงเบ™เบˆเบฐเบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เป€เบญเบเบฐเบชเบฒเบ™เปเบฅเบฐ, เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ”เป†เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบซเบกเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบ›เปˆเบญเบ werf เบฎเบธเปˆเบ™เปƒเบซเบกเปˆ;
  • เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบเปˆเบฒเบงโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบฑเป‰เบกโ€‹เปเบ‚เบ‡โ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ—เปเบฒโ€‹: เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบญเบญเบโ€‹เป„เบ”เป‰โ€‹เบซเบผเบฒเบโ€‹เบ„เบฑเป‰เบ‡โ€‹เบ•เปเปˆโ€‹เบกเบทเป‰โ€‹;
  • เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบนเปˆเบกเบทเปƒเบ”เป†เป€เบžเบทเปˆเบญเบ™เปเบฒเป„เบ›เปƒเบŠเป‰เป€เบงเบฑเบšเป„เบŠเบ—เบตเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเปเบกเปˆเบ™เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ tedious;
  • เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒเบงเบดเบ—เบตเบเบฒเบ™ semantic เบชเบฐเบšเบฑเบš, เบกเบต 5 เบŠเปˆเบญเบ‡เบชเบฐเบ–เบฝเบ™เบฅเบฐเบžเบฒเบš. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ›เปˆเบญเบเบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบฎเบธเปˆเบ™เบœเปˆเบฒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™: เบˆเบฒเบ alpha เบเบฑเบš rock-solid;
  • เป€เบงเบฑเบšเป„เบŠเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบกเบตเบชเบฐเบšเบฑเบšเบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ, เป€เบŠเบดเปˆเบ‡ "เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”เปเบฅเบฐเบžเบฑเบ”เบ—เบฐเบ™เบฒ" (i.e. เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡) เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบเบฑเบšเบชเบฐเบšเบฑเบšเบžเบฒเบชเบฒเบ•เบปเป‰เบ™เบ•เป (i.e. เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”).

เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบ‡ "เป€เบฎเบทเบญเบ™เบ„เบปเบงเบžเบฒเบเปƒเบ™" เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบˆเบฒเบเบœเบนเป‰เปƒเบŠเป‰, เบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบฅเบฒเบงเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆ "เบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เบงเบฝเบ", เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ” เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ•เบดเบ”เบ•เบฑเป‰เบ‡ เปเบฅเบฐเบญเบฑเบšเป€เบ”เบ” werf เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ - เบ™เบตเป‰โ€‹เปเบกเปˆเบ™ multiwerf. เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบฐเบšเบธเบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบ›เปˆเบญเบเปเบฅเบฐเบŠเปˆเบญเบ‡เบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰, เปเบฅเบฐ multiwerf เบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเปƒเบ™เบŠเปˆเบญเบ‡เปเบฅเบฐเบ”เบฒเบงเป‚เบซเบฅเบ”เบกเบฑเบ™เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™.

เปƒเบ™เป€เบกเบ™เบนเบเบฒเบ™เบ„เบฑเบ”เป€เบฅเบทเบญเบเบชเบฐเบšเบฑเบšเบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒ, เบชเบฐเบšเบฑเบšเบซเบฅเป‰เบฒเบชเบธเบ”เบ‚เบญเบ‡ werf เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™เปเบ•เปˆเบฅเบฐเบŠเปˆเบญเบ‡เบ—เบฒเบ‡. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ•เบฒเบกเบ—เบตเปˆเบขเบนเปˆ werf.io/documentation เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเบซเบฅเป‰เบฒเบชเบธเบ”เป€เบ›เบตเบ” - เบกเบฑเบ™เบเบฑเบ‡เบ–เบทเบเบ”เบฑเบ”เบชเบฐเบ™เบตเป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบŠเบญเบเบซเบฒ. เป€เบญเบเบฐเบชเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ (เบ•เบปเบงเบขเปˆเบฒเบ‡, werf.io/v1.0-beta/documentation เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเป€เบšเบ•เป‰เบฒ 1.0).

เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบกเบตเบชเบฐเบšเบฑเบšเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰:

  1. เบฎเบฒเบ (เป€เบ›เบตเบ”เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™),
  2. เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบŠเปˆเบญเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบเบฒเบ™เบ›เปˆเบญเบ (เบ•เบปเบงเบขเปˆเบฒเบ‡: werf.io/v1.0-beta).

เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฐเบšเบฑเบšเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒ, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบกเบกเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ Jekyllเป‚เบ”เบเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต /docs werf repository เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบชเบญเบ”โ€‹เบ„เป‰เบญเบ‡โ€‹เบเบฑเบ™ (jekyll build), เบซเบผเบฑเบ‡เบˆเบฒเบเบชเบฐเบซเบผเบฑเบšเบเบฑเบšเปเบ—เบฑเบ Git เบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™.

เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเป€เบžเบตเปˆเบกเบงเปˆเบฒ:

  • เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡ (werf) เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบš;
  • เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ CI/CD เปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบšเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ GitLab CI;
  • เปเบฅเบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰, เปเบ™เปˆเบ™เบญเบ™, เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™ Kubernetes.

เบงเบฝเบเบ‡เบฒเบ™

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เปœเป‰เบฒเบงเบฝเบเบ—เบตเปˆเบ„เบณเบ™เบถเบ‡เป€เบ–เบดเบ‡เบชเบฐเป€เบžเบฒเบฐเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰:

  1. เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฐเบšเบฑเบš werf เปƒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปƒเบ”เป† เป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.
  2. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฒเบกเบฒเบ”เบšเบฒเบ‡เบ„เบฑเป‰เบ‡ เป€เบšเบดเปˆเบ‡เบชเบฐเบšเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒ.

เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ„เบทเบ™เปƒเบซเบกเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฐเบšเบฑเบšเปƒเบ™เบŠเปˆเบญเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเบˆเบฒเบ tags Git เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™, เปเบ•เปˆเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเปƒเบ™เบŠเปˆเบญเบ‡เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เป€เบญเบเบฐเบชเบฒเบ™เปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบŠเปˆเบญเบ‡เบ—เบตเปˆเบชเบฐเบšเบฑเบšเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบšเปเปˆเบ‡เบฒเบกเบซเบผเบฒเบ.
  • เบŠเบธเบ”เบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเบญเบฒเบ”เบˆเบฐเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เปƒเบ™เบšเบฒเบ‡เป€เบงเบฅเบฒ, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเบตเบชเบฐเบšเบฑเบšเบขเบนเปˆเปƒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เบเบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบญเบ 1.1 เบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ•เบปเป‰เบ™, เปเบ•เปˆเป€เบกเบทเปˆเบญเป€เบงเบฅเบฒเบœเปˆเบฒเบ™เป„เบ›เบžเบงเบเบกเบฑเบ™เบˆเบฐเบ›เบฒเบเบปเบ” - เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เป€เบˆเบปเป‰เบฒเบšเปเปˆเบ„เบงเบ™เบ›เปˆเบฝเบ™เป€เบ„เบทเปˆเบญเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบšเป?

เบกเบฑเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ เบเบฒเบ™เบ›เบฐเบเบญเบšเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบ.

ะ ะตะฐะปะธะทะฐั†ะธั

เบเบฒเบ™เป€เบฅเบทเบญเบเบงเบดเบ—เบตเบเบฒเบ™

เบญเบตเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบญเบตเป‰เบ™เปƒเบŠเป‰เปเบ•เปˆเบฅเบฐเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ›เบฑเบ™ pod เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปƒเบ™ Kubernetes. เบ•เบปเบงเป€เบฅเบทเบญเบเบ™เบตเป‰เบซเบกเบฒเบเป€เบ–เบดเบ‡เบˆเปเบฒเบ™เบงเบ™เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเปƒเบซเบเปˆเบเบงเปˆเบฒเปƒเบ™เบเบธเปˆเบก, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบ•เบตเบšเป‚เบ•เบžเป‰เบญเบกเบเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบ›เปˆเบญเบ werf เบ—เบตเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡. เปเบฅเบฐเบ™เบตเป‰, เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบซเบกเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบšเปเบฒเบฅเบธเบ‡เบฎเบฑเบเบชเบฒเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ: เปเบ•เปˆเบฅเบฐเบชเบฐเบšเบฑเบšเบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ HTTP เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เปเบฅเบฐเบกเบตเบเบฒเบ™เป‚เบซเบผเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ. เปเบ™เปˆเบ™เบญเบ™, เบ™เบตเป‰เบเบฑเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเป€เบเบปเปˆเบฒ.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป„เบ›เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™ เบ›เบฐเบเบญเบšเบ—เบธเบเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เบฎเบนเบšเบ”เบฝเบง. เบชเบฐเบ–เบดเบ”เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเบ‚เบญเบ‡เบ—เบธเบเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒเปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ–เบฑเบ‡เบ—เบตเปˆเบกเบต NGINX, เปเบฅเบฐเบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปเบกเปˆเบ™เบœเปˆเบฒเบ™ NGINX Ingress. เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ - เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบฅเบฑเบ” - เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เป„เบ”เป‰เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™ (เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”) เป‚เบ”เบเปƒเบŠเป‰ Kubernetes เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡.

เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™เบซเบผเบฒเบเบ‚เบถเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป€เบเบฑเบšเบเปเบฒเบชเบญเบ‡เบฎเบนเบšเบžเบฒเบš: เบซเบ™เบถเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบงเบปเบ‡เบˆเบญเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบฎเบนเบšเบžเบฒเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบšเบงเบปเบ‡เบˆเบญเบ™ dev. เบฎเบนเบšเบžเบฒเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ (เป€เบ›เบตเบ”เบ•เบปเบง) เบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบงเบปเบ‡เบˆเบญเบ™ dev เบฎเปˆเบงเบกเบเบฑเบ™เบเบฑเบšเบซเบ™เบถเปˆเบ‡เบ•เบปเป‰เบ™เบ•เปเปเบฅเบฐเบกเบตเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบˆเบฒเบเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™ commit, เปเบฅเบฐเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบžเบงเบเบกเบฑเบ™เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ Ingress.

werf vs git clone เปเบฅเบฐเบ›เบญเบก

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง, เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบฐเบ–เบดเบ”เบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบชเปเบฒเบฅเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™เบชเบฐเบšเบฑเบšเบชเบฐเป€เบžเบฒเบฐ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เป‚เบ”เบเบเบฒเบ™เบ›เปˆเบฝเบ™เป„เบ›เบซเบฒเปเบ—เบฑเบš repository เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก. เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เป‚เบ„เบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡, เป€เบฅเบทเบญเบเปเบ—เบฑเบเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบซเบผเบฒเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบซเบผเบฒเบเปเบฅเบฐ, เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ‚เบฝเบ™เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ ... เบ‚เปเป‰เป€เบชเบเบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบญเบตเบเบขเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบšเปเปˆเบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐ cache เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบš.

เบ—เบตเปˆเบ™เบตเป‰เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ” werf เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบกเบฒเบเบฑเบšเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ เปเบฅเบฐโ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹ repositories เบžเบฒเบเบ™เบญเบ. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ werf เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบฅเบฐเบซเบฑเบ”เบˆเบฒเบ repository เบˆเบฐเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ, เป€เบžเบฒเบฐเบงเปˆเบฒ werf เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™ clones repository เบ„เบฑเป‰เบ‡เบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ›เบฐเบ•เบดเบšเบฑเบ” เบžเบฝเบ‡เปเบ•เปˆ fetch เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเป€เบžเบตเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ repository, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ™เบตเป‰เปเบกเปˆเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. docs), เป€เบŠเบดเปˆเบ‡เบˆเบฐเบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบก.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ Jekyll เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบญเบญเบเปเบšเบšเบกเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ–เบดเบ”เปเบฅเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เบฎเบนเบšเบžเบฒเบšเบชเบธเบ”เบ—เป‰เบฒเบ, เบกเบฑเบ™เบˆเบฐเบกเบตเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบ™. werf เบ›เบญเบก, เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเบชเบธเบ”เบ—เป‰เบฒเบ เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.

เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™ werf.yaml

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบฅเบงเบšเบฅเบงเบกเปเบ•เปˆเบฅเบฐเบชเบฐเบšเบฑเบšเปƒเบ™ artifact werf เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบกเบžเบงเบเป€เบฎเบปเบฒ เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เบฎเบนเป‰โ€‹เบˆเบฑเบโ€‹เบงเบฑเบ”โ€‹เบ–เบธโ€‹เบšเบนโ€‹เบฎเบฒเบ™โ€‹เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบŠเบธเบก, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ„เบปเบ‡เบ—เบตเปˆ (เป€เบงเบปเป‰เบฒเบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบšเปเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบฑเบ‡เบซเบกเบปเบ”).

werf เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เป„เบ›เปเบšเบš เปƒเบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™ (werf.yaml), เปเบฅเบฐเบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ เบชเป‰เบฒเบ‡ config เบชเบธเบ”เบšเบดเบ™ เบญเบตเบ‡เบ•เบฒเบกเบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบ (เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™!). เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบšเบฑเบšเปเบฅเบฐเบเบฒเบ™เบ›เปˆเบญเบ, เบšเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒเบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ›เบญเบกเปเบฅเบฐเบœเบปเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบชเบญเบ‡เบฎเบนเบšเบžเบฒเบš: 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 โ€” hash เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบปเบšโ€‹เบ—เบงเบ™โ€‹เบ„เบทเบ™โ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบชเป‰เบฒเบ‡โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™ loop เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹.

เบ•เบปเบงเปเบ›เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบ–เบทเบเบ•เบทเปˆเบกเปƒเบชเปˆเปƒเบ™เบ—เปเปˆ GitLab CI, เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เปเบกเปˆเบ™เบ‚เบฝเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบ, เบžเบงเบเป€เบฎเบปเบฒ เบเบณ เบ™เบปเบ”เปƒเบ™ werf.yaml เป„เบ›โ€‹เบ—เบตเปˆโ€‹เบ•เบปเบงโ€‹เปเบ›โ€‹เปเบกเปˆโ€‹เปเบšเบšโ€‹, เบเบฒเบ™โ€‹เบกเบญเบšโ€‹เบซเบกเบฒเบโ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ„เปˆเบฒโ€‹เบˆเบฒเบโ€‹เบ•เบปเบงโ€‹เปเบ›โ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹:

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

เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบ‡เบ›เบญเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบชเบฐเบšเบฑเบš static เบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ (เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบชเบฐเบšเบฑเบšเบฎเบฒเบ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบฐเบšเบฑเบšเบชเปเบฒเบฅเบฑเบšเบงเบปเบ‡เบˆเบญเบ™ dev). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเป‰เบฒเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเบฅเบฑเบญเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเป‚เบ”เบเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ define - เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ•เปเปˆโ€‹เบกเบฒโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹ include. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป„เบ›เบซเบฒเปเบกเปˆเปเบšเบš:

  • Version โ€” เบชเบฐโ€‹เบšเบฑเบšโ€‹เบœเบฐโ€‹เบฅเบดเบ” (เบŠเบทเปˆโ€‹เป‚เบ„เบ”โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹)โ€‹;
  • Channel โ€” เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบŠเปˆเบญเบ‡โ€‹เบ—เบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบ›เบญเบกโ€‹;
  • Commit โ€” เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒ hashโ€‹, เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ›เบญเบกโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบชเป‰เบฒเบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เบเบฒเบ™โ€‹เบ—เบปเบšโ€‹เบ—เบงเบ™โ€‹เบ„เบทเบ™โ€‹;
  • เบชเบฐเบžเบฒเบšเบเบฒเบ™.

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปเบกเปˆเปเบšเบš Artifact

{{- 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 cache เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เปเบฅเปˆเบ™เบ—เปเปˆ, เป€เบŠเบดเปˆเบ‡ เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบšเบ„เบทเบ™เปƒเปเปˆเบขเปˆเบฒเบ‡เปƒเบซเบเปˆเบซเบผเบงเบ‡.

เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง releases.yml เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒ YAML เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ›เปˆเบญเบเบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เปเบˆเบฒเบ githubcom (เบ‚เบญเบ‡เบ›เบญเบกเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เปเปˆ). เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเป€เบงเบฑเบšเป„เบŠเบ—เปŒ, เปเบ•เปˆเปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบกเบฑเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบฅเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™. reassembly เบ‚เบญเบ‡เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡ artifact โ€” เบ›เบญเบกโ€‹เบ‚เบญเบ‡โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบฎเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เป€เบงเบฑเบšโ€‹เป„เบŠโ€‹เป„เบ”เป‰ (เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบ›เบญเบกโ€‹เบญเบทเปˆเบ™เป†โ€‹)โ€‹.

เบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ if เป„เบ›เปเบšเบšเปเบฅเบฐเปเบšเบš {{ $Root.Files.Get "releases.yml" | sha256sum }} เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™ เป„เบฅเบเบฐ. เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰: เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”เบชเปเบฒเบฅเบฑเบšเบชเบฐเบšเบฑเบšเบฎเบฒเบ (เบ•เบปเบงเปเบ› .Channel เป€เบ—เบปเปˆเบฒโ€‹เบ—เบฝเบกโ€‹เบเบฑเบ™โ€‹เบเบฑเบš root) เป„เบŸเบฅเปŒ hash releases.yml เบกเบตโ€‹เบœเบปเบ™โ€‹เบเบฐโ€‹เบ—เบปเบšโ€‹เบฅเบฒเบโ€‹เป€เบŠเบฑเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹, เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบชเปˆเบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™ Ansible (เบžเบฒโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบเบฒเบ™โ€‹ name). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ เป€เบ™เบทเป‰เบญเปƒเบ™ เป„เบŸเบฅ releases.yml เบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เบฐเบเบญเบšเบ„เบทเบ™เปƒเปเปˆ.

เบเบฐเบฅเบธเบ™เบฒเปƒเบชเปˆเปƒเบˆเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš repository เบžเบฒเบเบ™เบญเบ. เปƒเบ™เบฎเบนเบšเบ‚เบญเบ‡เบ›เบญเบกเบˆเบฒเบ werf repository, เบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ–เบทเบเป€เบžเบตเปˆเบก /docs, เปเบฅเบฐเบ‚เบถเป‰เบ™เบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบœเปˆเบฒเบ™, เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เปเบ—เบฑเบเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบซเบผเบทเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเบ—เบฑเบ™เบ—เบต.

เป€เบžเบทเปˆเบญเปƒเบŠเป‰เปเบกเปˆเปเบšเบšเบ‚เบญเบ‡ artifact เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡ artifact เบ‚เบญเบ‡เบŠเปˆเบญเบ‡เปเบฅเบฐเบเบฒเบ™เบ›เปˆเบญเบเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบ–เบทเบเป‚เบญเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบฅเบฝเบ‡ loop เปƒเบ™เบ•เบปเบงเปเบ›. .WerfVersions ะฒ werf.yaml:

{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}}

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ loop เบˆเบฐเบชเป‰เบฒเบ‡เบ›เบญเบกเบซเบผเบฒเบ (เบžเบงเบเป€เบฎเบปเบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™), เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบ•เบปเบงเปเบเบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบžเบงเบเป€เบ‚เบปเบฒ - เบฅเปเบฒเบ”เบฑเบš. --- (เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš syntax เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เป€เบšเบดเปˆเบ‡ เป€เบญเบเบฐเบชเบฒเบ™). เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เป„เบงเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป€เบกเบทเปˆเบญเป‚เบ—เบซเบฒเปเบกเปˆเปเบšเบšเปƒเบ™ loop, เบžเบงเบเป€เบฎเบปเบฒเบœเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเบฐเบšเบฑเบš, URL เปเบฅเบฐเป€เบ™เบทเป‰เบญเบซเบฒเบฎเบฒเบ.

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เปเบ•เปˆเบšเปเปˆเบกเบต loop, เบžเบงเบเป€เบฎเบปเบฒเป‚เบ—เบซเบฒเปเบกเปˆเปเบšเบšเบ‚เบญเบ‡เบ›เบญเบกเบชเปเบฒเบฅเบฑเบš "เบเปเบฅเบฐเบ™เบตเบžเบดเป€เบชเบ”": เบชเปเบฒเบฅเบฑเบšเบชเบฐเบšเบฑเบšเบฎเบฒเบ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบฐเบšเบฑเบšเบˆเบฒเบเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ:

{{ 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 }}

เบเบฐโ€‹เบฅเบธโ€‹เบ™เบฒโ€‹เบชเบฑเบ‡โ€‹เป€เบเบ”โ€‹เบงเปˆเบฒ artifact เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เบเบฒเบ™โ€‹เบ—เบปเบšโ€‹เบ—เบงเบ™โ€‹เบ„เบทเบ™โ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ•เบปเบงโ€‹เบ›เปˆเบฝเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ•เบฑเป‰เบ‡โ€‹เป„เบงเป‰โ€‹ .WerfReviewCommit.

เบงเบฑเบ”เบ–เบธเบšเบนเบฎเบฒเบ™เปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบก - เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ!

เบฎเบนเบšเบžเบฒเบšเบชเบธเบ”เบ—เป‰เบฒเบ, เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเปเบฅเปˆเบ™เปƒเบ™ Kubernetes, เปเบกเปˆเบ™ NGINX เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบžเบตเปˆเบกเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบŠเบตเบšเป€เบงเบต. nginx.conf เปเบฅเบฐ static เบˆเบฒเบ artifacts. เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบเบชเบดเปˆเบ‡เบ›เบญเบกเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบฎเบฒเบเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เป€เบฅเบทเป‰เบกเบ„เบทเบ™ loop เปƒเบ™เบ•เบปเบงเปเบ› .WerfVersions เป€เบžเบทเปˆเบญเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”เบ‚เบญเบ‡เบŠเปˆเบญเบ‡เปเบฅเบฐเบชเบฐเบšเบฑเบšเบญเบญเบ + เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบŠเบทเปˆเบ‚เบญเบ‡เบ›เบญเบกเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเบฑเบ”เบ–เบธเบšเบนเบฎเบฒเบ™เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเป€เบ›เบฑเบ™เบชเบญเบ‡เบžเบฒเบชเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ.

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบชเบธเบ”เบ—เป‰เบฒเบ werf-doc

image: werf-doc
from: nginx:stable-alpine
ansible:
  setup:
  - name: "Setup /etc/nginx/nginx.conf"
    copy:
      content: |
{{ .Files.Get ".werf/nginx.conf" | indent 8 }}
      dest: /etc/nginx/nginx.conf
  - file:
      path: "{{`{{ item }}`}}"
      state: directory
      mode: 0777
    with_items:
    - /app/main_site/assets
    - /app/ru_site/assets
import:
- artifact: doc-root
  add: /app/_main_site
  to: /app/main_site
  before: setup
- artifact: doc-root
  add: /app/_ru_site
  to: /app/ru_site
  before: setup
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
  add: /app/_main_site
  to: /app/main_site/v{{ $Channel }}
  before: setup
{{ end -}}
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
  add: /app/_ru_site
  to: /app/ru_site/v{{ $Channel }}
  before: setup
{{ end -}}

เบฎเบนเบšเบžเบฒเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เป€เบŠเบดเปˆเบ‡, เบšเบงเบเบเบฑเบšเบซเบ™เบถเปˆเบ‡เบ•เบปเป‰เบ™เบ•เป, เป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™เบงเบปเบ‡เบˆเบญเบ™ dev, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒ: เบชเบฐเบšเบฑเบšเบˆเบฒเบเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปเบฅเบฐเบชเบฐเบšเบฑเบšเบฎเบฒเบเบ‚เบญเบ‡เป€เบงเบฑเบšเป„เบŠเบ—เปŒ (เบกเบตเบŠเบฑเบšเบชเบดเบ™เบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐ, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบˆเบทเปˆ. , เบ›เปˆเบญเบเบ‚เปเป‰เบกเบนเบ™). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฎเบนเบšเบžเบฒเบšเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบ•เบปเป‰เบ™เบ•เปเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบžเบฒเบเบ™เปเบฒเป€เบ‚เบปเป‰เบฒ (เปเบฅเบฐ, เปเบ™เปˆเบ™เบญเบ™, เปƒเบ™เบŠเบทเปˆ):

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, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เปˆเบญเบเปƒเบซเป‰เบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเบเบฑเบš artifact เบฎเบธเปˆเบ™เบฎเบฒเบ (เบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปเบฅเป‰เบงเบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก), เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เปเปˆเบฅเบฝเบšเบ‡เปˆเบฒเบ.

เบเบฒเบ™เบŠเบธเบกเบ™เบธเบกเปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบก! เปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆ CI/CD เปเบฅเบฐ nuances เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™.

เบ—เปเปˆเปƒเบ™ GitLab CI เปเบฅเบฐเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง

เป€เบกเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™ werf.yaml. เบญเบฑเบ™เบ™เบตเป‰เบšเปเปˆเบ™เบณเปƒเบŠเป‰เบเบฑเบšเบ•เบปเบงเปเบ› REVIEW_SHA, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบฑเป‰เบ‡เป€เบกเบทเปˆเบญเป‚เบ—เบซเบฒเบ—เปเปˆเบˆเบฒเบ hook GitHub.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™ script Bash generate_artifacts, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบชเป‰เบฒเบ‡เบชเบญเบ‡เบชเบดเปˆเบ‡เบ›เบญเบกเบ‚เบญเบ‡เบ—เปเปˆ GitLab:

  • file releases.yml เบ”เป‰เบงเบโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเบฒเบ™โ€‹เบ›เปˆเบญเบโ€‹เบญเบญเบโ€‹เบกเบฒโ€‹,
  • file common_envs.sh, เบกเบตเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบญเบญเบ.

เป€เบ™เบทเป‰เบญเปƒเบ™เป„เบŸเบฅเปŒ generate_artifacts เป€เบˆเบปเป‰เบฒเบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ repositories เบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡. เบเบฒเบ™เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบšเปเปˆเปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก, เปเบ•เปˆเป„เบŸเบฅเปŒ 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 เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰. เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบ—เปเปˆเบ™เบฑเป‰เบ™เป€เบญเบ‡เป‚เบ”เบเปƒเบŠเป‰ hooks เบˆเบฒเบ werf GitHub repository (i.e., เป€เบกเบทเปˆเบญเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™ GitHub repository). เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เปƒเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™ GitLab เปƒเบ™เบžเบฒเบ เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CI/CD -> เบ—เปเปˆเบชเบปเปˆเบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเป‰เบฒเบ‡ Webhook เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปƒเบ™ GitHub (เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ -> 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 เบˆเบฐเป€เบžเบตเปˆเบกเบชเบญเบ‡เบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”เบˆเบฒเบเป€เบงเบ—เบตเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ เบชเป‰เบฒเบ‡เบเปˆเบญเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เบญเบญเบเบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฐเบเบฝเบกเป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ 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), เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก loop (environment.name ะธ environment.url), เป€เบŠเบดเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ Helm chart templates. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเปƒเบซเป‰เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เปเบกเปˆเปเบšเบš, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ ... เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบซเบปเบงเบ‚เปเป‰เปƒเบ™เบ„เปเบฒเบ–เบฒเบก, เปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบžเบงเบเบกเบฑเบ™เป„เบ”เป‰ repositories เบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบก.

เบเบฒเบ™เบชเปเบฒเบžเบฑเบ”เบชเบธเบ”เบ—เป‰เบฒเบ

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบชเบฐเบšเบฑเบš 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 เบ—เปเบฒเบญเบดเบ”เบ”เป‰เบงเบ token เบ—เบตเปˆเบกเบตเบชเบดเบ”เบ—เบดเปƒเบ™เบเบฒเบ™เบฅเบถเบšเบฎเบนเบšเบžเบฒเบšเปƒเบ™ Docker Registry (เป€เบ„เบทเปˆเบญเบ‡เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆ GitLab CI เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบญเบญเบเบšเปเปˆเป„เบ”เป‰. เบกเบตโ€‹เบชเบดเบ”โ€‹เบ”เบฑเปˆเบ‡โ€‹เบเปˆเบฒเบง). token เบ•เป‰เบญเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ GitLab เบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเปเบฅเบฐเบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก WERF_IMAGES_CLEANUP_PASSWORD เป‚เบ„เบ‡เบเบฒเบ™ (เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CI/CD -> เบ•เบปเบงเปเบ›).

เบเบฒเบ™เป€เบžเบตเปˆเบกเบงเบฝเบเบ‡เบฒเบ™เบ—เปเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปเบกเปˆเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™ CI/CD ->
เบ•เบฒเบ•เบฐเบฅเบฒเบ‡
.

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบกเบฑเบ™: เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ Docker Registry เบˆเบฐเบšเปเปˆเป€เบ•เบตเบšเป‚เบ•เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰.

เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบžเบฒเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เปเป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบงเปˆเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบกเบ—เบตเปˆเบˆเบฒเบเบšเบปเบ”เบ„เบงเบฒเบกเปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™ Git:

เบœเบปเบ™

  1. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบขเปˆเบฒเบ‡โ€‹เบกเบตโ€‹เป€เบซเบ”โ€‹เบœเบปเบ™โ€‹: เบซเบ™เบถเปˆเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบ›เบญเบกโ€‹เบ•เปเปˆโ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹.
  2. เบชเบฐเบžเบฒเปเบซเปˆเบ‡เปเบกเปˆเบ™เบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเบšเปเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ„เบนเปˆเบกเบทเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเบ‚เบญเบ‡ werf เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ: เป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.
  3. เบชเบญเบ‡เบฎเบนเบšเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบญเบšเบชเปเบฒเบฅเบฑเบš contours เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.
  4. เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เป„เบงเบงเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒ Caching เปเบกเปˆเบ™เปƒเบŠเป‰เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ - เป€เบกเบทเปˆเบญเบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเบ‚เบญเบ‡ werf เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเบซเบผเบท hook GitHub เป„เบ”เป‰เบ–เบทเบเป€เบญเบตเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™, เบžเบฝเบ‡เปเบ•เปˆเบชเบดเปˆเบ‡เบ›เบฐเบ”เบดเบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบเบฑเบšเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบซเบกเปˆ.
  5. เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฅเบถเบšเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰: เบเบฒเบ™เป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบ•เบฒเบกเบ™เบฐเป‚เบเบšเบฒเบ werf เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰ Docker Registry เบขเบนเปˆเปƒเบ™เบฅเปเบฒเบ”เบฑเบš.

เบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบš

  • เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ werf เบŠเปˆเบงเบเปƒเบซเป‰เบเบฒเบ™เบ›เบฐเบเบญเบšเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เป„เบงเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ—เบฑเบ‡เบเบฒเบ™เบ›เบฐเบเบญเบšเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปเบฅเบฐ caching เป€เบกเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบ.
  • เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ Git เบžเบฒเบเบ™เบญเบเบˆเบฐเบฅเบปเบšเบฅเป‰เบฒเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป‚เบ„เบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡เบซเบผเบทเบ›เบฑเบšเบ›เบธเบ‡เบฅเปเป‰เบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบซเบเบธเป‰เบ‡เบเบฒเบ. werf เปƒเบŠเป‰ cache เปเบฅเบฐเป€เบฎเบฑเบ” cloning เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบ”เบฝเบง, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ™เปเบฒเปƒเบŠเป‰ fetch เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™.
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เปƒเบŠเป‰เปเบกเปˆเปเบšเบš Go เปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ werf.yaml เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เบ›เบฐเบเบญเบšเบ—เบตเปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบ.
  • เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ mount เปƒเบ™ werf เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เบญเบ‡เบ›เบญเบก - เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ cache, เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™เบ—เบปเปˆเบงเป„เบ›เบเบฑเบšเบ—เปเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”.
  • werf เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง.

PS

เบญเปˆเบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster