เชตเชฐเซเชเชจเซเชก เชกเซ‹เช•เซเชฏเซเชฎเซ‡เชจเซเชŸเซ‡เชถเชจ เชธเชพเช‡เชŸเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเชพเชˆเชจเซ‡เชฎเชฟเช• เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช…เชจเซ‡ เชตเชฐเซเชซ เชธเชพเชฅเซ‡ เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเซ€เชธเชจเซ€ เชœเชฎเชพเชตเชŸ

เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ GitOps เชŸเซ‚เชฒ เชตเชฟเชถเซ‡ เชเช• เช•เชฐเชคเชพ เชตเชงเซ เชตเชพเชฐ เชตเชพเชค เช•เชฐเซ€ เชšเซ‚เช•เซเชฏเชพ เช›เซ€เช. เชตเชฐเซเชซ, เช…เชจเซ‡ เช† เชตเช–เชคเซ‡ เช…เชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชธเชพเชฅเซ‡ เชธเชพเช‡เชŸเชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชจเชพ เช…เชฎเชพเชฐเชพ เช…เชจเซเชญเชตเชจเซ‡ เชถเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช - werf.io (เชคเซ‡เชจเซเช‚ เชฐเชถเชฟเชฏเชจ เชธเช‚เชธเซเช•เชฐเชฃ เช›เซ‡ en.werf.io). เช† เชเช• เชธเชพเชฎเชพเชจเซเชฏ เชธเซเชฅเชฟเชฐ เชธเชพเช‡เชŸ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ€ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชฐเชธเชชเซเชฐเชฆ เช›เซ‡ เช•เซ‡ เชคเซ‡ เช•เชฒเชพเช•เซƒเชคเชฟเช“เชจเซ€ เช—เชคเชฟเชถเซ€เชฒ เชธเช‚เช–เซเชฏเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡.

เชตเชฐเซเชเชจเซเชก เชกเซ‹เช•เซเชฏเซเชฎเซ‡เชจเซเชŸเซ‡เชถเชจ เชธเชพเช‡เชŸเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเชพเชˆเชจเซ‡เชฎเชฟเช• เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช…เชจเซ‡ เชตเชฐเซเชซ เชธเชพเชฅเซ‡ เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเซ€เชธเชจเซ€ เชœเชฎเชพเชตเชŸ

เชธเชพเช‡เชŸ เชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ€ เช˜เซ‹เช‚เช˜เชพเชŸเชฎเชพเช‚ เชœเชพเช“: เชฌเชงเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹, เชชเซเชฐเช•เชพเชถเชจเซ‹ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชธเชพเชฅเซ‡เชจเชพ เชชเซƒเชทเซเช เซ‹ เชตเช—เซ‡เชฐเซ‡ เชฎเชพเชŸเซ‡ เชเช• เชธเชพเชฎเชพเชจเซเชฏ เชฎเซ‡เชจเซ‚ เชฌเชจเชพเชตเชตเซเช‚. - เช…เชฎเซ‡ เชจเชนเซ€เช‚ เช•เชฐเซ€เช. เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เชšเชพเชฒเซ‹ เช—เชคเชฟเชถเซ€เชฒ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเชพ เชฎเซเชฆเซเชฆเชพเช“ เช…เชจเซ‡ เชฒเช•เซเชทเชฃเซ‹ เชชเชฐ เชงเซเชฏเชพเชจ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เช•เชฐเซ€เช เช…เชจเซ‡ เชธเชพเชฅเซ‡เชจเซ€ CI/CD เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชชเชฐ เชฅเซ‹เชกเซเช‚ เชงเซเชฏเชพเชจ เช†เชชเซ€เช.

เชชเชฐเชฟเชšเชฏ: เชธเชพเช‡เชŸ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡

เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, werf เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชคเซ‡เชจเชพ เช•เซ‹เชก เชธเชพเชฅเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช›เซ‡. เช† เช…เชฎเซเช• เชตเชฟเช•เชพเชธ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹ เชฒเชพเชฆเซ‡ เช›เซ‡ เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช† เชฒเซ‡เช–เชจเชพ เช…เชตเช•เชพเชถเชจเซ€ เชฌเชนเชพเชฐ เชนเซ‹เชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ เชเชตเซเช‚ เช•เชนเซ€ เชถเช•เชพเชฏ เช•เซ‡:

  • เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชจเชตเชพ werf เชซเช‚เช•เซเชถเชจเซเชธ เชฐเชฟเชฒเซ€เช เชจ เช•เชฐเชตเชพ เชœเซ‹เชˆเช เช…เชจเซ‡ เชคเซ‡เชจเชพเชฅเซ€ เชตเชฟเชชเชฐเชฟเชค, เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชตเชฐเซเชซเชจเชพ เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃเชจเชพ เชชเซเชฐเช•เชพเชถเชจเชจเซ‡ เชธเซ‚เชšเชฟเชค เช•เชฐเซ‡ เช›เซ‡;
  • เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชเช•เชฆเชฎ เชธเช˜เชจ เชตเชฟเช•เชพเชธ เช›เซ‡: เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชฆเชฟเชตเชธเชฎเชพเช‚ เช˜เชฃเซ€ เชตเช–เชค เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡;
  • เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชจเชพ เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เชธเชพเช‡เชŸเชจเซ‡ เชœเชฎเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆเชชเชฃ เชฎเซ‡เชจเซเชฏเซเช…เชฒ เช•เชพเชฎเช—เซ€เชฐเซ€ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซ€ เช•เช‚เชŸเชพเชณเชพเชœเชจเช• เช›เซ‡;
  • เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชฟเชฎเซ‡เชจเซเชŸเซ€เช• เช…เชญเชฟเช—เชฎ เช…เชชเชจเชพเชตเซ‡ เช›เซ‡ เชธเช‚เชธเซเช•เชฐเชฃ, 5 เชธเซเชฅเชฟเชฐเชคเชพ เชšเซ‡เชจเชฒเซ‹ เชธเชพเชฅเซ‡. เชชเซเชฐเช•เชพเชถเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชธเซเชฅเชฟเชฐเชคเชพ เชตเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชšเซ‡เชจเชฒเซ‹ เชฆเซเชตเชพเชฐเชพ เช†เชตเซƒเชคเซเชคเชฟเช“เชจเชพ เช•เซเชฐเชฎเชฟเช• เชฎเชพเชฐเซเช—เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡: เช†เชฒเซเชซเชพเชฅเซ€ เชฐเซ‹เช•-เชธเซ‹เชฒเชฟเชก เชธเซเชงเซ€;
  • เชธเชพเช‡เชŸเชฎเชพเช‚ เชฐเชถเชฟเชฏเชจ-เชญเชพเชทเชพเชจเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เช›เซ‡, เชœเซ‡ เชฎเซเช–เซเชฏ (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡, เช…เช‚เช—เซเชฐเซ‡เชœเซ€-เชญเชพเชทเชพ) เชธเช‚เชธเซเช•เชฐเชฃเชจเซ€ เชธเชฎเชพเช‚เชคเชฐเชฎเชพเช‚ "เชœเซ€เชตเช‚เชค เช…เชจเซ‡ เชตเชฟเช•เชพเชธ เช•เชฐเซ‡ เช›เซ‡" (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡, เชœเซ‡เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡).

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชชเชพเชธเซ‡เชฅเซ€ เช† เชฌเชงเซเช‚ "เช†เช‚เชคเชฐเชฟเช• เชฐเชธเซ‹เชกเซเช‚" เช›เซเชชเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡เชจเซ‡ "เชซเช•เซเชค เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡" เชเชตเซ€ เช•เช‚เชˆเช• เช“เชซเชฐ เช•เชฐเซ€, เช…เชฎเซ‡ เช•เชฐเซเชฏเซเช‚ เช…เชฒเช— เชตเซ‡เชฐเซเชซ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เช…เชจเซ‡ เช…เชชเชกเซ‡เชŸ เชŸเซ‚เชฒ เช›เซ‡ multiwerf. เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชชเซเชฐเช•เชพเชถเชจ เชจเช‚เชฌเชฐ เช…เชจเซ‡ เชธเซเชฅเชฟเชฐเชคเชพ เชšเซ‡เชจเชฒเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡เชจเซ‹ เชคเชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เช›เซ‹, เช…เชจเซ‡ เชฎเชฒเซเชŸเชฟเชตเชฐเซเชซ เชšเซ…เชจเชฒ เชชเชฐ เชจเชตเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชคเชชเชพเชธเชถเซ‡ เช…เชจเซ‡ เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‹ เชคเซ‡เชจเซ‡ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชถเซ‡.

เชตเซ‡เชฌเชธเชพเชˆเชŸ เชชเชฐ เชตเชฐเซเชเชจ เชธเชฟเชฒเซ‡เช•เซเชถเชจ เชฎเซ‡เชจเซ‚เชฎเชพเช‚, เชฆเชฐเซ‡เช• เชšเซ‡เชจเชฒเชฎเชพเช‚ werf เชจเชพ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เช‰เชชเชฒเชฌเซเชง เช›เซ‡. เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, เชธเชฐเชจเชพเชฎเชพ เชฆเซเชตเชพเชฐเชพ werf.io/documentation เชจเชตเซ€เชจเชคเชฎ เชชเซเชฐเช•เชพเชถเชจ เชฎเชพเชŸเซ‡ เชธเซŒเชฅเซ€ เชธเซเชฅเชฟเชฐ เชšเซ‡เชจเชฒเชจเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เช–เซเชฒเซ‡ เช›เซ‡ - เชคเซ‡ เชธเชฐเซเชš เชเชจเซเชœเชฟเชจ เชฆเซเชตเชพเชฐเชพ เชชเชฃ เช…เชจเซเช•เซเชฐเชฎเชฟเชค เช›เซ‡. เชšเซ‡เชจเชฒ เชฎเชพเชŸเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช…เชฒเช— เชธเชฐเชจเชพเชฎเชพเช‚ เชชเชฐ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, werf.io/v1.0-beta/documentation เชฌเซ€เชŸเชพ เชฐเชฟเชฒเซ€เช 1.0 เชฎเชพเชŸเซ‡).

เช•เซเชฒเชฎเชพเช‚, เชธเชพเช‡เชŸเชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เช‰เชชเชฒเชฌเซเชง เช›เซ‡:

  1. เชฐเซเชŸ (เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เช–เซเชฒเซ‡ เช›เซ‡),
  2. เชฆเชฐเซ‡เช• เชชเซเชฐเช•เชพเชถเชจเชจเซ€ เชฆเชฐเซ‡เช• เชธเช•เซเชฐเชฟเชฏ เช…เชชเชกเซ‡เชŸ เชšเซ‡เชจเชฒ เชฎเชพเชŸเซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, werf.io/v1.0-beta).

เชธเชพเช‡เชŸเชจเซเช‚ เชตเชฟเชถเชฟเชทเซเชŸ เชธเช‚เชธเซเช•เชฐเชฃ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡ เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡ เชœเซ‡เช•เชฟเชฒเชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชšเชฒเชพเชตเซ€เชจเซ‡ /docs werf เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เช…เชจเซเชฐเซ‚เชช เช†เชฆเซ‡เชถ (jekyll build), เชœเชฐเซ‚เชฐเซ€ เชธเช‚เชธเซเช•เชฐเชฃเชจเชพ Git เชŸเซ‡เช— เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซเชฏเชพ เชชเช›เซ€.

เชคเซ‡ เชซเช•เซเชค เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชฌเชพเช•เซ€ เช›เซ‡:

  • เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เชชเซ‹เชคเซ‡ (werf) เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡;
  • CI/CD เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ GitLab CI เชจเชพ เช†เชงเชพเชฐเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡;
  • เช…เชจเซ‡ เช† เชฌเชงเซเช‚, เช…เชฒเชฌเชคเซเชค, เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชšเชพเชฒเซ‡ เช›เซ‡.

เช•เชพเชฐเซเชฏเซ‹

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชเชตเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เชฐเชšเชจเชพ เช•เชฐเซ€เช เชœเซ‡ เชตเชฐเซเชฃเชตเซ‡เชฒ เชคเชฎเชพเชฎ เชตเชฟเชถเชฟเชทเซเชŸเชคเชพเช“เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡ เช›เซ‡:

  1. เช•เซ‹เชˆเชชเชฃ เช…เชชเชกเซ‡เชŸ เชšเซ‡เชจเชฒ เชชเชฐ werf เชธเช‚เชธเซเช•เชฐเชฃ เชฌเชฆเชฒเซเชฏเชพ เชชเช›เซ€ เชธเชพเช‡เชŸ เชชเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช†เชชเชฎเซ‡เชณเซ‡ เช…เชชเชกเซ‡เชŸ เชฅเชตเซเช‚ เชœเซ‹เชˆเช.
  2. เชตเชฟเช•เชพเชธ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เช•เซเชฏเชพเชฐเซ‡เช• เชธเช•เซเชทเชฎ เชนเซ‹เชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ เชธเชพเช‡เชŸเชจเชพ เชชเซ‚เชฐเซเชตเชพเชตเชฒเซ‹เช•เชจ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชœเซเช“.

เชธเช‚เชฌเช‚เชงเชฟเชค เช—เชฟเชŸ เชŸเซ…เช—เซเชธเชฎเชพเช‚เชฅเซ€ เช•เซ‹เชˆเชชเชฃ เชšเซ‡เชจเชฒ เชชเชฐ เชธเช‚เชธเซเช•เชฐเชฃ เชฌเชฆเชฒเซเชฏเชพ เชชเช›เซ€ เชธเชพเช‡เชŸเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡, เชชเชฐเช‚เชคเซ เช›เชฌเซ€ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เช…เชฎเชจเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชธเซเชตเชฟเชงเชพเช“ เชฎเชณเชถเซ‡:

  • เชšเซ‡เชจเชฒเซ‹ เชชเชฐเชจเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฌเชฆเชฒเชพเชคเซ€ เชนเซ‹เชตเชพเชฅเซ€, เชœเซเชฏเชพเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เชฌเชฆเชฒเชพเชฏเซเช‚ เช›เซ‡ เชคเซ‡ เชšเซ‡เชจเชฒเซ‹ เชฎเชพเชŸเซ‡เชจเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฌเชจเชพเชตเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช›เซ‡เชตเชŸเซ‡, เชฌเชงเซเช‚ เชซเชฐเซ€เชฅเซ€ เชฌเชจเชพเชตเชตเซเช‚ เช เช–เซ‚เชฌ เชธเชฐเชธ เชจเชฅเซ€.
  • เชฐเชฟเชฒเซ€เช เชฎเชพเชŸเซ‡ เชšเซ‡เชจเชฒเซ‹เชจเซ‹ เชธเซ‡เชŸ เชฌเชฆเชฒเชพเชˆ เชถเช•เซ‡ เช›เซ‡. เช…เชฎเซเช• เชธเชฎเชฏเซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชšเซ‡เชจเชฒเซ‹ เชชเชฐ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช•-เชเช•เซเชธเซ‡เชธ 1.1 เชชเซเชฐเช•เชพเชถเชจ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชธเซเชฅเชฟเชฐ เชธเช‚เชธเซเช•เชฐเชฃ เชจ เชนเซ‹เชˆ เชถเช•เซ‡, เชชเชฐเช‚เชคเซ เชธเชฎเชฏ เชœเชคเชพเช‚ เชคเซ‡ เชฆเซ‡เช–เชพเชถเซ‡ - เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชคเชฎเชพเชฐเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชœเชพเชคเซ‡ เชœ เชฌเชฆเชฒเชตเซ€ เชจ เชœเซ‹เชˆเช?

เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชฌเชพเชนเซเชฏ เชกเซ‡เชŸเชพ เชฌเชฆเชฒเชตเชพ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡.

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

เชเช• เช…เชญเชฟเช—เชฎ เชชเชธเช‚เชฆ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชตเซˆเช•เชฒเซเชชเชฟเช• เชฐเซ€เชคเซ‡, เชคเชฎเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชœเชฐเซ‚เชฐเซ€ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เช…เชฒเช— เชชเซ‹เชก เชคเชฐเซ€เช•เซ‡ เชšเชฒเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹. เช† เชตเชฟเช•เชฒเซเชช เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชธเซ‚เชšเชตเซ‡ เช›เซ‡, เชœเซ‡ เชธเซเชฅเชฟเชฐ เชตเชฐเซเชซ เชฐเชฟเชฒเซ€เชเชจเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เชธเชพเชฅเซ‡ เชตเชงเชถเซ‡. เช…เชจเซ‡ เช†, เชฌเชฆเชฒเชพเชฎเชพเช‚, เชตเชงเซ เชœเชŸเชฟเชฒ เชœเชพเชณเชตเชฃเซ€ เชธเซ‚เชšเชตเซ‡ เช›เซ‡: เชฆเชฐเซ‡เช• เชธเช‚เชธเซเช•เชฐเชฃเชจเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ HTTP เชธเชฐเซเชตเชฐ เชนเซ‹เชฏ เช›เซ‡, เช…เชจเซ‡ เชจเชพเชจเชพ เชฒเซ‹เชก เชธเชพเชฅเซ‡. เช…เชฒเชฌเชคเซเชค, เช†เชฎเชพเช‚ เชตเชงเซ เชธเช‚เชธเชพเชงเชจ เช–เชฐเซเชš เชชเชฃ เชธเชพเชฎเซ‡เชฒ เช›เซ‡.

เช…เชฎเซ‡ เช เชœ เชฐเชธเซเชคเซ‹ เช…เชชเชจเชพเชตเซเชฏเซ‹ เชฌเชงเชพ เชœเชฐเซ‚เชฐเซ€ เชตเชฐเซเชเชจเชจเซ‡ เชเช• เชˆเชฎเซ‡เชœเชฎเชพเช‚ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเซเช‚. เชธเชพเช‡เชŸเชจเชพ เชคเชฎเชพเชฎ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชจเชพ เชธเช‚เช•เชฒเชฟเชค เชธเซเชŸเซ‡เชŸเชฟเช•เซเชธ NGINX เชธเชพเชฅเซ‡เชจเชพ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡, เช…เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชชเชฐ เชŸเซเชฐเชพเชซเชฟเช• NGINX เช‡เชจเซเช—เซเชฐเซ‡เชธ เชฆเซเชตเชพเชฐเชพ เช†เชตเซ‡ เช›เซ‡. เชเช• เชธเชฐเชณ เชฎเชพเชณเช–เซเช‚ - เชเช• เชธเซเชŸเซ‡เชŸเชฒเซ‡เชธ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ - เชคเชฎเชจเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชœเชฎเชพเชตเชŸ (เชฒเซ‹เชก เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ€เชจเซ‡) เชฎเชพเชชเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡.

เชตเชงเซ เชšเซ‹เช•เซเช•เชธ เชฅเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชฌเซ‡ เช›เชฌเซ€เช“ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช: เชเช• เช‰เชคเซเชชเชพเชฆเชจ เชธเชฐเซเช•เชฟเชŸ เชฎเชพเชŸเซ‡, เชฌเซ€เชœเซ€ เชฆเซ‡เชต เชธเชฐเซเช•เชฟเชŸ เชฎเชพเชŸเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เช›เซ‡. เชตเชงเชพเชฐเชพเชจเซ€ เช‡เชฎเซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฎเซเช–เซเชฏ เชธเชพเชฅเซ‡ เชฎเชพเชคเซเชฐ เชกเซ‡เชต เชธเชฐเซเช•เชฟเชŸ เชชเชฐ เชฅเชพเชฏ เช›เซ‡ (เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡) เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชฐเชฟเชตเซเชฏเซ เช•เชฎเชฟเชŸเชฎเชพเช‚เชฅเซ€ เชธเชพเช‡เชŸเชจเซเช‚ เชตเชฐเซเชเชจ เชนเซ‹เชฏ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชตเชšเซเชšเซ‡ เชฐเซ‚เชŸเซ€เช‚เช— เช‡เชจเซเช—เซเชฐเซ‡เชธ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

werf vs git เช•เซเชฒเซ‹เชจ เช…เชจเซ‡ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเซเชธ

เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡ เชคเซ‡เชฎ, เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชจเชพ เชšเซ‹เช•เซเช•เชธ เชธเช‚เชธเซเช•เชฐเชฃ เชฎเชพเชŸเซ‡ เชธเชพเช‡เชŸ เชธเซเชŸเซ‡เชŸเชฟเช•เซเชธ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชŸเซ‡เช— เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ€เชจเซ‡ เชฌเชฟเชฒเซเชก เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเชฎเซ‡ เชฆเชฐเซ‡เช• เชตเช–เชคเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชฌเชฟเชฒเซเชก เช•เชฐเซ‹ เชคเซเชฏเชพเชฐเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เช•เซเชฒเซ‹เชจ เช•เชฐเซ€เชจเซ‡ เชชเชฃ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชฏเชพเชฆเซ€เชฎเชพเช‚เชฅเซ€ เชฏเซ‹เช—เซเชฏ เชŸเซ…เช—เซเชธ เชชเชธเช‚เชฆ เช•เชฐเซ€เชจเซ‡. เชœเซ‹ เช•เซ‡, เช† เชเช• เชœเช—เซเชฏเชพเช เชธเช‚เชธเชพเชงเชจ-เชธเช˜เชจ เช•เชพเชฎเช—เซ€เชฐเซ€ เช›เซ‡ เช…เชจเซ‡ เชตเชงเซเชฎเชพเช‚, เชฌเชฟเชจ-เชคเซเชšเซเช› เชธเซ‚เชšเชจเชพเช“ เชฒเช–เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡... เชฌเซ€เชœเซ‹ เช—เช‚เชญเซ€เชฐ เช—เซ‡เชฐเชฒเชพเชญ เช เช›เซ‡ เช•เซ‡ เช† เช…เชญเชฟเช—เชฎ เชธเชพเชฅเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช•เช‚เชˆเช• เช•เซ‡เชถ เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เชฐเซ€เชค เชจเชฅเซ€.

เช…เชนเซ€เช‚ werf เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เชชเซ‹เชคเซ‡ เชœ เช…เชฎเชพเชฐเซ€ เชธเชนเชพเชฏ เชฎเชพเชŸเซ‡ เช†เชตเซ‡ เช›เซ‡, เช…เชฎเชฒเซ€เช•เชฐเชฃ เช•เชฐเซ‡ เช›เซ‡ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‡เชถเซ€เช‚เช— เช…เชจเซ‡ เชคเชฎเชจเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เชฌเชพเชนเซเชฏ เชญเช‚เชกเชพเชฐ. เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚เชฅเซ€ เช•เซ‹เชก เช‰เชฎเซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡ werf เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฅเซ€ เชฌเชฟเชฒเซเชกเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชตเซ‡เช— เชฎเชณเชถเซ‡, เช•เชพเชฐเชฃ เช•เซ‡ werf เช†เชตเชถเซเชฏเช•เชชเชฃเซ‡ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เชเช•เชตเชพเชฐ เช•เซเชฒเซ‹เชจ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชชเช›เซ€ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเซ‡ เช›เซ‡ เชฎเชพเชคเซเชฐ fetch เชœเซ‹ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‹. เชตเชงเซเชฎเชพเช‚, เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เช‰เชฎเซ‡เชฐเชคเซ€ เชตเช–เชคเซ‡, เช…เชฎเซ‡ เชซเช•เซเชค เชœเชฐเซ‚เชฐเซ€ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เช“ เชœ เชชเชธเช‚เชฆ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช (เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช† เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เช›เซ‡. docs), เชœเซ‡ เช‰เชฎเซ‡เชฐเชพเชฏเซ‡เชฒ เชกเซ‡เชŸเชพเชจเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เช˜เชŸเชพเชกเซ‹ เช•เชฐเชถเซ‡.

เชœเซ‡เช•เชฟเชฒ เช เชธเซเชŸเซ‡เชŸเชฟเช• เชกเซ‡เชŸเชพเชจเซ‡ เช•เชฎเซเชชเชพเชˆเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เชเช• เชธเชพเชงเชจ เช›เซ‡ เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เชˆเชฎเซ‡เชœเชฎเชพเช‚ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เชคเซ‡เชฎเชพเช‚ เช•เชฎเซเชชเชพเชˆเชฒ เช•เชฐเชตเซเช‚ เชคเชพเชฐเซเช•เชฟเช• เชฐเชนเซ‡เชถเซ‡. werf เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸ, เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เช›เชฌเซ€เชฎเชพเช‚ เชฎเชพเชคเซเชฐ เชธเช‚เช•เชฒเชจ เชชเชฐเชฟเชฃเชพเชฎ เช†เชฏเชพเชค เช•เชฐเซ‹.

เช…เชฎเซ‡ werf.yaml เชฒเช–เซ€เช เช›เซ€เช

เชคเซ‡เชฅเซ€, เช…เชฎเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช•เซ‡ เช…เชฎเซ‡ เชฆเชฐเซ‡เช• เชตเชฐเซเชเชจเชจเซ‡ เชเช• เช…เชฒเช— เชตเชฐเซเชซ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเชฎเชพเช‚ เช•เชฎเซเชชเชพเชˆเชฒ เช•เชฐเซ€เชถเซเช‚. เชœเซ‹ เช•เซ‡ เช…เชฎเซ‡ เช…เชฎเชจเซ‡ เช–เชฌเชฐ เชจเชฅเซ€ เช•เซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช†เชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเซ€ เช•เชฒเชพเช•เซƒเชคเชฟเช“ เชนเชถเซ‡, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชจเชฟเชถเซเชšเชฟเชค เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฒเช–เซ€ เชถเช•เชคเชพ เชจเชฅเซ€ (เชธเช–เชค เชฐเซ€เชคเซ‡ เช•เชนเซ€เช เชคเซ‹, เช…เชฎเซ‡ เชนเชœเซ€ เชชเชฃ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชชเชฐเช‚เชคเซ เชคเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชธเชฐเช•เชพเชฐเช• เชฐเชนเซ‡เชถเซ‡ เชจเชนเซ€เช‚).

werf เชคเชฎเชจเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เชจเชฎเซ‚เชจเชพเช“ เชชเชฐ เชœเชพเช“ เชคเชฎเชพเชฐเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเชฎเชพเช‚ (werf.yaml), เช…เชจเซ‡ เช† เชคเซ‡ เชถเช•เซเชฏ เชฌเชจเชพเชตเซ‡ เช›เซ‡ เชซเซเชฒเชพเชฏ เชชเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชฌเชจเชพเชตเซ‹ เชฌเชพเชนเซเชฏ เชกเซ‡เชŸเชพ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ€เชจเซ‡ (เชคเชฎเชจเซ‡ เชถเซเช‚ เชœเซ‹เชˆเช เช›เซ‡!). เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชฌเชพเชนเซเชฏ เชกเซ‡เชŸเชพ เช เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เช…เชจเซ‡ เชชเซเชฐเช•เชพเชถเชจเซ‹ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เช›เซ‡, เชœเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เช…เชฎเซ‡ เชœเชฐเซ‚เชฐเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเซเชธ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‡ เช…เชฎเซ‡ เชฌเซ‡ เช›เชฌเซ€เช“ เชฎเซ‡เชณเชตเซ€เช เช›เซ€เช: werf-doc ะธ werf-dev เชตเชฟเชตเชฟเชง เชธเชฐเซเช•เชฟเชŸ เชชเชฐ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡.

เชฌเชพเชนเซเชฏ เชกเซ‡เชŸเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹ เชฆเซเชตเชพเชฐเชพ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡. เช…เชนเซ€เช‚ เชคเซ‡เชฎเชจเซ€ เชฐเชšเชจเชพ เช›เซ‡:

  • RELEASES - เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ€ เชœเช—เซเชฏเชพ-เชตเชฟเชญเชพเชœเชฟเชค เชธเซ‚เชšเชฟเชจเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚, เชชเซเชฐเช•เชพเชถเชจเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เช…เชจเซ‡ เชตเชฐเซเชซเชจเชพ เช…เชจเซเชฐเซ‚เชช เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡เชจเซ€ เชเช• เชฐเซ‡เช–เชพ <ะะžะœะ•ะ _ะ ะ•ะ›ะ˜ะ—ะ>%<ะะžะœะ•ะ _ะ’ะ•ะ ะกะ˜ะ˜>. เช‰เชฆเชพเชนเชฐเชฃ: 1.0%v1.0.4-beta.20
  • CHANNELS - เชšเซ‡เชจเชฒเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เช…เชจเซ‡ werf เชจเชพ เช…เชจเซเชฐเซ‚เชช เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡เชจเซ€ เชเช• เชฐเซ‡เช–เชพ, เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ€ เชœเช—เซเชฏเชพ-เชตเชฟเชญเชพเชœเชฟเชค เชธเซ‚เชšเชฟเชจเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ <ะšะะะะ›>%<ะะžะœะ•ะ _ะ’ะ•ะ ะกะ˜ะ˜>. เช‰เชฆเชพเชนเชฐเชฃ: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
  • ROOT_VERSION โ€” เชธเชพเช‡เชŸ เชชเชฐ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ werf เชฐเชฟเชฒเซ€เช เชธเช‚เชธเซเช•เชฐเชฃ (เชคเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เช‰เชšเซเชšเชคเชฎ เชชเซเชฐเช•เชพเชถเชจ เชจเช‚เชฌเชฐ เชฆเซเชตเชพเชฐเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€). เช‰เชฆเชพเชนเชฐเชฃ: v1.0.4-beta.20
  • REVIEW_SHA - เชธเชฎเซ€เช•เซเชทเชพ เช•เชฎเชฟเชŸเชจเซ€ เชนเซ‡เชถ เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชคเชฎเชพเชฐเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชฒเซ‚เชช เชฎเชพเชŸเซ‡ เชธเช‚เชธเซเช•เชฐเชฃ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช† เชšเชฒเซ‹ GitLab CI เชชเชพเช‡เชชเชฒเชพเช‡เชจเชฎเชพเช‚ เชญเชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชจเซ€เชšเซ‡ เชฌเชฐเชพเชฌเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชพเชฏเซ‡เชฒ เช›เซ‡.

เชธเซŒ เชชเซเชฐเชฅเชฎ, เชธเช—เชตเชก เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ€เช เช›เซ€เช 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 เชคเชฎเชจเซ‡ เชœเซ‡เช•เชฟเชฒ เช•เซ‡เชถเชจเซ‡ เชชเชพเชˆเชชเชฒเชพเชˆเชจ เชฐเชจ เชตเชšเซเชšเซ‡ เชธเชพเชšเชตเชตเชพ เชฆเซ‡ เช›เซ‡, เชœเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชซเชฐเซ€เชฅเซ€ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซ€ เชเชกเชช เชตเชงเซ‡ เช›เซ‡.

เชคเชฎเซ‡ เชซเชพเช‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชชเชฃ เชจเซ‹เช‚เชงเซเชฏเซ‹ เชนเชถเซ‡ 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.

เช•เชฒเชพเช•เซƒเชคเชฟเช“ เชคเซˆเชฏเชพเชฐ เช›เซ‡ - เช†เชฏเชพเชค เชถเชฐเซ‚ เช•เชฐเชตเชพเชจเซ‹ เชธเชฎเชฏ เช›เซ‡!

เช…เช‚เชคเชฟเชฎ เช›เชฌเซ€, เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชชเชฐ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡, เชธเชฐเซเชตเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชจเชฟเชฏเชฎเชฟเชค 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. เชœเซ‹ เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒ เชจ เชนเซ‹เชฏ เชคเซ‹ เชตเชฐเซเชซ-เชฆเซ‡เชต เชˆเชฎเซ‡เชœ เชฌเชฟเชฒเช•เซเชฒ เชœเชจเชฐเซ‡เชŸ เชจ เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เชฌเชจเชถเซ‡ REVIEW_SHA, เชชเชฐเช‚เชคเซ เช•เซเชฐเชฎเชฎเชพเช‚ เชจเซ€เชคเชฟเช“ เชฆเซเชตเชพเชฐเชพ เชธเชซเชพเชˆ werf เชฎเชพเช‚ เชกเซ‹เช•เชฐ เช‡เชฎเซ‡เชœเซ‹เช werf-dev เช‡เชฎเซ‡เชœ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚ เชนเชคเซเช‚, เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชซเช•เซเชค เชฐเซ‚เชŸ เชตเชฐเซเชเชจ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸ (เชคเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชคเซ‡ เชฌเชจเซ‡เชฒ เช›เซ‡) เชธเชพเชฅเซ‡ เชฌเชพเช‚เชงเชตเชพ เชฎเชพเชŸเซ‡ เช›เซ‹เชกเซ€เชถเซเช‚, เชœเซ‡เชฅเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเซ€ เชถเช•เชพเชฏ.

เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชคเซˆเชฏเชพเชฐ เช›เซ‡! เชšเชพเชฒเซ‹ CI/CD เช…เชจเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช˜เซ‹เช‚เช˜เชพเชŸ เชคเชฐเชซ เช†เช—เชณ เชตเชงเซ€เช.

GitLab CI เชฎเชพเช‚ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช…เชจเซ‡ เชกเชพเชฏเชจเซ‡เชฎเชฟเช• เชฌเชฟเชฒเซเชกเชจเซ€ เชธเซเชตเชฟเชงเชพเช“

เชฌเชฟเชฒเซเชก เชšเชฒเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เช†เชชเชฃเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชจเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ werf.yaml. เช† REVIEW_SHA เชšเชฒ เชชเชฐ เชฒเชพเช—เซ เชชเชกเชคเซเช‚ เชจเชฅเซ€, เชœเซ‡เชจเซ‡ เช…เชฎเซ‡ GitHub เชนเซ‚เช•เชฎเชพเช‚เชฅเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช•เซ‰เชฒ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเซ€เชถเซเช‚.

เช…เชฎเซ‡ Bash เชธเซเช•เซเชฐเชฟเชชเซเชŸเชฎเชพเช‚ เชœเชฐเซ‚เชฐเซ€ เชฌเชพเชนเซเชฏ เชกเซ‡เชŸเชพ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€เชถเซเช‚ generate_artifacts, เชœเซ‡ เชฌเซ‡ GitLab เชชเชพเช‡เชชเชฒเชพเช‡เชจ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸเซเชธ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชถเซ‡:

  • เชซเชพเช‡เชฒ releases.yml เชชเซเชฐเช•เชพเชถเชจ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡,
  • เชซเชพเช‡เชฒ common_envs.sh, เชจเชฟเช•เชพเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชจเซ‡ เชธเชฎเชพเชตเซ‡ เช›เซ‡.

เชซเชพเช‡เชฒ เชธเชฎเชพเชตเชฟเชทเซเชŸเซ‹ generate_artifacts เชคเชฎเชจเซ‡ เช…เชฎเชพเชฐเชพเชฎเชพเช‚ เชฎเชณเชถเซ‡ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชธเชพเชฅเซ‡ เชญเช‚เชกเชพเชฐ. เชกเซ‡เชŸเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเซ‹ เช เชฒเซ‡เช–เชจเซ‹ เชตเชฟเชทเชฏ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชซเชพเช‡เชฒ เช›เซ‡ common_envs.sh เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชตเชฐเซเชซเชจเซเช‚ เช•เชพเชฐเซเชฏ เชคเซ‡เชจเชพ เชชเชฐ เชจเชฟเชฐเซเชญเชฐ เช›เซ‡. เชคเซ‡เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ:

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 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 เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชคเชฌเช•เซเช•เชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชฟเชฒเซเชก เช…เชจเซ‡ เชกเชฟเชชเซเชฒเซ‹เชฏ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹: เชฌเชฟเชฒเซเชก เช…เชจเซ‡ เชกเชฟเชชเซเชฒเซ‹เชฏ. เช…เชฎเซ‡ werf GitHub เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€ (เชเชŸเชฒเซ‡ โ€‹โ€‹โ€‹โ€‹เช•เซ‡, เชœเซเชฏเชพเชฐเซ‡ GitHub เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชฅเชพเชฏ เช›เซ‡) เชฎเชพเช‚เชฅเซ€ เชนเซ‚เช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชชเซ‹เชคเซ‡ เชœ เชฒเซ‹เชจเซเชš เช•เชฐเซ€เช เช›เซ€เช. เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชกเซ‡เชŸเชพ เชตเชฟเชญเชพเช—เชฎเชพเช‚ GitLab เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเซเชฐเซ‹เชชเชฐเซเชŸเซ€เชเชฎเชพเช‚ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡ CI/CD เชธเซ‡เชŸเชฟเช‚เช—เซเชธ -> เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชŸเซเชฐเชฟเช—เชฐเซเชธ, เช…เชจเซ‡ เชชเช›เซ€ 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

เช—เชฟเชŸเชฒเซ‡เชฌ เชธเซเชŸเซ‡เชœเชฅเซ€ เชฌเชฟเชฒเซเชก เชธเซเชŸเซ‡เชœ เชชเชฐ เชฌเซ‡ เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸ เช‰เชฎเซ‡เชฐเชถเซ‡ เชชเซ‚เชฐเซเชตเชจเชฟเชฐเซเชฎเชพเชฃ, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เช•เชจเซเชธเซเชŸเซเชฐเช•เซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเซˆเชฏเชพเชฐ เช‡เชจเชชเซเชŸ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชšเชฒเซ‹เชจเซ€ เชจเชฟเช•เชพเชธ เช•เชฐเซ€เช เช›เซ€เช 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 เช เชœเชฎเชพเชตเชŸ เช•เชฐเชตเซ€ เชœเซ‹เชˆเช (WERF_KUBE_CONTEXT), เช…เชจเซ‡ เชฒเซ‚เชช เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡ (environment.name ะธ environment.url), เชœเซ‡ เชชเช›เซ€ เชนเซ‡เชฒเซเชฎ เชšเชพเชฐเซเชŸ เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸเซเชธเชฎเชพเช‚ เชตเชชเชฐเชพเชฏ เช›เซ‡. เช…เชฎเซ‡ เชจเชฎเซ‚เชจเชพเช“เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ€เชถเซเช‚ เชจเชนเซ€เช‚, เช•เชพเชฐเชฃ เช•เซ‡... เชชเซเชฐเชถเซเชจเชฎเชพเช‚ เชตเชฟเชทเชฏ เชฎเชพเชŸเซ‡ เชคเซเชฏเชพเช‚ เช•เช‚เชˆ เชฐเชธเชชเซเชฐเชฆ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹ เชฒเซ‡เช– เชฎเชพเชŸเซ‡ เชญเช‚เชกเชพเชฐ.

เช…เช‚เชคเชฟเชฎ เชธเซเชชเชฐเซเชถ

werf เช†เชตเซƒเชคเซเชคเชฟเช“ เช˜เชฃเซ€ เชตเชพเชฐ เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชนเซ‹เชตเชพเชฅเซ€, เชจเชตเซ€ เช›เชฌเซ€เช“ เชตเชพเชฐเช‚เชตเชพเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เช…เชจเซ‡ เชกเซ‹เช•เชฐ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ เชธเชคเชค เชตเชงเชถเซ‡. เชคเซ‡เชฅเซ€, เชจเซ€เชคเชฟเช“เชจเชพ เช†เชงเชพเชฐเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช‡เชฎเซ‡เชœ เช•เซเชฒเชฟเชจเช…เชชเชจเซ‡ เช—เซ‹เช เชตเชตเซเช‚ เชนเชฟเชคเชพเชตเชน เช›เซ‡. เชคเซ‡ เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡.

เช…เชฎเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เช†เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡:

  • เชฎเชพเช‚ เชธเชซเชพเชˆ เชชเช—เชฒเซเช‚ เช‰เชฎเซ‡เชฐเซ‹ .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 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ (CI/CD เชธเซ‡เชŸเชฟเช‚เช—เซเชธ -> เชšเชฒ).

เชœเชฐเซ‚เชฐเซ€ เชถเซ‡เชกเซเชฏเซ‚เชฒ เชธเชพเชฅเซ‡ เชธเชซเชพเชˆ เช•เชพเชฐเซเชฏ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชชเซ‚เชฐเซเชฃ เชฅเชพเชฏ เช›เซ‡ CI/CD ->
เชถเซ‡เชกเซเชฏเซเชฒเซเชธ
.

เชฌเชธ เช†เชŸเชฒเซเช‚ เชœ: เชกเซ‹เช•เชฐ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚เชจเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชนเชตเซ‡ เชฌเชฟเชจเช‰เชชเชฏเซ‹เช—เซ€ เชˆเชฎเซ‡เชœเซ‹เชฅเซ€ เชธเชคเชค เชตเชงเชถเซ‡ เชจเชนเซ€เช‚.

เชตเซเชฏเชตเชนเชพเชฐเซ เชญเชพเช—เชจเชพ เช…เช‚เชคเซ‡, เชนเซเช‚ เชคเชฎเชจเซ‡ เชฏเชพเชฆ เช…เชชเชพเชตเซ€ เชฆเช‰เช‚ เช•เซ‡ เชฒเซ‡เช–เชฎเชพเช‚เชฅเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟเช“ เช†เชฎเชพเช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เช—เชฟเชŸ:

เชชเชฐเชฟเชฃเชพเชฎ

  1. เช…เชฎเชจเซ‡ เชฒเซ‹เชœเชฟเช•เชฒ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชฎเชพเชณเช–เซเช‚ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซเช‚: เชธเช‚เชธเซเช•เชฐเชฃ เชฆเซ€เช  เชเช• เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸ.
  2. เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช• เช›เซ‡ เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ werf เชจเชพ เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€: เชตเซ‡เชฌเชธเชพเช‡เชŸ เชชเชฐเชจเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ เช†เชชเชฎเซ‡เชณเซ‡ เช…เชชเชกเซ‡เชŸ เชฅเชพเชฏ เช›เซ‡.
  3. เชฌเซ‡ เช›เชฌเซ€เช“ เชตเชฟเชตเชฟเชง เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชฎเชพเชŸเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.
  4. เชคเซ‡ เชเชกเชชเชฅเซ€ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช•เซ‡เชถเซ€เช‚เช—เชจเซ‹ เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ - เชœเซเชฏเชพเชฐเซ‡ werf เชจเซเช‚ เชจเชตเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชฅเชตเชพ GitHub เชนเซ‚เช•เชจเซ‡ เชธเชฎเซ€เช•เซเชทเชพ เช•เชฎเชฟเชŸ เชฎเชพเชŸเซ‡ เชฌเซ‹เชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชฎเชพเชคเซเชฐ เชฌเชฆเชฒเชพเชฏเซ‡เชฒ เชธเช‚เชธเซเช•เชฐเชฃ เชธเชพเชฅเซ‡ เช…เชจเซเชฐเซ‚เชช เช†เชฐเซเชŸเชฟเชซเซ‡เช•เซเชŸ เชซเชฐเซ€เชฅเซ€ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.
  5. เชฌเชฟเชจเช‰เชชเชฏเซ‹เช—เซ€ เช›เชฌเซ€เช“ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพ เชตเชฟเชถเซ‡ เชตเชฟเชšเชพเชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€: werf เชจเซ€เชคเชฟเช“ เช…เชจเซเชธเชพเชฐ เชธเชซเชพเชˆ เชกเซ‹เช•เชฐ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชจเซ‡ เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชฐเชพเช–เชถเซ‡.

เชคเชพเชฐเชฃเซ‹

  • werf เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฅเซ€ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซ€ เช•เซ‡เชถเซ€เช‚เช— เช…เชจเซ‡ เชฌเชพเชนเซเชฏ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เช“ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช•เซ‡เชถเซ€เช‚เช— เชฌเช‚เชจเซ‡เชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชเชกเชชเชฅเซ€ เช•เชพเชฎ เช•เชฐเชตเชพ เชฆเซ‡ เช›เซ‡.
  • เชฌเชพเชนเซเชฏ เช—เชฟเชŸ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เช เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชฅเซ€ เชฆเชฐเซ‡เช• เชตเช–เชคเซ‡ เชธเชฎเช—เซเชฐ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เช•เซเชฒเซ‹เชจ เช•เชฐเชตเชพเชจเซ€ เช…เชฅเชตเชพ เชฎเซเชถเซเช•เซ‡เชฒ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชฒเซ‹เชœเซ€เช• เชธเชพเชฅเซ‡ เชตเซเชนเซ€เชฒเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ‡ เช›เซ‡. werf เช•เซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชเช• เชœ เชตเชพเชฐ เช•เซเชฒเซ‹เชจเชฟเช‚เช— เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เชชเช›เซ€ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ fetch เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชœ.
  • เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชฎเชพเช‚ เช—เซ‹ เชจเชฎเซ‚เชจเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ werf.yaml เชคเชฎเชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เชœเซ‡เชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เชฌเชพเชนเซเชฏ เชกเซ‡เชŸเชพ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡.
  • เชฎเชพเช‰เชจเซเชŸ เช‡เชจ เชตเซ‡เชฐเซเชซเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เช•เชฒเชพเช•เซƒเชคเชฟเช“เชจเชพ เชธเช‚เช—เซเชฐเชนเชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡ - เช•เซ‡เชถเชจเซ‡ เช•เชพเชฐเชฃเซ‡, เชœเซ‡ เชฌเชงเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ เชฎเชพเชŸเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เช›เซ‡.
  • werf เชธเชซเชพเชˆเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡, เชœเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชจเชฟเชฐเซเชฎเชพเชฃ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡.

PS

เช…เชฎเชพเชฐเชพ เชฌเซเชฒเซ‹เช— เชชเชฐ เชชเชฃ เชตเชพเช‚เชšเซ‹:

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹