werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เบงเบฑเบ™เบ—เบต 27 เบžเบถเบ”เบชเบฐเบžเบฒเบ—เบตเปˆเบซเป‰เบญเบ‡เบ›เบฐเบŠเบธเบกเปƒเบซเบเปˆเบ‚เบญเบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบก DevOpsConf 2019, เป„เบ”เป‰เบˆเบฑเบ”เบ‚เบถเป‰เบ™เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ‡เบฒเบ™เบšเบธเบ™. RIT++ 2019, เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ "เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡", เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบกเบญเบšเปƒเบซเป‰ "werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes". เบกเบฑเบ™เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™ เบšเบฑเบ™เบซเบฒ เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เป‰เบฒเบ—เบฒเบเบ—เบตเปˆเบ—เบธเบเบ„เบปเบ™เบ›เบฐเป€เบŠเบตเบ™เปƒเบ™เป€เบงเบฅเบฒเบ™เบณเปƒเบŠเป‰เบเบฑเบš Kubernetes, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเปˆเบฝเบงเบเบฑเบš nuances เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”. เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบท Open Source werf.

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต, เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ (เป€เบกเบทเปˆเบญเบเปˆเบญเบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ dapp) เป„เบ”เป‰เบšเบฑเบ™เบฅเบธเบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™เบ—เบฒเบ‡เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡ 1000 เบ”เบฒเบงเปƒเบ™ GitHub โ€” เบžเบงเบเป€เบฎเบปเบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบŠเบธเบกเบŠเบปเบ™เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเป€เบ•เบตเบšเปƒเบซเบเปˆเบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบŠเบตเบงเบดเบ”เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบงเบดเบชเบฐเบงเบฐเบเบญเบ™ DevOps เบซเบผเบฒเบเบ„เบปเบ™.

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเปเบ™เบฐเบ™เปเบฒ เบงเบดโ€‹เบ”เบตโ€‹เป‚เบญโ€‹เบ‚เบญเบ‡โ€‹เบšเบปเบ”โ€‹เบฅเบฒเบโ€‹เบ‡เบฒเบ™โ€‹ (~ 47 เบ™เบฒเบ—เบต, เบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบšเบปเบ”เบ„เบงเบฒเบก) เปเบฅเบฐเบชเบฒเบ™เบชเบฐเบเบฑเบ”เบˆเบฒเบเบกเบฑเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบ„เบงเบฒเบก. เป„เบ›!

เบชเบปเปˆเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบซเป‰ Kubernetes

เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบˆเบฐเบšเปเปˆเบเปˆเบฝเบงเบเบฑเบš werf เบญเบตเบเบ•เปเปˆเป„เบ›, เปเบ•เปˆเบเปˆเบฝเบงเบเบฑเบš CI/CD เปƒเบ™ Kubernetes, เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบŠเบญเบšเปเบงเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเบซเบธเป‰เบกเบซเปเปˆเบขเบนเปˆเปƒเบ™ Docker containers. (เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™ เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ›เบต 2016), เปเบฅเบฐ K8s เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ” (เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™ 2017 เบ›เบต).

เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเปเบ™เบงเปƒเบ”เปƒเบ™ Kubernetes?

  • เบกเบตเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ Git เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบกเบฑเบ™. เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เป€เบ›เบฑเบ™เบฎเบนเบš Docker เปเบฅเบฐเบ•เบตเบžเบดเบกเบขเบนเปˆเปƒเบ™ Docker Registry.
  • เบ„เบฑเบ‡เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบ‡เบกเบตเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฑเบšเปƒเบŠเป‰เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒ Kubernetes, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบšเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฒเบเบฅเบตเบˆเบดเบ”เบŠเบตเปเบฅเบฐเป€เบ›เบตเบ”เบ•เบปเบงเบกเบฑเบ™.
  • เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบกเบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบœเบตเบเปเบœเปˆเบฎเบนเบšเบžเบฒเบš. เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ” (เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ”เบฝเบงเบเบฑเบ™) เบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ (เปƒเบ™ namespace K8s เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบซเบผเบทเบเบธเปˆเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ) เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.
  • เบชเบธเบ”เบ—เป‰เบฒเบ, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบฐเบšเบปเบš CI เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเป€เบซเบ”เบเบฒเบ™เบˆเบฒเบ Git (เบซเบผเบทเบเบปเบ”เบ›เบธเปˆเบก) เปเบฅเบฐเป‚เบ—เบซเบฒเบ—เบธเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”: เบเปเปˆเบชเป‰เบฒเบ‡, เป€เบœเบตเบเปเบœเปˆ, เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ—เบปเบ”เบชเบญเบš.

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เบกเบตเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰:

  1. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰ (เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰), เบฎเบนเบšเบžเบฒเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ—เบธเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™ (staging, เบเบฒเบ™เบœเบฐเบฅเบดเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†), เบ•เป‰เบญเบ‡เบกเบตเบซเบ™เบถเปˆเบ‡. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบฅเบฐเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡. เบ—เบตเปˆเบ™เบตเป‰.
  2. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบฅเบฐเบซเบฑเบ” (IaC), เบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบšเปเบฅเบฐเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™ เปเบ—เป‰เบขเบนเปˆเปƒเบ™เบซเบ™เบถเปˆเบ‡ repository. เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เป€เบšเบดเปˆเบ‡ เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ”เบฝเบงเบเบฑเบ™.
  3. เบ•เปˆเบญเบ‡เป‚เบชเป‰เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡ (เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡) เบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบเบˆเบฐเป€เบซเบฑเบ™เบกเบฑเบ™เปเบšเบšเบ™เบตเป‰: เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบญเบš, เบ—เบปเบ”เบชเบญเบš, เบ›เปˆเบญเบเบญเบญเบเบกเบฒ (เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบเบฒเบ™โ€‹เบ›เปˆเบญเบโ€‹เบ•เบปเบงโ€‹) เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบกเบฑเบ™ - เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™. เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบœเบนเป‰เปƒเบŠเป‰เป„เบ”เป‰เบฎเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบญเบ, เบšเปเปˆ เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹, เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบปเปˆเบ‡โ€‹เบกเบฑเบ™โ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹, เปเบฅเบฐโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ›โ€‹เบ—เบตเปˆโ€‹เบ™เบฑเป‰เบ™โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบ™เบตเป‰โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹. เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบŠเบทเปˆเบญเบงเปˆเบฒเบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡ เบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ (เปเบฅเปˆเบ™), เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ–เบทเบเป‚เบเบเบเป‰เบฒเบเบญเบญเบเบˆเบฒเบเบเบฒเบ™เบœเบฐเบฅเบดเบ” (เปเบ—เบ™เบ—เบตเปˆเบกเบฑเบ™เบ”เป‰เบงเบเบญเบฑเบ™เปƒเบซเบกเปˆ).

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

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡

เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš Docker เปƒเบ™เบ›เบต 2019, เป€เบกเบทเปˆเบญเบ—เบธเบเบ„เบปเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™ Dockerfiles เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. docker build?.. เบ™เบตเป‰เปเบกเปˆเบ™ nuances เบ—เบตเปˆเบ‚เป‰เบญเบเบขเบฒเบเบˆเบฐเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆ:

  1. เบ™เป‰เปเบฒเบซเบ™เบฑเบเบฎเบนเบšเบžเบฒเบš เบšเบฑเบ™เบซเบฒ, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบŠเป‰ เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เป€เบžเบทเปˆเบญเบญเบญเบเบˆเบฒเบเบฎเบนเบšเบžเบฒเบšเบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปเบ—เป‰เป†เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™.
  2. เบˆเปเบฒเบ™เบงเบ™เบŠเบฑเป‰เบ™ เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เป‚เบ”เบเบเบฒเบ™เบชเบปเบกเบ—เบปเบšเบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบ‚เบญเบ‡ RUN- เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ•เบฒเบกโ€‹เบ„เบงเบฒเบกโ€‹เบซเบกเบฒเบโ€‹.
  3. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ™เบตเป‰เป€เบžเบตเปˆเบกเบšเบฑเบ™เบซเบฒ เบเบฒเบ™เบ”เบตเบšเบฑเบ, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบฐเบžเบฒเปเบซเปˆเบ‡ crash, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบˆเบฒเบเบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบšเบฑเบ™เบซเบฒ.
  4. เบ„เบงเบฒเบกเป„เบงเปƒเบ™เบเบฒเบ™เบ›เบฐเบเบญเบš เบชเปเบฒเบ„เบฑเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เป€เบœเบตเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบฒเบชเบฒเบ—เบธเบเป†เบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™.
  5. เป€เบฅเบทเป‰เบญเบเป†เบˆเบฒเบเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ Git เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบผเบฒเบโ€‹, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰เป‚เบ”เบเบŠเบธเบ”เบ‚เบญเบ‡ Dockerfiles (เบซเบผเบทเบกเบตเบŠเบทเปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™เปƒเบ™เบซเบ™เบถเปˆเบ‡เป„เบŸเบฅเปŒ) เปเบฅเบฐ Bash script เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบเบญเบšเบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ›เบฒเบเบ‚เบญเบ‡เบเป‰เบญเบ™เบซเบตเบ™เบ—เบตเปˆเบ—เบธเบเบ„เบปเบ™เบ›เบฐเป€เบŠเบตเบ™. เปเบ•เปˆเบกเบตเบšเบฑเบ™เบซเบฒเบญเบทเปˆเบ™เป†, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ:

  1. เป€เบฅเบทเป‰เบญเบเป†เบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบเบญเบšเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ เบžเบน (เบ•เบปเบงเบขเปˆเบฒเบ‡, cache เบœเบปเบ™เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบŠเบฑเปˆเบ™: apt เปƒเบ™ directory เบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก).
  2. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™ เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆ เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เปƒเบ™เปเบเบฐ.
  3. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™ เบเปเปˆเบชเป‰เบฒเบ‡เป‚เบ”เบเบšเปเปˆเบกเบต Docker (เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเป€เบ„เบทเปˆเบญเบ‡ virtual เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰, เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเบธเปˆเบก Kubernetes เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฑเบ™เบˆเบธ?).
  4. เบเบฒเบ™เบ›เบฐเบเบญเบšเบ‚เบฐเบซเบ™เบฒเบ™, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปˆเบฒเบ‡เป†: เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบˆเบฒเบ Dockerfile (เบ–เป‰เบฒเปƒเบŠเป‰เบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™), เบซเบผเบฒเบเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ‚เบญเบ‡ repository เบ”เบฝเบงเบเบฑเบ™, เบซเบผเบฒเบ Dockerfiles.
  5. เบเบฒเบ™เบ›เบฐเบเบญเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบ: เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบเบฑเบšเบเปเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบเบฑเบเบ—เบตเปˆ "ephemeral" เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ cache เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบซเบฒเบเป„เบ›, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เบšเปˆเบญเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ.
  6. เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเป‰เบ‡เบŠเบทเปˆเบˆเบธเบ”เบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒ เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”: เบกเบฑเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบ—เบตเปˆเบˆเบฐเป„เบ›เบซเบฒเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™, เบžเบดเบกเบ„เปเบฒเบชเบฑเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบฅเบฐเป€เบญเบปเบฒเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบก, เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบšเปเปˆเปเบ™เปˆเปƒเบˆเบงเปˆเบฒ nuances เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ„เบฒเบ”เบ„เบฐเป€เบ™เป„เบงเป‰เบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰.

เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เป‚เบ„เบ‡เบเบฒเบ™:

  • moby/buildkit โ€” เบœเบนเป‰เบชเป‰เบฒเบ‡เบˆเบฒเบ Docker Inc (เบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบš Docker เป€เบงเบตเบŠเบฑเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบฅเป‰เบง), เป€เบŠเบดเปˆเบ‡เบžเบฐเบเบฒเบเบฒเบกเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบฑเบ‡เปเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰;
  • เบ„เบฒเบ™เบดเป‚เบ โ€” builder เบˆเบฒเบ Google เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ Docker;
  • Buildpacks.io - เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ‚เบญเบ‡ CNCF เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰ magic เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบฅเบฐ, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เป€เบ›เบฑเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบเบฑเบš rebase เบชเปเบฒเบฅเบฑเบšเบŠเบฑเป‰เบ™;
  • เปเบฅเบฐโ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹เบญเบทเปˆเบ™เป†โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹, เป€เบŠเบฑเปˆเบ™โ€‹:โ€‹ เบชเป‰เบฒเบ‡, truetools/img...

...เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบกเบตเบ”เบฒเบงเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เปƒเบ™ GitHub. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบ™เบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡, docker build เบกเบตเบขเบนเปˆเปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡ เบšเบฑเบ™เบซเบฒเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™ - เบซเบผเบฑเบเบ–เบฒเบ™เบชเบฐเปเบ”เบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบฐเบซเบ™เบฒเบ™เบ‚เบญเบ‡เบ™เบฑเบเบชเบฐเบชเบปเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒ.

เบชเบฐเบžเบฒเปเบซเปˆเบ‡เปƒเบ™ werf

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™ werf (เบเปˆเบญเบ™ เปœเป‰เบฒ เบ™เบตเป‰ เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡ เบ„เบท dapp) โ€” เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เปเบซเบผเปˆเบ‡เบ›เบฐเป‚เบซเบเบ”เบˆเบฒเบเบšเปเบฅเบดเบชเบฑเบ” Flant, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบกเบฒเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบผเบฒเบเบ›เบตเปเบฅเป‰เบง. เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ 5 เบ›เบตเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบ”เป‰เบงเบ Bash scripts เบ—เบตเปˆเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ›เบฐเบเบญเบš Dockerfiles, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบš 3 เบ›เบตเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเป„เบ”เป‰เบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆเปƒเบ™เบเบญเบšเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบกเบตเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ Git เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. (เบ—เปเบฒเบญเบดเบ”เปƒเบ™ Ruby, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆ เป„เบ›, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบ›เปˆเบฝเบ™เบŠเบทเปˆ). เบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ›เบฐเบเบญเบšเปƒเบ”เบ—เบตเปˆเบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™ werf?

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

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

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบžเบดเบกเป€เบœเบตเบเปเบœเปˆเปƒเบ™เบ—เบฐเบšเบฝเบ™ (เป€เบœเบตเบเปเบœเปˆ)

เบžเบงเบเป€เบฎเบปเบฒเป‚เบ—เบซเบฒ docker push... - เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบเบฒเบโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบญเบฑเบšโ€‹เป‚เบซเบฅเบ”โ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบˆเบปเบ”โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹? เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™: "เบ‚เป‰เบญเบเบ„เบงเบ™เปƒเบชเปˆเบ›เป‰เบฒเบเปƒเบ”เปƒเบชเปˆเบฎเบนเบš?" เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบต Gitflow (เบซเบผเบทเบเบปเบ™เบฅเบฐเบเบธเบ” Git เบญเบทเปˆเบ™เป†) เปเบฅเบฐ Kubernetes, เปเบฅเบฐเบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเบเปเบฒเบฅเบฑเบ‡เบžเบฐเบเบฒเบเบฒเบกเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™ Kubernetes เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™ Git. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, Git เปเบกเปˆเบ™เปเบซเบผเปˆเบ‡เบ„เบงเบฒเบกเบˆเบดเบ‡เบžเบฝเบ‡เปเบ•เปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

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

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

Tagging เบเบธเบ”เบ—เบฐเบชเบฒเบ”

เบญเบฑเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ เบกเบทเป‰ git. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบˆเบปเบ”โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบฎเบนเบšโ€‹เบžเบฒเบš tagged เป€เบ›เบฑเบ™ 1.0. Kubernetes เบกเบตเบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบฅเบฐเบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบšเปˆเบญเบ™เบ—เบตเปˆเบฎเบนเบšเบžเบฒเบšเบ™เบตเป‰เบ–เบทเบเบญเบฑเบšเป‚เบซเบฅเบ”. เปƒเบ™ Git เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปเบฅเบฐเปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”เบžเบงเบเป€เบฎเบปเบฒเปเบ—เบฑเบ 2.0. เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒเบกเบฑเบ™เบ•เบฒเบกเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบˆเบฒเบ repository เปเบฅเบฐเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เบฅเบตเบˆเบดเบ”เบŠเบตเบ”เป‰เบงเบเปเบ—เบฑเบ 2.0. เบžเบงเบเป€เบฎเบปเบฒเบกเป‰เบงเบ™เบกเบฑเบ™เบญเบญเบเป„เบ›เบซเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบฅเบฐ, เบ–เป‰เบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ”เบต, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”.

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เบšเบฑเบ™เบซเบฒเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ—เปเบฒเบญเบดเบ”เปƒเบชเปˆเป‚เบ„เบ”เบ„เปเบฒเบชเบฑเปˆเบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเบ—เบปเบ”เบชเบญเบšเปเบฅเบฐเบกเป‰เบงเบ™เบกเบฑเบ™เบญเบญเบ. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบกเบฑเบ™เบšเปเปˆเบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™: เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบญเบญเบเป‚เบ›เปเบเบผเบกเป‚เบ›เบผเปเบเบผเบกเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเป€เบ—เบทเปˆเบญ (เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบžเบทเปˆเบญเบเบงเบ”เบชเบญเบš, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบชเปˆเปเบ—เบฑเบ). เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ™เบตเป‰เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบš Gitflow.

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™ git commit + tag. เบชเบฒเบ‚เบฒเปเบกเปˆเบšเบปเบ”เบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆ 1.0; เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ—เบฐเบšเบฝเบ™ - เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบธเปˆเบก Kubernetes เบเบฑเบ‡เบกเบตเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡ เปเบฅเบฐเบฎเบนเบšเบŠเบปเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบก Gitflow: เปƒเบ™เบชเบฒเบ‚เบฒเบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ (develop) เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเบซเบกเปˆ, เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบเบฑเบšเบ•เบปเบงเบฅเบฐเบšเบธ #c1. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบกเบฑเบ™โ€‹เปเบฅเบฐโ€‹เป€เบœเบตเบโ€‹เปเบœเปˆโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบˆเบปเบ”โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹เป‚เบ”เบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ•เบปเบงโ€‹เบฅเบฐโ€‹เบšเบธโ€‹เบ™เบตเป‰ (#c1). เบ”เป‰เบงเบเบ•เบปเบงเบฅเบฐเบšเบธเบ”เบฝเบงเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡. เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ #c2 ะธ #c3.

เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบžเบฝเบ‡เบžเป, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเบ–เบฝเบ™เบฅเบฐเบžเบฒเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡. เบชเป‰เบฒเบ‡เบชเบฒเบ‚เบฒเปƒเบ™ Git release_1.1 (เบขเบนเปˆเป€เบ—เบดเบ‡เบ–เบฒเบ™ #c3 เบˆเบฒเบเบ™เบฑเป‰เบ™ develop). เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบเบฑเบšเบเปเบฒเบเบฒเบ™เบ›เปˆเบญเบเบ™เบตเป‰, เป€เบžเบฒเบฐเบงเปˆเบฒ ... เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบกเป‰เบงเบ™เบกเบฑเบ™เบญเบญเบเป„เบ›เบชเบนเปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบžเบงเบเป€เบฎเบปเบฒเปเบเป‰เป„เบ‚เบ‚เปเป‰เบšเบปเบเบžเปˆเบญเบ‡เปƒเบ™ #c4 เปเบฅเบฐโ€‹เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹เบกเป‰เบงเบ™โ€‹เบญเบญเบโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹. เบžเป‰เบญเบกโ€‹เบเบฑเบ™โ€‹เบ™เบฑเป‰เบ™, เบเบฒเบ™โ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบžเบงเบกโ€‹เบ”เบณโ€‹เป€เบ™เบตเบ™โ€‹เบขเบนเปˆ develop, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบ•เปˆเบฅเบฐเป„เบฅเบเบฐเบˆเบฒเบ release_1.1. เปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเปเบฅเบฐเบญเบฑเบšเป‚เบซเบฅเบ”เปƒเบชเปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบชเบธเบ (#c25).

เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบฅเบงเบก (เบเบฑเบšโ€‹เป„เบงโ€‹เป„เบ›โ€‹เบซเบ™เป‰เบฒโ€‹) เบชเบฒโ€‹เบ‚เบฒโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบญเบ (release_1.1) เปƒเบ™โ€‹เปเบกเปˆโ€‹เบšเบปเบ”โ€‹. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบญเบปเบฒโ€‹เป‚เบ„เบ”โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบ„เปเบฒโ€‹เบซเบกเบฑเป‰เบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒโ€‹เบ™เบตเป‰ (1.1). เปเบ•เปˆเบฎเบนเบšเบžเบฒเบšเบ™เบตเป‰เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบ—เบฐเบšเบฝเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบฅเบงเบšเบฅเบงเบกเบกเบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบกเปเบ—เบฑเบเบ—เบตเบชเบญเบ‡เปƒเบชเปˆเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง (เบ•เบญเบ™เบ™เบตเป‰เบกเบฑเบ™เบกเบตเปเบ—เบฑเบเบขเบนเปˆเปƒเบ™เบ—เบฐเบšเบฝเบ™. #c25 ะธ 1.1). เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเป‰เบงเบ™เบกเบฑเบ™เบญเบญเบเป„เบ›เบชเบนเปˆเบเบฒเบ™เบœเบฐเบฅเบดเบ”.

เบกเบตเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ–เบทเบเบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ› staging (#c25), เปเบฅเบฐเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบกเบฑเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ (.1.1), เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒ "เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบ" เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบฎเบนเบšเบžเบฒเบšเบ”เบฝเบงเบเบฑเบ™เบˆเบฒเบเบ—เบฐเบšเบฝเบ™.

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เบ‚เปเป‰เป€เบชเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบธเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ merge commits, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เป„เบงเบ•เปเปˆเบซเบ™เป‰เบฒ.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ›โ€‹เป€เบžเบตเปˆเบกโ€‹เป€เบ•เบตเบกโ€‹เปเบฅเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰ trick ... เปƒเบซเป‰โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡โ€‹เบ‚เบญเบ‡ Dockerfile เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹:

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

เปƒเบซเป‰เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบˆเบฒเบเบกเบฑเบ™เบ•เบฒเบกเบซเบผเบฑเบเบเบฒเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • SHA256 เบˆเบฒเบเบ•เบปเบงเบฅเบฐเบšเบธเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเปƒเบŠเป‰ (ruby:2.3 ะธ nginx:alpine), เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™ checksums เบ‚เบญเบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ;
  • เบ—เบตเบกโ€‹เบ‡เบฒเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ” (RUN, CMD เปเบฅเบฐ เบญเบทเปˆเบ™เป†.);
  • SHA256 เบˆเบฒเบเป„เบŸเบฅเปŒเบ—เบตเปˆเบ–เบทเบเป€เบžเบตเปˆเบก.

... เปเบฅเบฐเป€เบญเบปเบฒ checksum (เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡ SHA256) เบˆเบฒเบเป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เบ™เบตเป‰ เบฅเบฒเบเป€เบŠเบฑเบ™ เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš Docker.

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเปเบœเบ™เบงเบฒเบ”เปเบฅเบฐ เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบฅเบฒเบเป€เบŠเบฑเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, i.e. tag เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบกเบตเบฅเบฒเบเป€เบŠเบฑเบ™.

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

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

เบ‚เปเป‰เป€เบชเบเปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเป„เบ”เป‰เบ–เบทเบ pushed เบเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ” - checksums เบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ”เบฝเบง. เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบ–เบทเบเปเบเป‰เป„เบ‚เป‚เบ”เบเบŠเบฑเป‰เบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบตเปˆเบกเบต metadata - เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเป€เบˆเบปเป‰เบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡.

Tagging เปƒเบ™ werf

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

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

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปƒเบซเบกเปˆเบˆเบฐเบ›เบฒเบเบปเบ”เบ‚เบถเป‰เบ™เป€เบŠเบดเปˆเบ‡เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™? เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบฅเบฐเบซเบฑเบ”, patch เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปเบฅเบฐเบฎเบนเบšเบžเบฒเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เปƒเบซเบกเปˆเบˆเบฐเบ–เบทเบเบเบฐเบเบฝเบก. เบฅเบฒเบเป€เบŠเบฑเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ checksum เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเป€เบงเบ—เบตเป€เบเบปเปˆเบฒเปเบฅเบฐ patch เปƒเบซเบกเปˆ. เบฎเบนเบšเบชเบธเบ”เบ—เป‰เบฒเบเปƒเปเปˆเบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบˆเบฒเบเบฎเบนเบšเบ™เบตเป‰. เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบญเบทเปˆเบ™เป†.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฎเบนเบšเบžเบฒเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบกเปˆเบ™ cache เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เบขเปˆเบฒเบ‡เปเบœเปˆเบซเบผเบฒเบ, เปเบฅเบฐเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปเบฅเป‰เบงเบˆเบฒเบเบกเบฑเบ™เบ–เบทเบเบญเบฑเบšเป‚เบซเบฅเบ”เป„เบ›เบเบฑเบ‡ Docker Registry.

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เบ—เปเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบชเบฐโ€‹เบญเบฒเบ”โ€‹เบเบฒเบ™โ€‹เบˆเบปเบ”โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฅเบถเบšเบŠเบฑเป‰เบ™เบ—เบตเปˆเบเบฑเบ‡เบ„เบปเบ‡เบ„เป‰เบฒเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเปเบ—เบฑเบเบ—เบตเปˆเบ–เบทเบเบฅเบปเบš - เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡ Docker Registry เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เบฑเบ Docker เบซเบผเบฒเบเบชเบฐเบชเบปเบกเปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฒเบ‡เบญเบฑเบ™, เปเบ•เปˆเบžเบงเบเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบ–เบดเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆ (เปเบฅเบฐ / เบซเบผเบทเบžเบงเบเป€เบฎเบปเบฒเบˆเปˆเบฒเบเบ„เปˆเบฒเบกเบฑเบ™).

เบเบธเบ”เบ—เบฐเบชเบฒเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เปเบกเปˆเบ™เบซเบเบฑเบ‡?

  1. เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰ เบšเปเปˆเบชเบฐเบญเบฒเบ”. เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบกเบฑเบ™เบเปเปˆเบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบˆเปˆเบฒเบเป€เบ‡เบดเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบžเบทเป‰เบ™เบ—เบตเปˆเบžเบดเป€เบชเบ”เบเปˆเบงเบฒเบเบฒเบ™เปเบเป‰เบšเบฑเบ™เบซเบฒเปเบ—เบฑเบเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡. เปเบ•เปˆเบ™เบตเป‰เบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ–เบดเบ‡เบˆเบธเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™.
  2. เบฃเบตเป€เบŠเบฑเบ”เป€เบ•เบฑเบก. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฅเบถเบšเบฎเบนเบšเบžเบฒเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆเบžเบฝเบ‡เปเบ•เปˆเบฎเบนเบšเบ›เบฐเบˆเบธเบšเบฑเบ™เปƒเบ™เบฅเบฐเบšเบปเบš CI, เบšเบฑเบ™เบซเบฒเบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™. เบ–เป‰เบฒเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบซเบกเปˆเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”, เบฎเบนเบšเบžเบฒเบšเปƒเบซเบกเปˆเบˆเบฐเบ–เบทเบเป‚เบซเบฅเบ”เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™ - เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเป‚เบ”เบเปƒเบœ. เบ™เบตเป‰เบ‚เป‰เบฒเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰.
  3. เบชเบตเบ‚เบฝเบงเบชเบตเบŸเป‰เบฒ. เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบญเบฑเบ™เปœเบถเปˆเบ‡เป€เบฅเบตเปˆเบกเบฅเบปเป‰เบ™ - เบžเบงเบเป€เบฎเบปเบฒเบญเบฑเบšเป‚เบซเบฅเบ”เบฎเบนเบšเบžเบฒเบšเปƒเบชเปˆเบšเปˆเบญเบ™เบญเบทเปˆเบ™. เบšเบฑเบ™เบซเบฒเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ: เบขเบนเปˆเบ—เบตเปˆเบˆเบธเบ”เปƒเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเป‰เบฒเบ‡เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบฅเบปเป‰เบ™?
  4. เบ•เบฒเบกเป€เบงเบฅเบฒ. เบฅเบถเบšเบฎเบนเบšเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเป€เบเบปเปˆเบฒเบเบงเปˆเบฒ 1 เป€เบ”เบทเบญเบ™เบญเบญเบเบšเป? เปเบ•เปˆเปเบ™เปˆเบ™เบญเบ™เบˆเบฐเบกเบตเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบชเปเบฒเบฅเบฑเบšเป€เบ”เบทเบญเบ™ ...
  5. เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ เบเปเบฒเบ™เบปเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบถเบšเปเบฅเป‰เบง.

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

เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบซเบเบฑเบ‡ werf? เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒ:

  1. Git head: tags เบ—เบฑเบ‡เบซเบกเบปเบ”, เบ—เบธเบเบชเบฒเบ‚เบฒ - เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ–เบทเบ tagged เปƒเบ™ Git เปƒเบ™เบฎเบนเบšเบžเบฒเบšเบ•เปˆเบฒเบ‡เป† (เปเบฅเบฐเบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบถเบšเบกเบฑเบ™เบขเบนเปˆเปƒเบ™ Git เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡);
  2. เบเบฑเบเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบ›เบฐเบˆเบธเบšเบฑเบ™เบ–เบทเบเบชเบนเบšเบญเบญเบเป„เบ› Kubernetes;
  3. ReplicaSets เป€เบเบปเปˆเบฒ (เบชเบดเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเป€เบกเบทเปˆเบญเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰), เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเปเบเบ™ Helm เบ›เปˆเบญเบเปเบฅเบฐเป€เบฅเบทเบญเบเบฎเบนเบšเบžเบฒเบšเบซเบฅเป‰เบฒเบชเบธเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

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

เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™

เบเบฒเบ™เบ›เบฐเบเบฒเบ”เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰

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

  1. เบ•เบปเบงเบฅเบฐเบšเบธ;
  2. เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™;
  3. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบซเบผเบฒเบ;
  4. เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบกเบตเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบ›เบฐเบˆเบธเบšเบฑเบ™;
  5. เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ webhook เป€เบ‚เบปเป‰เบฒ;
  6. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบ•เปˆเบฒเบ‡เป† (เปเบฅเบฐเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ).

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบเบฒเบ™เบเบณเบ™เบปเบ”เบ„เปˆเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเปเปˆเบ›เบฐเบเบปเบ”เบ‚เบถเป‰เบ™ (เปƒเบซเบกเปˆ), เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆเป€เบญเบปเบฒเปเบฅเบฐเบ‚เบฝเบ™เบ—เบฑเบšเบ›เบฐเบˆเบธเบšเบฑเบ™, "เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”" เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฑเบšเบกเบฑเบ™ (เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”). เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš เปƒเบซเบกเปˆ เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ—เบตเปˆโ€‹เปƒเบŠเป‰โ€‹เบชเบธเบ”โ€‹เบ—เป‰เบฒเบ (เบ™เบณเปƒเบŠเป‰เบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบ) เปเบฅเบฐเบกเป‰เบงเบ™เปƒเบชเปˆ เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ” เป„เบ”เป‰เบฎเบฑเบš patch.

เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบเบฒเบ™เบฎเบงเบก 2 เบ—เบฒเบ‡. เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™ Helm.

เบเบฑเบ‡เบกเบต เบเบฒเบ™เบฎเบงเบก 3 เบ—เบฒเบ‡, เบŠเบถเปˆเบ‡โ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹เปƒเบ™โ€‹เบ™เบฑเป‰เบ™โ€‹:

  • เบ›เบฝเบšเบ—เบฝเบš เบ™เบณเปƒเบŠเป‰เบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบ ะธ เปƒเบซเบกเปˆ, เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ–เบทเบเบฅเบถเบšเบ–เบดเป‰เบก;
  • เบ›เบฝเบšเบ—เบฝเบš เปƒเบซเบกเปˆ ะธ เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบซเบผเบทเบ›เปˆเบฝเบ™เปเบ›เบ‡;
  • patch summed เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบš เบ”เปเบฒเบฅเบปเบ‡เบŠเบตเบงเบดเบ”.

เบžเบงเบเป€เบฎเบปเบฒเบ™เบณเปƒเบŠเป‰ 1000+ เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเปˆเบ™เบเบฑเบš Helm, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบกเบตเบŠเบตเบงเบดเบ”เบขเบนเปˆเบเบฑเบšเบเบฒเบ™เบฅเบงเบกเบ•เบปเบงเปเบšเบš 2 เบ—เบฒเบ‡. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เบกเบตเบˆเปเบฒเบ™เบงเบ™เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปเบเป‰เป„เบ‚เบ”เป‰เบงเบ patches เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰ Helm เป€เบฎเบฑเบ”เบงเบฝเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด.

เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡

เบซเบผเบฑเบ‡เบˆเบฒเบเบฅเบฐเบšเบปเบš CI เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบš Kubernetes เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป€เบซเบ”เบเบฒเบ™เบ•เปเปˆเป„เบ›, เบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ (เบชเบฐเบซเบกเบฑเบ) to a cluster โ€” เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ Helm เบซเบผเบทโ€‹ kubectl apply. เบ•เปเปˆเป„เบ›, เบเบฒเบ™เบฅเบงเบก N-way เบ—เบตเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปเบฅเป‰เบงเบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™, เป€เบŠเบดเปˆเบ‡ Kubernetes API เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบญเบฐเบ™เบธเบกเบฑเบ”เบเบฑเบšเบฅเบฐเบšเบปเบš CI, เปเบฅเบฐเบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰เบ‚เบญเบ‡เบกเบฑเบ™.

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบตเบšเบฑเบ™เบซเบฒเปƒเบซเบเปˆเบซเบผเบฒเบ: เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ” เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบšเปเปˆเป„เบ”เป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เบ–เป‰เบฒ Kubernetes เป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เปƒเบŠเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปเบฅเบฐ restart pods เปƒเบ™ frontend เบญเบฒเบ”เบˆเบฐเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เปƒเบ™ backend, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบฎเบธเปˆเบ™เบ•เปˆเบฒเบ‡เป†.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบžเบตเปˆเบกเป€เบ•เบตเบก - เบšเบปเบšเบ•เบดเบ”เบ•เบฒเบกเบฅเบธเบ”เบžเบดเป€เบชเบ”เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบˆเบฒเบ Kubernetes API เปเบฅเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ•เบทเปˆเบกเบญเบตเบเบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบžเบฒเบšเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Open Source เปƒเบ™ Go - cubedog (เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ›เบฐเบเบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™ เบ—เบตเปˆเบ™เบตเป‰), เป€เบŠเบดเปˆเบ‡เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เปเบฅเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ werf.

เบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡เบ•เบปเบงเบ•เบดเบ”เบ•เบฒเบกเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบš werf เป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบšเบฑเบ™เบเบฒเบเบ—เบตเปˆเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™ Deployments เบซเบผเบท StatefulSets. เบ„เปเบฒโ€‹เบšเบฑเบ™โ€‹เบเบฒเบโ€‹เบ•เบปเป‰เบ™โ€‹เบ•เป - fail-mode - เป€เบ‚เบปเป‰เบฒโ€‹เปƒเบˆโ€‹เบ„เบงเบฒเบกโ€‹เบซเบกเบฒเบโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

  • IgnoreAndContinueDeployProcess โ€” เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบฅเบฐโ€‹เป€เบฅเบตเบโ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบเบปเบโ€‹เบญเบญเบโ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ™เบตเป‰โ€‹เปเบฅเบฐโ€‹เบชเบทเบšโ€‹เบ•เปเปˆโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹;
  • FailWholeDeployProcessImmediately โ€” เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปƒเบ™โ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ™เบตเป‰โ€‹เบขเบธเบ”โ€‹เป€เบŠเบปเบฒโ€‹เบ‚เบฐโ€‹เบšเบงเบ™โ€‹เบเบฒเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹;
  • HopeUntilEndOfDeployProcess โ€” เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบซเบงเบฑเบ‡โ€‹เบงเปˆเบฒโ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เปƒเบ™โ€‹เบ•เบญเบ™โ€‹เบ—เป‰เบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป„เบ”เป‰โ€‹.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบฅเบฐเบ„เบธเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ„เปเบฒเบšเบฑเบ™เบเบฒเบเบ™เบตเป‰ fail-mode:

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

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

เบกเบตเบชเบญเบ‡เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบš kubedog เปƒเบ™ werf:

  • failures-allowed-per-replica โ€” เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบซเบผเบธเบ”โ€‹เบฅเบปเบ‡โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™ replica เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบปเบ™โ€‹;
  • show-logs-until โ€” เบ„เบงเบšเบ„เบธเบกเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบˆเบปเบ™เบเปˆเบงเบฒ werf เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™ (เปƒเบ™ stdout) เบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ” rolled เบญเบญเบเบเบฑเบ. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™ PodIsReady (เป€เบžเบทเปˆเบญเบšเปเปˆเบชเบปเบ™เปƒเบˆเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบกเบทเปˆเบญเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฒเบฎเบญเบ” pod), เปเบ•เปˆเบ„เปˆเบฒเบเบฑเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡: ControllerIsReady ะธ EndOfDeploy.

เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบเบฑเบ‡เบญเบตเบเปเบ”เปˆเบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡?

เบ™เบญเบ เป€เปœเบทเบญ เป„เบ›เบˆเบฒเบเบชเบญเบ‡เบˆเบธเบ”เบ—เบตเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเบขเบฒเบ:

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

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

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

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเบซเบฅเบธเบš:

werf - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes (เบžเบฒเบšเบฅเบงเบกเปเบฅเบฐเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบงเบดเบ”เบตเป‚เบญ)

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

เบงเบดเบ”เบตเป‚เบญ เปเบฅเบฐเบชเบฐเป„เบฅเป‰

เบงเบดเบ”เบตเป‚เบญเบˆเบฒเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡ (~47 เบ™เบฒเบ—เบต):

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เบšเบปเบ”โ€‹เบฅเบฒเบโ€‹เบ‡เบฒเบ™โ€‹:

PS

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบญเบทเปˆเบ™เป†เบเปˆเบฝเบงเบเบฑเบš Kubernetes เปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™