αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž›αžΆαž€β€‹αž•αŸ’αž’αŸ‚αž€αž›αžΎβ€‹αžαŸ’αž›αžΉαž˜αžŸαžΆαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž”αž„αŸ’αž€αžΎαž werfαŸ– αž αŸαžαž»αž’αŸ’αžœαžΈ αž“αž·αž„β€‹αžšαž”αŸ€αž”β€‹αžŠαŸ‚αž›β€‹αžœαžΆβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš?

αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž›αžΆαž€β€‹αž•αŸ’αž’αŸ‚αž€αž›αžΎβ€‹αžαŸ’αž›αžΉαž˜αžŸαžΆαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž”αž„αŸ’αž€αžΎαž werfαŸ– αž αŸαžαž»αž’αŸ’αžœαžΈ αž“αž·αž„β€‹αžšαž”αŸ€αž”β€‹αžŠαŸ‚αž›β€‹αžœαžΆβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš?

werf αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ GitOps CLI αž”αžΎαž€αž…αŸ†αž αžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αžŸαžΆαž„ αž“αž·αž„αž”αž‰αŸ’αž‡αžΌαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ… Kubernetes αŸ” IN αž…αŸαž‰αž•αŸ’αžŸαžΆαž™ v1.1 αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ’αžšαž˜αžΌαž›αžšαžΌαž”αž—αžΆαž–αŸ– αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžšαžΌαž”αž—αžΆαž–αžαžΆαž˜αžαŸ’αž›αžΉαž˜αžŸαžΆαžš ឬ αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αž•αŸ’αž’αŸ‚αž€αž›αžΎαž˜αžΆαžαž·αž€αžΆ. αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αž’αž˜αŸ’αž˜αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ werf αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™ Git tag, Git branch ឬ Git commit αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž˜αžΆαž“αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αžŠαŸ„αž™αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžαŸ’αž˜αžΈαŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈαžœαžΆ αž“αž·αž„αž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αžœαžΆαž›αŸ’αž’αžαŸ’αž›αžΆαŸ†αž„αž‚αžΊαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž€αžΆαžαŸ‹αŸ”

αž€αžΆαžšαžŠαžΆαž€αŸ‹αž…αŸαž‰αž“αžΌαžœαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž˜αžΈαž€αŸ’αžšαžΌαž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„ Git αž˜αž½αž™αŸ”

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

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

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžαžΆαž˜αž€αžΆαžšαž–αž·αž αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‡αžΆαžšαžΏαž™αŸ—αž”αŸ†αž”αŸ‚αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ‚αž˜αž½αž™αž‘αŸ…αž‡αžΆαžŸαŸαžœαžΆαž˜αžΈαž€αŸ’αžšαžΌαž‡αžΆαž…αŸ’αžšαžΎαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžƒαŸ’αž›αžΆαŸ†αž„ αž“αž·αž„αž‚αž˜αŸ’αžšαŸ„αž„αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αž“αžΆ ... αž‚αžΊαž‡αžΆαž€αžΆαžšαž αž½αžŸαž€αž˜αŸ’αžšαž·αžαž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ” αžœαžΆαž‚αžΊαž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸαŸ‡αžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαŸ– αžŸαŸαžœαžΆαž˜αžΈαž€αŸ’αžšαžΌαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‡αžΆαž…αŸ’αžšαžΎαž“αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž‚αž˜αŸ’αžšαŸ„αž„αžαŸ‚αž˜αž½αž™ αž αžΎαž™αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž€αžΎαžαž‘αžΎαž„αžαžΆαž˜αžšαž™αŸˆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ‚αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ CI/CD αŸ”

αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ„αž™αžŸαžΆαžαžΆ Git αž“αž·αž„αžŸαŸ’αž›αžΆαž€ Git

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

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

  • myregistry.org/myproject/frontend:v1.1.10
  • myregistry.org/myproject/myservice1:v1.1.10
  • myregistry.org/myproject/myservice2:v1.1.10
  • myregistry.org/myproject/myservice3:v1.1.10
  • myregistry.org/myproject/myservice4:v1.1.10
  • myregistry.org/myproject/myservice5:v1.1.10
  • myregistry.org/myproject/database:v1.1.10

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

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

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

αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ„αž™ Git commit

werf αž€αŸαž˜αžΆαž“αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„ Git commits αž•αž„αžŠαŸ‚αžšαŸ”

Git-commit αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„ Git αž αžΎαž™αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž”αŸ’αžšαžœαžαŸ’αžαž·αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž―αž€αžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ Git αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžšαžΌαž”αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„ Docker Registry αŸ”

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ„αž™ Git commit αž˜αžΆαž“αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ„αž™αžŸαžΆαžαžΆ Git ឬ Git tagsαŸ–

  • αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž‘αž‘αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ‚αž›αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž―αž€αžŸαžΆαžšαžŽαžΆαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαŸ’αž›αžΆαž€ Docker αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”
  • αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ‚αž›αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž―αž€αžŸαžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαŸ’αž›αžΆαž€ Docker αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”
  • αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αžŠαŸ‚αž›αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„ Git αžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž“αžΆαŸ†αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– αž αžΎαž™αžŸαŸ’αž›αžΆαž€ Docker αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž˜αŸ’αžαž„αž‘αŸ€αžαŸ”

αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžˆαŸ’αž˜αŸ„αŸ‡αžŸαžΆαžαžΆ Git αž˜αž·αž“αž†αŸ’αž›αž»αŸ‡αž”αž‰αŸ’αž…αžΆαŸ†αž„αž–αžΈαž€αŸ†αžŽαŸ‚αžšαžΌαž”αž—αžΆαž–αž‘αŸαŸ”

αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž˜αž½αž™αž‘αŸ€αžαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαžΆαžαžΆ Git αŸ”

αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž›αžΆαž€β€‹αžαžΆαž˜β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžŸαžΆαžαžΆβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αžŠαžšαžΆαž”αžŽαžΆβ€‹αž€αžΆαžšβ€‹αž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžβ€‹αž“αŸ…β€‹αž›αžΎβ€‹αžŸαžΆαžαžΆβ€‹αž“αŸ„αŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαž˜αžΌαž›β€‹αžαžΆαž˜β€‹αž›αŸ†αžŠαžΆαž”αŸ‹β€‹αžαžΆαž˜β€‹αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ”

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

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αž αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžšαž»αž‰αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžαžΆαž˜αž½αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžšαž™αŸˆαž–αŸαž›αžαŸ’αž›αžΈαžšαžœαžΆαž„αž–αž½αž€αžœαžΆ αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž…αžΆαžŸαŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αž‡αžΆαž„αžšαžΌαž”αž—αžΆαž–αžαŸ’αž˜αžΈαž‡αžΆαž„αž“αŸαŸ‡αŸ– αž€αŸ†αžŽαŸ‚αž…αžΆαžŸαŸ‹αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž“αžΉαž„αžŸαžšαžŸαŸαžšαž‡αžΆαž“αŸ‹αž›αžΎαžαŸ’αž˜αžΈαž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαŸ’αž›αžΆαž€αžŸαžΆαžαžΆ Git αŸ” αž”αž‰αŸ’αž αžΆαž”αŸ‚αž”αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ„αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI/CD (αž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ GitLab CI αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹)αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αž·αž“αž˜αŸ‚αž“αž‚αŸ’αžšαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΆαŸ†αž‘αŸ’αžšαžšαžΏαž„αž“αŸαŸ‡αž‘αŸ αž αžΎαž™αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžœαž·αž’αžΈαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‡αžΆαž„αž“αŸαŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž”αŸ‚αž”αž“αŸαŸ‡αŸ”

αžαžΎβ€‹αž’αŸ’αžœαžΈβ€‹αž‘αŸ…β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž›αžΆαž€β€‹αž•αŸ’αž’αŸ‚αž€β€‹αž›αžΎβ€‹αž˜αžΆαžαž·αž€αžΆ?

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž’αŸ’αžœαžΈβ€‹αž‘αŸ…β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž›αžΆαž€β€‹αžαžΆαž˜β€‹αž˜αžΆαžαž·αž€αžΆβ€‹αž‚αžΊβ€‹αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž›αžΆαž€β€‹αžšαžΌαž”αž—αžΆαž–β€‹αžαžΆαž˜β€‹αž˜αžΆαžαž·αž€αžΆαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž Docker tags αžœαžΆαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆ Git primitives (Git branch, Git tag...) αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆ checksum αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αŸ–

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

αžŸαŸ’αž›αžΆαž€αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž”αŸ‚αž”αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αŸαž αŸ…αžαžΆ αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαž†αžΆαž€αžšαžΌαž”αž—αžΆαž–.

αžšαžΌαž”αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž”αžŽαŸ’αžαž»αŸ†αž“αŸƒαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αŸ– from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch αž›αŸ” αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ‚αž›αž†αŸ’αž›αž»αŸ‡αž”αž‰αŸ’αž…αžΆαŸ†αž„αž–αžΈαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆ βˆ’ αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαž†αžΆαž€ (αž αžαŸ’αžαž›αŸαžαžΆαž›αžΎαž†αžΆαž€).

αžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžŠαŸ‚αž›αž˜αžΆαž“αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ„αž™αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αŸαž αŸ…αžαžΆαž αžαŸ’αžαž›αŸαžαžΆαž“αŸƒαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΆαŸ†αž„αž“αŸαŸ‡ - αž αžαŸ’αžαž›αŸαžαžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›, - αžŠαŸ‚αž›αž‡αžΆαž‘αžΌαž‘αŸ…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αžšαž”αŸ‹αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαžšαžΌαž”αž—αžΆαž–αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ—αž–αžΈαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ werf.yaml αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‘αžΌαž‘αŸ… αžœαžΆαž“αžΉαž„αž˜αžΆαž“αž αžαŸ’αžαž›αŸαžαžΆαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžœαžΆ αž αžΎαž™αžαžΆαž˜αž“αŸ„αŸ‡ αžŸαŸ’αž›αžΆαž€ Docker αŸ”

αž αžαŸ’αžαž›αŸαžαžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αŸ–

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

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŠαŸ‚αž›αž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ† αž“αž·αž„αž‡αžΆαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž“αŸ…αž€αŸ’αž“αž»αž„ werf αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αžšαž”αŸ€αž”αž”αžΎαž€ αž“αž·αž„αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„ werf

αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž₯αž‘αžΌαžœαž“αŸαŸ‡αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” werf publish: --tag-by-stages-signature=true|false

αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŠαŸ„αž™αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ werf ci-env. αž–αžΈαž˜αž»αž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαŸ” werf ci-env --tagging-strategy=tag-or-branch. αž₯αž‘αžΌαžœαž“αŸαŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ werf ci-env --tagging-strategy=stages-signature αž¬αž˜αž·αž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸαŸ‡ werf αž“αžΉαž„αž”αŸ’αžšαžΎαž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ stages-signature. αž€αŸ’αžšαž»αž˜ werf ci-env αž“αžΉαž„αž€αŸ†αžŽαžαŸ‹αž‘αž„αŸ‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· werf build-and-publish (ឬ werf publish) αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‘αŸαŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ–

werf publish --stages-storage :local --images-repo registry.hello.com/web/core/system --tag-by-stages-signature

...αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

  • registry.hello.com/web/core/system/backend:4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d
  • registry.hello.com/web/core/system/frontend:f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6

αžœαžΆαž‚αžΊαž‡αžΆαž€αžΆαžš 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d αž‚αžΊαž‡αžΆαž αžαŸ’αžαž›αŸαžαžΆαž“αŸƒαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαžšαžΌαž”αž—αžΆαž– backendαž“αž·αž„ f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - αž αžαŸ’αžαž›αŸαžαžΆαž“αŸƒαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžšαžΌαž”αž—αžΆαž– frontend.

αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαž–αž·αžŸαŸαžŸ werf_container_image ΠΈ werf_container_env αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ†αžšαžΌ HelmαŸ– αž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαžˆαŸ’αž˜αŸ„αŸ‡αžšαžΌαž”αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CIαŸ–

type multiwerf && source <(multiwerf use 1.1 beta)
type werf && source <(werf ci-env gitlab)
werf build-and-publish|deploy

αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαŸ–

αžŸαžšαž»αž”

  • αž‡αž˜αŸ’αžšαžΎαžŸαžαŸ’αž˜αžΈαŸ” werf publish --tag-by-stages-signature=true|false.
  • αžαž˜αŸ’αž›αŸƒαž‡αž˜αŸ’αžšαžΎαžŸαžαŸ’αž˜αžΈαŸ” werf ci-env --tagging-strategy=stages-signature|tag-or-branch (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‘αŸ αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž“αžΉαž„αž˜αžΆαž“ stages-signature).
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αŸ’αž›αžΆαž”αŸ‹αž”αŸ’αžšαžΎαž‡αž˜αŸ’αžšαžΎαžŸαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Git commits (WERF_TAG_GIT_COMMIT αž¬αž‡αž˜αŸ’αžšαžΎαžŸ werf publish --tag-git-commit COMMIT) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž”αŸ’αžαžΌαžšαž‘αŸ…αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€ αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› - αž αžαŸ’αžαž›αŸαžαžΆ.
  • αžœαžΆαž‡αžΆαž€αžΆαžšαž›αŸ’αž’αž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž˜αž»αž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžαžΌαžšαž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αž˜αžΈαž—αŸ’αž›αžΆαž˜αŸ—αž‘αŸ…αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αžαŸ’αž˜αžΈαŸ”
  • αž“αŸ…αž–αŸαž›αž•αŸ’αž‘αŸαžšαž‘αŸ… werf 1.1 αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž”αŸ’αžαžΌαžšαž‚αž˜αŸ’αžšαŸ„αž„αž…αžΆαžŸαŸ‹αž‘αŸ…αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŸαŸ’αž›αžΆαž€αžαŸ’αž˜αžΈ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αžΆαžŸαŸ‹ αžŸαŸ’αž›αžΆαž€αž¬αžŸαžΆαžαžΆ αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαŸ”

αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αž•αŸ’αž’αŸ‚αž€αž›αžΎαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αŸ–

  • αž—αžΆαž–αž’αž“αŸ‹αž“αžΉαž„αžˆαŸ’αž˜αŸ„αŸ‡αžŸαŸ’αž›αžΆαž€ Docker αž…αŸ†αž–αŸ„αŸ‡ Git commits αž‘αž‘αŸαŸ”
  • αž—αžΆαž–αž’αž“αŸ‹αž“αŸƒαžˆαŸ’αž˜αŸ„αŸ‡αžŸαŸ’αž›αžΆαž€ Docker αž‘αŸ… Git αž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžαžŠαŸ‚αž›αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αžšαžΌαž”αž—αžΆαž–αŸ”
  • αž˜αž·αž“αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαž‡αž½αžŸαž‡αž»αž›αž€αŸ†αžŽαŸ‚αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΎαž„αžœαž·αž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Git αž…αžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαžΆαžαžΆ Git αŸ”

αž”αŸ’αžšαžΎβ€‹αžœαžΆ! αž αžΎαž™αž€αž»αŸ†αž—αŸ’αž›αŸαž…αž˜αž€αž›αŸαž„αž™αžΎαž„αž“αŸ… GitHubαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž αžΆ αž¬αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ αž”αž“αŸ’αžαŸ‚αž˜αž”αžΌαž€ αž”αž„αŸ’αž€αžΎαž PR αž¬αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž˜αžΎαž›αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αž˜αŸ’αžšαŸ„αž„αŸ”

PS

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

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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹