เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ monorepo เปเบฅเบฐ multirepo เปƒเบ™ werf เปเบฅเบฐ Docker Registry เบกเบตเบซเบเบฑเบ‡เปเบ”เปˆเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™

เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ monorepo เปเบฅเบฐ multirepo เปƒเบ™ werf เปเบฅเบฐ Docker Registry เบกเบตเบซเบเบฑเบ‡เปเบ”เปˆเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™

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

เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ mono-repo เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ‚เบญเบ‡ werf เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰. เปเบ•เปˆเบ—เปเบฒเบญเบดเบ”, เปƒเบซเป‰เบ„เบดเบ”เบญเบญเบเบงเบดเบ—เบตเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ™เบตเป‰เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ werf เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆ Docker Registry เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบกเบฑเบ™ ...

เบšเบฑเบ™เบซเบฒ

เบ‚เปเปƒเบซเป‰เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เบšเปเบฅเบดเบชเบฑเบ”เบกเบตเบ—เบตเบกเบ‡เบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เป€เบญเบเบฐเบฅเบฒเบ”. เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ Kubernetes เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เบ–เบทเบเบšเบฑเบ™เบˆเบธ. เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต, เบฎเบนเบšเบžเบฒเบš, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบ—เบฐเบšเบฝเบ™ (เบ—เบฐเบšเบฝเบ™). เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบšเปเบฅเบดเบชเบฑเบ”เปƒเบŠเป‰ Docker Hub เบ”เป‰เบงเบเบšเบฑเบ™เบŠเบตเบ”เบฝเบง COMPANY. เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบชเปˆเบงเบ™เปƒเบซเบเปˆ, Docker Hub เบšเปเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบˆเบฑเบ”เบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เบ‚เบญเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเบŠเป‰เบญเบ™เบเบฑเบ™, เป€เบŠเบฑเปˆเบ™โ€‹เบงเปˆเบฒ COMPANY/PROJECT/IMAGE. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงโ€ฆ เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™ monolithic เบขเบนเปˆเปƒเบ™เบ—เบฐเบšเบฝเบ™เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ™เบตเป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™?

เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ monorepo เปเบฅเบฐ multirepo เปƒเบ™ werf เปเบฅเบฐ Docker Registry เบกเบตเบซเบเบฑเบ‡เปเบ”เปˆเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™

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

เบงเบดเบ—เบตเปเบเป‰เป„เบ‚

เบ–เป‰เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ monolithic, เบกเบฒเปƒเบ™เบซเบ™เบถเปˆเบ‡เบฎเบนเบšเบžเบฒเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเบ„เปเบฒเบ–เบฒเบกเปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบ—เบถเบเบฎเบนเบšเบžเบฒเบšเบ•เปˆเบฒเบ‡เป†เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™เบšเบฑเบ™เบˆเบธเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™.

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

  1. เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบฎเบนเบšเบžเบฒเบšเปƒเบ™ repositories เปเบเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ:

    เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ monorepo เปเบฅเบฐ multirepo เปƒเบ™ werf เปเบฅเบฐ Docker Registry เบกเบตเบซเบเบฑเบ‡เปเบ”เปˆเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™

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

    เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ monorepo เปเบฅเบฐ multirepo เปƒเบ™ werf เปเบฅเบฐ Docker Registry เบกเบตเบซเบเบฑเบ‡เปเบ”เปˆเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™

NB: เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง, เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบ™ repositories เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, PROJECT-frontend ะธ PROJECT-backend, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบกเบฑเบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™, เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบเบฒเบ™เปเบˆเบเบขเบฒเบเบชเบดเบ”เบ—เบดเบฅเบฐเบซเบงเปˆเบฒเบ‡เบœเบนเป‰เปƒเบŠเป‰.

werf เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™

เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, werf เบˆเปเบฒเบเบฑเบ”เบ•เบปเบงเป€เบญเบ‡เบเบฑเบš repositories nested - เป‚เบŠเบเบ”เบต, เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰. เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบชเบฐเบšเบฑเบš v1.0.4-alpha.3, เป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ—เบฐเบšเบฝเบ™เบ—เบตเปˆ เบšเปเปˆเบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบฑเบ‡, เปเบฅเบฐ Docker Hub เปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ™เบฑเป‰เบ™. เบˆเบฒเบเบˆเบธเบ”เบ™เบตเป‰, เบœเบนเป‰เปƒเบŠเป‰เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบžเบฒเบเปƒเบ•เป‰เบ—เบฒเบ‡เป€เบฅเบทเบญเบ --images-repo-mode=multirepo|monorepo (เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ multirepo, i.e. เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เป„เบงเป‰โ€‹เปƒเบ™ repositories เบฎเบฑเบ‡โ€‹)โ€‹. เบกเบฑเบ™เบเปเบฒเบ™เบปเบ”เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบฎเบนเบšเบžเบฒเบšเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ—เบฐเบšเบฝเบ™. เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบฅเบทเบญเบเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™, เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบญเบทเปˆเบ™เบˆเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบ werf เบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป„เบ”เป‰ เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เปƒเบ™เบฅเบฐเบšเบปเบš CI / CD, เบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบปเปˆเบงเป‚เบฅเบเบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ GitLab เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบกเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™: เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ -> CI / CD -> เบ•เบปเบงเปเบ›: WERF_IMAGES_REPO_MODE: multirepo|monorepo.

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ (เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป‚เบ”เบเบฅเบฐเบญเบฝเบ”เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡: เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบœเบตเบเปเบœเปˆ ะธ เบ™เบณเปƒเบŠเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฎเบนเบšเปเบšเบšเบžเบฝเบ‡เปเบ•เปˆเบเปเบฒเบ™เบปเบ”เปเบกเปˆเปเบšเบšเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบฎเบนเบšเบžเบฒเบš.

เบกเบฒเบ™เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”

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

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

  1. 3 เบเบธเบ”เบ—เบฐเบชเบฒเบ”เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป‚เบ”เบ Git primitives เป€เบŠเบฑเปˆเบ™ tag, เบชเบฒเบ‚เบฒ, เปเบฅเบฐเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ;
  2. 1 เบเบธเบ”เบ—เบฐเบชเบฒเบ”เบชเบณเบฅเบฑเบšเปเบ—เบฑเบเบ—เบตเปˆเบเบณเบ™เบปเบ”เป€เบญเบ‡เบ•เบฒเบกเปƒเบˆเบกเบฑเบ.

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

เป€เบกเบทเปˆเบญโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เบซเบ™เบถเปˆเบ‡ repository (monorepo), เปƒเบ™เปเบ—เบฑเบเบฎเบนเบšเบžเบฒเบš, เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเปเบ—เบฑเบ meta, เบŠเบทเปˆเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰: PROJECT:frontend-META-TAG. เป€เบžเบทเปˆเบญเปเบเบเบžเบงเบเบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เปเบ™เบฐเบ™เปเบฒเบ•เบปเบงเปเบเบเบชเบฐเป€เบžเบฒเบฐ, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบกเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบซเป‰เบเบฑเบšเบ›เป‰เบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบชเบธเบ”เบ—เป‰เบฒเบเปƒเบ™เป€เบงเบฅเบฒเป€เบœเบตเบเปเบœเปˆ.

NB: เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบปเบ™เปƒเบˆเป€เบšเบดเปˆเบ‡เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ werf, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™ PR 1684.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบซเบผเบฒเบเบ•เปเปˆเบšเบฑเบ™เบซเบฒเปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: เบเปˆเบฝเบงเบเบฑเบšเบเบธเบ”เบ—เบฐเบชเบฒเบ”เบเบฒเบ™เบ•เบดเบ”เปเบ—เปเบ, เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ›เป‰เบฒเบเบŠเบทเปˆเปเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบ—เบฑเบ‡เบซเบกเบปเบ” - เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เปเบกเปˆเบ™เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”เปƒเบ™เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเป‚เบ”เบ Dmitry Stolyarov: "werf เปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบš CI / CD เปƒเบ™ Kubernetes".

เป€เบžเบทเปˆเบญเบชเบฐเบซเบผเบธเบš

เบเบฒเบ™เบ‚เบฒเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™ unnested เบšเปเปˆเปเบกเปˆเบ™เบ›เบฑเบ”เป„เบˆเบชเบฐเบเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบซเบผเบทเบœเบนเป‰เปƒเบŠเป‰ werf เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ - เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบปเบเบชเบนเบ‡เบšเบปเบ”เบšเบฒเบ”เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบฎเบนเบšเบžเบฒเบšเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ (เบซเบผเบทเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ Container Registry เบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปƒเบ™ Google Cloud) ... เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เบ–เบญเบ™เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบตเป€เบซเบ”เบœเบปเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเบฐเบ”เบงเบเบเบงเปˆเบฒเปƒเบ™เบŠเบธเบกเบŠเบปเบ™ DevOps เบ—เบตเปˆเบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบ•เบปเป‰เบ™เบ•เปเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบซเบกเปˆเบ‚เบญเบ‡เบเบปเบ™เป„เบเบเบฒเบ™เบ—เปเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบก, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบ„เบปเบ™, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒ (เปƒเบ™เบ–เบฒเบ™เบฐเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™) เบˆเบฐเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปƒเบ™เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบ•เบทเปˆเบกเบญเบตเบ.

เบขเบนเปˆเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเปƒเบ™เป„เบงเป†เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ”เบดเบ”เบชเป‰เบฒเบ‡เบญเบทเปˆเบ™เป†เปƒเบ™ werf!

PS

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

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

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