αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ 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 αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‡αžΆαž˜αž½αž™αžœαžΆαŸ”

αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž‚αžΊαžŸαŸŠαžΆαŸ†αž“αžΉαž„αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαžΌαž˜αž–αž·αž…αžΆαžšαžŽαžΆαž–αžΈαž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž‘αžΌαž‘αŸ… αž–αŸ„αž›αž‚αžΊαž§αŸ” αžŠαŸ„αž™αž˜αž·αž“αž™αŸ„αž„αž‘αŸ…αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ αž“αž·αž„ Docker Hub αŸ”

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ monolithicαž˜αž€αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž˜αž½αž™ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αž·αž“αž˜αžΆαž“αžŸαŸ†αžŽαž½αžšαž’αŸ’αžœαžΈαž‘αŸ αž αžΎαž™αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžšαžΌαž”αž—αžΆαž–αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž€αž»αž„αžαžΊαž“αŸαžšαžšαž”αžŸαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αŸ”

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‡αžΆαžŸαž˜αžΆαžŸαž’αžΆαžαž»αž‡αžΆαž…αŸ’αžšαžΎαž“ αžŸαŸαžœαžΆαž˜αžΈαž€αŸ’αžšαžΌαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαŸ” αž“αŸ…αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžŠαžΆαž‰αž’αž˜αŸ’αž˜αžαžΆαžŠαŸ‚αž›αž˜αžΆαž“αžšαžΌαž”αž—αžΆαž–αž–αžΈαžšαŸ– frontend ΠΈ backend - αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αž‚αžΊαŸ–

  1. αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžšαžΌαž”αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ–

    αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ monorepo αž“αž·αž„ multirepo αž“αŸ…αž€αŸ’αž“αž»αž„ werf αž“αž·αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž› Docker Registry αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‡αžΆαž˜αž½αž™αžœαžΆαŸ”

  2. αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž˜αž½αž™ αž αžΎαž™αž–αž·αž…αžΆαžšαžŽαžΆαžˆαŸ’αž˜αŸ„αŸ‡αžšαžΌαž”αž—αžΆαž–αž€αŸ’αž“αž»αž„αžŸαŸ’αž›αžΆαž€ αž§αž‘αžΆαž αžšαžŽαŸαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

    αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ monorepo αž“αž·αž„ multirepo αž“αŸ…αž€αŸ’αž“αž»αž„ werf αž“αž·αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž› Docker Registry αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‡αžΆαž˜αž½αž™αžœαžΆαŸ”

NBαŸ– αžαžΆαž˜αž–αž·αžαž‘αŸ… αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‡αžΆαž˜αž½αž™αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” PROJECT-frontend ΠΈ PROJECT-backendαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž–αž·αž…αžΆαžšαžŽαžΆαžœαžΆαž‘αŸ αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αŸƒαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš αž€αžΆαžšαžšαŸ€αž”αž…αŸ† αž“αž·αž„αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžŸαž·αž‘αŸ’αž’αž·αžšαžœαžΆαž„αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”

αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš werf

αžŠαŸ†αž”αžΌαž„αž‘αžΎαž™ werf αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αž›αž½αž“αžœαžΆαž‘αŸ…αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ - αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’ αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡αŸ” αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž€αŸ†αžŽαŸ‚ v1.0.4-alpha.3αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž„αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡ αžŸαŸ†αž”αž»αž€αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž‘αŸαŸ”αž αžΎαž™ Docker Hub αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž–αž½αž€αž‚αŸαŸ” αž…αžΆαž”αŸ‹αž–αžΈαž…αŸ†αžŽαž»αž…αž“αŸ„αŸ‡αž˜αž€ αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαžšαž”αŸ€αž”αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžšαžΌαž”αž—αžΆαž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž˜αžΆαž“αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž‡αž˜αŸ’αžšαžΎαžŸ --images-repo-mode=multirepo|monorepo (αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ multirepo, i.e. αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹) αŸ” αžœαžΆαž€αŸ†αžŽαžαŸ‹αž›αŸ†αž“αžΆαŸ†αžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αŸ” αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžšαž”αŸ€αž”αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž αžΎαž™αž’αŸ’αžœαžΈαŸ—αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αžΉαž„αž“αŸ…αžαŸ‚αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”

αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž‡αž˜αŸ’αžšαžΎαžŸ werf αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αž’αžαŸαžšβ€‹αž”αžšαž·αžŸαŸ’αžαžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI/CD αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αžšαž”αŸ€αž”αž•αŸ’αž‘αž»αž€αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‡αžΆαžŸαž€αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ” αž§αž‘αžΆαž αžšαžŽαŸ, αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ GitLab αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž“αŸ’αžαŸ‚αž˜αž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αŸ– αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ -> CI / CD -> αž’αžαŸαžšαŸ– WERF_IMAGES_REPO_MODE: multirepo|monorepo.

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžšαžΌαž”αž—αžΆαž– αž“αž·αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž™αŸ‰αžΆαž„αž›αž˜αŸ’αž’αž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž―αž€αžŸαžΆαžšαž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αŸ– αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™ ΠΈ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžšαž”αŸ€αž”αž€αŸ†αžŽαžαŸ‹αžαŸ‚αž‚αŸ†αžšαžΌαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžšαžΌαž”αž—αžΆαž–αŸ”

αž’αžΆαžšαž€αŸ’αžŸαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž

αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž“αž·αž„αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž…αž˜αŸ’αž”αž„αž“αŸ…αž–αŸαž›αž”αž“αŸ’αžαŸ‚αž˜αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž•αŸ’αž‘αž»αž€αžαŸ’αž˜αžΈαž‚αžΊαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαžŸαž˜αŸ’αž’αžΆαžαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡ (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž»αžαž„αžΆαžšαžŸαž˜αŸ’αž’αžΆαžαžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ„αž™ werf αžŸαžΌαž˜αž˜αžΎαž› αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αž’αžΆαž).

αž“αŸ…αž–αŸαž›αžŸαž˜αŸ’αž’αžΆαž werf αž‚αž·αžαž‚αžΌαžšαž’αŸ†αž–αžΈαžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αž€αŸαžŠαžΌαž…αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ„αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžŸαŸ’αž›αžΆαž€αž‘αŸ…αž‡αžΆαž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαŸ” αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ–

  1. αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αž 3 αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ„αž™ Git primitives αžŠαžΌαž…αž‡αžΆ tag, branch, and commit;
  2. αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžš 1 αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αž›αžΆαž€αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžαžΆαž˜αž’αŸ†αž–αžΎαž…αž·αžαŸ’αžαŸ”

αž™αžΎαž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŸαŸ’αž›αžΆαž€αž“αŸ…αž–αŸαž›αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžšαžΌαž”αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αž›αžΆαž€αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ” αž’αžαŸ’αžαž“αŸαž™αžαŸ’αž›αž½αž“αžœαžΆαž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αŸαž αŸ…αžαžΆ αžŸαŸ’αž›αžΆαž€αž˜αŸαžαžΆ - αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž’αž“αž»αžœαžαŸ’αžαž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž“αŸ…αž–αŸαž›αž›αž»αž”αžŸαžΆαžαžΆ αž¬αžŸαŸ’αž›αžΆαž€αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„ Git αžœαžΆαž‡αžΆαž‘αžΌαž‡αžΈαžαž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž›αž»αž”αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’ αž˜αž·αž“αž”αŸ’αžšαžΎ αžšαžΌαž”αž—αžΆαž–αž–αžΈαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αžŠαŸ„αž™αž•αŸ’αž“αŸ‚αž€αž“αŸƒαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž“αŸ…αž–αŸαž›αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž˜αž½αž™ (monorepo) αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αž›αžΆαž€αžšαžΌαž”αž—αžΆαž– αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαžŸαŸ’αž›αžΆαž€αž˜αŸαžαžΆ αžˆαŸ’αž˜αŸ„αŸ‡αžšαžΌαž”αž—αžΆαž–αž€αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž•αž„αžŠαŸ‚αžšαŸ– PROJECT:frontend-META-TAG. αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž”αŸ‚αž€αž–αž½αž€αžœαžΆ αž™αžΎαž„αž˜αž·αž“αž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αžŸαž‰αŸ’αž‰αžΆαž”αŸ†αž”αŸ‚αž€αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžŽαžΆαž˜αž½αž™αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž“αŸ’αžαŸ‚αž˜αžαž˜αŸ’αž›αŸƒαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‘αŸ…αžŸαŸ’αž›αžΆαž€αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αž–αŸαž›αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αŸ”

NBαŸ– αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž˜αžΎαž›αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž”αŸ’αžšαž—αž– werf αž“αŸ„αŸ‡αž…αŸ†αžŽαž»αž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αžΆαž…αž‡αžΆ αž€αžΆαžšαž·αž™αžΆαž›αŸαž™αž‘αž‘αž½αž›αž‡αŸ†αž“αž½αž™αž•αŸ’αž‘αžΆαž›αŸ‹ 1684.

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž…αŸ†αž–αŸ„αŸ‡αž”αž‰αŸ’αž αžΆ αž“αž·αž„αž™αž»αžαŸ’αžαž·αž€αž˜αŸ’αž˜αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸαŸ– αž’αŸ†αž–αžΈαž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€ αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αžŸαŸ’αž›αžΆαž€ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž‘αžΆαŸ†αž„αž˜αžΌαž› - αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž›αž˜αŸ’αž’αž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡αžŠαŸ„αž™ Dmitry StolyarovαŸ– "werf αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI/CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes"αŸ”

αžŸαž„αŸ’αžαŸαž”

αž€αž„αŸ’αžœαŸ‡αž“αŸƒαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžαŸ’αžαžΆαžšαžΆαžšαžΆαŸ†αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„ αž¬αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ werf αžŠαŸ‚αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž™αžΎαž„αž“αŸ„αŸ‡αž‘αŸ - αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž’αŸ’αž“αž€αžαŸ‚αž„αžαŸ‚αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž“αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈαžšαžΌαž”αž—αžΆαž–αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ (αž¬αž”αŸ’αžαžΌαžšαž‘αŸ…αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈαž€αž»αž„αžαžΊαž“αŸαžšαžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸ…αž€αŸ’αž“αž»αž„ Google Cloud) ... αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αžΆαžšαžŠαž€αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž”αŸ‚αž”αž“αŸαŸ‡αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžŸαž˜αž αŸαžαž»αžŸαž˜αž•αž› αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž§αž”αž€αžšαžŽαŸαž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‡αžΆαž„αž˜αž»αž“ αžŸαž αž‚αž˜αž“αŸ DevOps αž€αžΆαž“αŸ‹αžαŸ‚αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αŸ” αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžœαžΆ αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžˆαž˜αž˜αž»αžαž“αžΉαž„αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž…αž˜αŸ’αž”αž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αž’αžΆαžαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžšαž½αž…αžšαžΆαž›αŸ‹ αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹αžŠαŸ‚αž›αžŠαžΉαž„αžαžΆαžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹ αž αžΎαž™αž™αžΎαž„ (αž‡αžΆαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„) αž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž‘αŸαŸ”

αžŸαŸ’αž“αžΆαž€αŸ‹αž“αŸ…αž‡αžΆαž˜αž½αž™αž™αžΎαž„ αž αžΎαž™αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αŸ†αž–αžΈαž€αžΆαžšαž…αŸ’αž“αŸƒαž”αŸ’αžšαžŒαž·αžαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„ werf!

PS

αžŸαžΌαž˜αž’αžΆαž“αž•αž„αžŠαŸ‚αžšαž“αŸ…αž›αžΎαž”αŸ’αž›αž€αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

αž”αŸ’αžšαž—αž–: www.habr.com

αž‘αž·αž‰αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS, αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS πŸ”₯ αž‘αž·αž‰αžŸαŸαžœαžΆαž”αž„αŸ’αž αŸ„αŸ‡αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS | ProHoster