werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

αžαŸ’αž„αŸƒαž‘αžΈ 27 αžαŸ‚αž§αžŸαž—αžΆ αž“αŸ…αžŸαžΆαž›αž’αŸ†αž“αŸƒαžŸαž“αŸ’αž“αž·αžŸαžΈαž‘ DevOpsConf 2019 αžŠαŸ‚αž›αž”αŸ’αžšαžΆαžšαž–αŸ’αž’αž‘αžΎαž„αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž–αž·αž’αžΈαž”αž»αžŽαŸ’αž™ RIT++ 2019αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž•αŸ’αž“αŸ‚αž€ "αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž”αž“αŸ’αž" αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™ "werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI/CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes" αŸ” αžœαžΆαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžšαžΏαž„αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡ αž”αž‰αŸ’αž αžΆβ€‹αž“αž·αž„β€‹αž”αž‰αŸ’αž αžΆβ€‹αž”αŸ’αžšαžˆαž˜β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αžšαžΆαž›αŸ‹β€‹αž‚αŸ’αž“αžΆβ€‹αž”αŸ’αžšαžˆαž˜β€‹αž˜αž»αžβ€‹αž“αŸ…β€‹αž–αŸαž›β€‹αžŠαžΆαž€αŸ‹β€‹αž–αž„αŸ’αžšαžΆαž™β€‹αž‘αŸ… Kubernetesαž€αŸαžŠαžΌαž…αž‡αžΆαž’αŸ†αž–αžΈαž€αžΆαžš nuances αžŠαŸ‚αž›αž’αžΆαž…αž˜αž·αž“αž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž—αŸ’αž›αžΆαž˜αŸ—αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“ αž™αžΎαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  werf.

αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž’αŸ’αžœαžΎαž”αž‘αž”αž„αŸ’αž αžΆαž‰ αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„ (αž–αžΈαž˜αž»αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αžαžΆαž‡αžΆ dapp) αž”αžΆαž“αžˆαžΆαž“αžŠαž›αŸ‹αž…αŸ†αžŽαž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αž‡αžΆαž”αŸ’αžšαžœαžαŸ’αžαž·αžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸƒ αž•αŸ’αž€αžΆαž™ 1000 αž“αŸ…αž›αžΎ GitHub β€” αž™αžΎαž„αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαžŸαž αž‚αž˜αž“αŸαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαž“αž‘αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž‡αžΈαžœαž·αžαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αžŸαŸ’αžœαž€αžš DevOps αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ† αžœαžΈαžŠαŸαž’αžΌαž“αŸƒαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸ (~ៀ៧ αž“αžΆαž‘αžΈ αž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž’αžαŸ’αžαž”αž‘) αž“αž·αž„αž€αžΆαžšαžŠαž€αžŸαŸ’αžšαž„αŸ‹αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžœαžΆαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž’αžαŸ’αžαž”αž‘αŸ” αž‘αŸ…!

αž”αž‰αŸ’αž‡αžΌαž“αž›αŸαžαž€αžΌαžŠαž‘αŸ… 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. αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž™αžΎαž„αž˜αžΆαž“αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αžΆαž“αŸ” (αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αžΆαž“)αžšαžΌαž”αž—αžΆαž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž“αŸ…αž‚αŸ’αžšαž”αŸ‹αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› (αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› αž€αžΆαžšαž•αž›αž·αžαŸ” αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž˜αž½αž™αŸ”. αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡αž±αŸ’αž™αž”αžΆαž“αž›αŸ†αž’αž·αž αž“αž·αž„αž‡αžΆαž˜αž½αž™αž§αž‘αžΆαž αžšαžŽαŸαŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡.
  2. αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž™αžΎαž„αž’αŸ’αžœαžΎαžαžΆαž˜αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž€αžΌαžŠ (IaC), αž€αžΌαžŠαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αžŸαŸαž…αž€αŸ’αžαžΈαžŽαŸ‚αž“αžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ† αž“αž·αž„αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαž‚αž½αžšαžαŸ‚αž‡αžΆ αž™αŸ‰αžΆαž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž˜αž½αž™αŸ”. αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡ αžŸαžΌαž˜αž˜αžΎαž› αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžŠαžŠαŸ‚αž›.
  3. αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“ (αž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“) αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž™αžΎαž„αžƒαžΎαž‰αžœαžΆαžŠαžΌαž…αž“αŸαŸ‡αŸ– αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ† αžŸαžΆαž€αž›αŸ’αž”αž„ αž…αŸαž‰αž•αŸ’αžŸαžΆαž™ (αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž…αŸαž‰αž•αŸ’αžŸαžΆαž™) αž αžΎαž™αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαžœαžΆ - αž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αž αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αž‘αž½αž›αž”αžΆαž“αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αž”αž‰αŸ’αž…αŸαž‰αŸ” αž˜αž·αž“αž˜αžΆαž“ αž–αŸαž›β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αž”αž‰αŸ’αž‡αžΌαž“β€‹αžœαžΆβ€‹αž‘αŸ…β€‹αž•αž›αž·αžαž€αž˜αŸ’αž˜ αž αžΎαž™β€‹αž–αŸαž›β€‹αžŠαŸ‚αž›β€‹αž‚αžΆαžαŸ‹β€‹αž’αžΆαž…β€‹αž‘αŸ…β€‹αž‘αžΈαž“αŸ„αŸ‡ αž αžΎαž™β€‹αž•αž›αž·αžαž€αž˜αŸ’αž˜β€‹αž“αŸαŸ‡β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αžαŸ’αž‰αž»αŸ†β€‹αž‡αžΏβ€‹αžαžΆβ€‹αžαŸ’αžŸαŸ‚β€‹αžŸαž„αŸ’αžœαžΆαž€αŸ‹β€‹αžŠαžΉαž€β€‹αž‡αž‰αŸ’αž‡αžΌαž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αž‰αŸ’αž…αž”αŸ‹ αž˜αžΆαž“αžαŸ‚αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” (αžšαžαŸ‹)αž¬αž…αŸ’αž”αžΆαžŸαŸ‹αž‡αžΆαž„αž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž“αŸ…αž–αŸαž›αž“αŸαŸ‡αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž›αŸαžαž€αžΌαžŠαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αž–αžΈαž€αžΆαžšαž•αž›αž·αž (αž‡αŸ†αž“αž½αžŸαžœαžΆαžŠαŸ„αž™αž›αŸαžαž€αžΌαžŠαžαŸ’αž˜αžΈ)αŸ”

αž…αžΌαžšαž™αžΎαž„αžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ…αž‚αž˜αŸ’αžšαŸ„αž„αž…αŸ‚αž€αž…αžΆαž™αžαžΆαž„αž›αžΎαž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ– αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αžŠαŸ„αž™αž–αž½αž€αž™αžΎαž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαŸ„αž™αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αžαžΆαž˜αž“αŸαž™αžαŸ’αžšαž„αŸ‹αŸ” αžαžΆαž˜αž–αž·αž αž‚αŸ†αžšαžΌαž“αŸαŸ‡αž₯αž‘αžΌαžœαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ GitOps (αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž–αžΆαž€αŸ’αž™ αž“αž·αž„αž‚αŸ†αž“αž·αžαž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αžœαžΆαŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡). αžαŸ„αŸ‡αž˜αžΎαž›αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαŸ”

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŸαžΆαž„αžŸαž„αŸ‹

αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž’αŸ’αž“αž€αž’αžΆαž…αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αž“αŸ…αž†αŸ’αž“αžΆαŸ† 2019 αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž˜αž“αž»αžŸαŸ’αžŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αžŸαžšαžŸαŸαžš Dockerfiles αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” docker build?.. αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž‡αžΆαž…αŸ†αž“αž»αž…αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αŸ–

  1. αž‘αž˜αŸ’αž„αž“αŸ‹αžšαžΌαž”αž—αžΆαž– αžŸαŸ†αžαžΆαž“αŸ‹ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžΎ αž–αž αž»αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž»αž€αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αžαŸ‚αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž–αž·αžαž‡αžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”
  2. αž…αŸ†αž“αž½αž“αžŸαŸ’αžšαž‘αžΆαž”αŸ‹ αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αžšαž½αž˜αž’αž”αŸ’αž”αž”αžšαž˜αžΆαžŠαŸ„αž™αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž“αŸƒ RUN- αž”αž‰αŸ’αž‡αžΆαžŠαŸ„αž™αž’αžαŸ’αžαž“αŸαž™αŸ”
  3. αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž“αŸαŸ‡αž”αž“αŸ’αžαŸ‚αž˜αž”αž‰αŸ’αž αžΆ αž€αžΆαžšαž€αŸ‚αž€αŸ†αž αž»αžŸ, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž‚αžΆαŸ†αž„, αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αžŸαŸ’αžœαŸ‚αž„αžšαž€αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž–αžΈαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αžŠαŸ‚αž›αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαŸ”
  4. αž›αŸ’αž”αžΏαž“αžŠαŸ†αž‘αžΎαž„ αžŸαŸ†αžαžΆαž“αŸ‹αž–αŸ’αžšαŸ„αŸ‡αž™αžΎαž„αž…αž„αŸ‹αž”αž‰αŸ’αž…αŸαž‰αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž“αž·αž„αžƒαžΎαž‰αž›αž‘αŸ’αž’αž•αž›αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€αž˜αž·αž“αž…αž„αŸ‹αž”αž„αŸ’αž€αžΎαžαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž—αžΆαžŸαžΆαž‘αžΎαž„αžœαž·αž‰αž‘αŸ αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”
  5. αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„ Git αž˜αž½αž™αžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžš αžšαžΌαž”αž—αžΆαž–αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ„αž™αžŸαŸ†αžŽαž»αŸ†αž“αŸƒ Dockerfiles (αž¬αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž˜αž½αž™) αž“αž·αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž” Bash αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ”

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

  1. αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž’αŸ’αžœαžΈαž˜αž½αž™ αž˜αŸ‰αŸ„αž“ (αž§αž‘αžΆαž αžšαžŽαŸ αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΌαž…αž‡αžΆ apt αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž—αžΆαž‚αžΈαž‘αžΈαž”αžΈ)αŸ”
  2. αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“ Ansible αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžŸαžšαžŸαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ‚αž›αŸ”
  3. αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“ αžŸαžΆαž„αžŸαž„αŸ‹αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“ Docker (αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž”αž“αŸ’αžαŸ‚αž˜ αžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžšαžšαž½αž…αž αžΎαž™?)
  4. αž€αžΆαžšαž•αŸ’αž‚αž»αŸ†αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αžŠαŸ‚αž›αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αžαžΆαž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ– αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž–αžΈ Dockerfile (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αž…αŸ’αžšαžΎαž“αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ) αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŠαžΌαž…αž‚αŸ’αž“αžΆ Dockerfiles αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”
  5. αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž…αŸ‚αž€αž…αžΆαž™αŸ– αž™αžΎαž„β€‹αž…αž„αŸ‹β€‹αž”αŸ’αžšαž˜αžΌαž›β€‹αžšαž”αžŸαŸ‹β€‹αžšαž”αžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž•αžβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž›αž€αŸ’αžαžŽαŸˆβ€‹Β«β€‹αž˜αž·αž“β€‹αž…αŸαŸ‡β€‹αž…αž”αŸ‹β€‹Β»β€‹αž–αŸ’αžšαŸ„αŸ‡β€‹ αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž”αžΆαžαŸ‹ αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαžœαžΆαžαŸ’αžšαžΌαžœαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ”
  6. αž‘αžΈαž”αŸ†αž•αž»αžαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž€αŸ†αž–αžΌαž›αž“αŸƒαžŸαŸαž…αž€αŸ’αžαžΈαž”αŸ’αžšαžΆαžαŸ’αž“αžΆ αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αŸ– αžœαžΆαž‡αžΆαž€αžΆαžšαž›αŸ’αž’αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„ αžœαžΆαž™αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž… αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžŠαŸ„αž™αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαžšαž”αŸ€αž” αž“αž·αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž±αŸ’αž™αž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžαŸ’αž‰αž»αŸ†αž•αŸ’αž‘αžΆαž›αŸ‹αž˜αž·αž“αž”αŸ’αžšαžΆαž€αžŠαžαžΆ nuances αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž˜αžΎαž›αžƒαžΎαž‰αž‘αž»αž€αž‡αžΆαž˜αž»αž“αžαžΆαž˜αžœαž·αž’αžΈαž“αŸαŸ‡αž‘αŸαŸ”

αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‚αž˜αŸ’αžšαŸ„αž„αŸ–

  • αž§αž”αž€αžšαžŽαŸαž…αž›αŸαž / αž€αž‰αŸ’αž…αž”αŸ‹αžŸαžΆαž„αžŸαž„αŸ‹ - αž’αŸ’αž“αž€αžŸαžΆαž„αžŸαž„αŸ‹αž˜αž€αž–αžΈ Docker Inc (αž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžšαž”αžŸαŸ‹ Docker) αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžαŸ‚αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αŸ”
  • αž€αžΆαž“αžΈαž€αžΌ - αž’αŸ’αž“αž€αžŸαžΆαž„αžŸαž„αŸ‹αž–αžΈ Google αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“ Docker;
  • Buildpacks.io - αž€αžΆαžšαž”αŸ‰αž»αž“αž”αŸ‰αž„αžšαž”αžŸαŸ‹ CNCF αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžœαŸαž‘αž˜αž“αŸ’αžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž“αž·αž„αž‡αžΆαž–αž·αžŸαŸαžŸαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž‘αžΎαž„αžœαž·αž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αŸ”
  • αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αžŸαŸαž„αŸ—αž‘αŸ€αžαžŠαžΌαž…αž‡αžΆ αžŸαŸ’αžαžΆαž”αž“αžΆ, truetools/img...

... αž αžΎαž™αž˜αžΎαž›αžαžΆαžαžΎαž–αž½αž€αž‚αŸαž˜αžΆαž“αžαžΆαžšαžΆαž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž“αžΆαž€αŸ‹αž“αŸ…αž›αžΎ GitHub αŸ” αž“αŸ„αŸ‡αž‚αžΊαž“αŸ…αž›αžΎαžŠαŸƒαž˜αŸ’αžαžΆαž„αŸ” docker build αž˜αžΆαž“αž αžΎαž™αž’αžΆαž…αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž˜αž½αž™αž”αžΆαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž–αž·αž αž”αž‰αŸ’αž αžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž‘αŸαŸ” - αž—αŸαžŸαŸ’αžαž»αžαžΆαž„αž“αŸƒαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸƒαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž‡αŸ†αž“αž½αžŸ αžŠαŸ‚αž›αž•αŸ’αž“αŸ‚αž€αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ”

αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ werf

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαžαŸ‚ werf (αž–αžΈαž˜αž»αž“ αž›αŸ’αž”αžΈ αžŠαžΌαž…αž‡αžΆ dapp) - αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αž–αžΈαž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“ Flant αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αžΆαž…αŸ’αžšαžΎαž“αž†αŸ’αž“αžΆαŸ†αŸ” αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαž›αž–αžΈ 5 αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ’αž‚αŸ’αžšαžΈαž” Bash αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž’αŸ„αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž“αŸƒ Dockerfiles αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž™αŸˆαž–αŸαž› 3 αž†αŸ’αž“αžΆαŸ†αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸαŸ‡ αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž–αŸαž‰αž›αŸαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžƒαŸ’αž›αžΆαŸ†αž„ Git αž•αŸ’αž‘αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ” (αžŠαŸ†αž”αžΌαž„αž“αŸ… Ruby αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŸαžšαžŸαŸαžšαž‘αžΎαž„αžœαž·αž‰ αž‘αŸ… αž αžΎαž™αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡). αžαžΎαž”αž‰αŸ’αž αžΆαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸ…αž€αŸ’αž“αž»αž„ werf?

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαž˜αŸ„αž›αž–αžŽαŸŒαžαŸ€αžœαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžšαž½αž…αž αžΎαž™ αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ‚αž˜αž½αž™ αž αžΎαž™αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž”αž“αŸ’αž›αž·αž…αž‡αžΆαž–αžŽαŸŒαž›αžΏαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸ…αž…αž»αž„αžšαžŠαžΌαžœαž€αŸ’αžαŸ…αŸ”

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡ (αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–)

αž™αžΎαž„αž”αžΆαž“αž…αž»αž… docker push... - αžαžΎβ€‹αž’αŸ’αžœαžΈβ€‹αž’αžΆαž…β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž›αŸ†αž”αžΆαž€β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž•αŸ’αž‘αž»αž€β€‹αž‘αžΎαž„β€‹αžšαžΌαž”αž—αžΆαž–β€‹αž‘αŸ…β€‹αž”αž‰αŸ’αž‡αžΈβ€‹αžˆαŸ’αž˜αŸ„αŸ‡? αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŸαŸ†αžŽαž½αžšαž€αžΎαžαž‘αžΎαž„: "αžαžΎαžαŸ’αž‰αž»αŸ†αž‚αž½αžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αž’αŸ’αžœαžΈαž“αŸ…αž›αžΎαžšαžΌαž”αž—αžΆαž–?" αžœαžΆαž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž αŸαžαž»αž•αž›αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“ αž›αŸ†αž αžΌαžš (αž¬αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αž Git αž•αŸ’αžŸαŸαž„αž‘αŸ€αž) αž“αž·αž„ Kubernetes αž αžΎαž™αž§αžŸαŸ’αžŸαžΆαž αž€αž˜αŸ’αž˜αž€αŸ†αž–αž»αž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αžΆαž“αžΆαžαžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž’αŸ’αžœαžΎαžαžΆαž˜αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Git αŸ” αž™αŸ‰αžΆαž„αžŽαžΆαž˜αž·αž‰ Git αž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αž–αž“αŸƒαž€αžΆαžšαž–αž·αžαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

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

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

αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€

αž‘αžΈαž˜αž½αž™αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰ αžŸαŸ’αž›αžΆαž€ git. αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αž”αž‰αŸ’αž‡αžΈβ€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžšαžΌαž”αž—αžΆαž–β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž›αžΆαž€β€‹αž‡αžΆβ€‹ 1.0. Kubernetes αž˜αžΆαž“αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž› αž“αž·αž„αž•αž›αž·αžαž€αž˜αŸ’αž˜ αžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž–αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αŸ„αŸ‡αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ Git αž™αžΎαž„αž’αŸ’αžœαžΎαž€αžΆαžšαžŸαž“αŸ’αž™αžΆ αž αžΎαž™αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡αž™αžΎαž„αžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€ 2.0. αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž›αžœαžΆαžαžΆαž˜αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„αž αžΎαž™αžŠαžΆαž€αŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž‡αžΆαž˜αž½αž™αžŸαŸ’αž›αžΆαž€ 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) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αž™αžΎαž„αžšαž˜αŸ€αž›αžœαžΆαž…αŸαž‰αž‘αŸ…αž•αž›αž·αžαž€αž˜αŸ’αž˜αŸ”

αž˜αžΆαž“β€‹αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžαŸ‚β€‹αžšαžΌαž”αž—αžΆαž–β€‹αž˜αž½αž™β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž•αŸ’αž‘αž»αž€β€‹αž‘αžΎαž„β€‹αž‘αŸ…β€‹αž†αžΆαž€ (#c25) αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž•αž›αž·αžαž€αž˜αŸ’αž˜αžœαžΆαž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆ (1.1) αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αžŠαžΉαž„αžαžΆ "αžšαžΆαž„αž€αžΆαž™" αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžšαžΌαž”αž—αžΆαž–αžŠαžΌαž…αž‚αŸ’αž“αžΆαž–αžΈαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αŸ”

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž‚αžΊαžαžΆαž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž‘αŸ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž’αŸ’αžœαžΎαž›αžΏαž“αž‘αŸ…αž˜αž»αžαŸ”

αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž”αž“αŸ’αžβ€‹αž‘αŸ…β€‹αž˜αž»αžβ€‹αž‘αŸ€αžβ€‹αž αžΎαž™β€‹αž’αŸ’αžœαžΎβ€‹αž›αŸ’αž”αž·αž…... αžαŸ„αŸ‡β€‹αž˜αžΎαž›β€‹αž§αž‘αžΆαž αžšαžŽαŸβ€‹αž˜αž½αž™β€‹αž“αŸƒ 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) αžŠαŸ‚αž›αž‡αžΆαž˜αžΌαž›αž”αŸ’αž”αž‘αžΆαž“αž”αŸαžαŸ’αžšαž“αŸƒαž˜αžΆαžαž·αž€αžΆαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ;
  • αž€αŸ’αžšαž»αž˜αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ (RUN, CMD αž›β€‹αž›αŸ”);
  • SHA256 αž–αžΈαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ”

... αž αžΎαž™αž™αž€ checksum (αž˜αŸ’αžαž„αž‘αŸ€αž SHA256) αž–αžΈαž―αž€αžŸαžΆαžšαž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž“αŸαŸ‡αŸ” αž αžαŸ’αžαž›αŸαžαžΆ αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžšαžΌαž”αž—αžΆαž– Docker αŸ”

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

αž…αžΌαžšαž™αžΎαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž“αž·αž„ αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžŸαž“αŸ’αž™αžΆ αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž αžαŸ’αžαž›αŸαžαžΆαž”αŸ‚αž”αž“αŸαŸ‡, i.e. αžŸαŸ’αž›αžΆαž€αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž˜αžΆαž“αž αžαŸ’αžαž›αŸαžαžΆαŸ”

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

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

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

αž€αžΆαžšαžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αž“αŸ…αž€αŸ’αž“αž»αž„ werf

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

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

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

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

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

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

αž€αžΆαžšαžŸαž˜αŸ’αž’αžΆαžαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡

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

αžαžΎαž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžαŸ’αžšαžŸαž˜αŸ’αž’αžΆαžαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡?

  1. αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž˜αž·αž“αž’αžΆαž…αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž”αžΆαž“αž‘αŸαŸ” αž˜αž·αž“αžŸαž˜αŸ’αž’αžΆαž. αž–αŸαž›αžαŸ’αž›αŸ‡ αžœαžΆαž–αž·αžαž‡αžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸ†αžŽαžΆαž™αžαž·αž…αžαž½αž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ†αž αŸ†αž”αž“αŸ’αžαŸ‚αž˜ αž‡αžΆαž‡αžΆαž„αž€αžΆαžšαžŸαŸ’αžšαžΆαž™αžŸαŸ’αž›αžΆαž€αžŠαŸ‚αž›αž˜αžΆαž“αž—αžΆαž–αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžœαžΆβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αžαŸ’αžšαžΉαž˜β€‹αž…αŸ†αžŽαž»αž…β€‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹β€‹αž˜αž½αž™β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”
  2. αž€αŸ†αžŽαžαŸ‹αž‘αžΎαž„αžœαž·αž‰αž–αŸαž‰αž›αŸαž‰. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž›αž»αž”αžšαžΌαž”αž—αžΆαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž αžΎαž™αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰αžαŸ‚αžšαžΌαž”αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αž“αŸ„αŸ‡αž”αž‰αŸ’αž αžΆαž’αžΆαž…αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αž»αž„αžαžΊαž“αŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž•αž›αž·αžαž€αž˜αŸ’αž˜ αžšαžΌαž”αž—αžΆαž–αžαŸ’αž˜αžΈαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αž»αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆ - αž˜αž½αž™αžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž“αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ„αž™αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αŸ” αž“αŸαŸ‡αžŸαž˜αŸ’αž›αžΆαž”αŸ‹αž‚αŸ†αž“αž·αžαž“αŸƒαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αžΆαž“αŸ”
  3. αžαŸ€αžœαž”αŸƒαžαž„. αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž˜αž½αž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž αŸ€αžš - αž™αžΎαž„αž•αŸ’αž‘αž»αž€αžšαžΌαž”αž—αžΆαž–αž‘αŸ…αž˜αž½αž™αž‘αŸ€αžαŸ” αž”αž‰αŸ’αž αžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž˜αž»αž“αŸ– αžαžΎαž’αŸ’αž“αž€αž’αžΆαž…αž‡αž˜αŸ’αžšαŸ‡αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž αŸ€αžšαž…αŸαž‰αž“αŸ…αž–αŸαž›αžŽαžΆ?
  4. αžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆ. αž›αž»αž”αžšαžΌαž”αž—αžΆαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž…αžΆαžŸαŸ‹αž‡αžΆαž„ 1 αžαŸ‚? αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αž‡αžΆβ€‹αž“αžΉαž„β€‹αž˜αžΆαž“β€‹αžŸαŸαžœαžΆβ€‹αž˜αž½αž™β€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αž‘αžΆαž“αŸ‹β€‹αž”αžΆαž“β€‹αž’αžΆαž”αŸ‹αžŠαŸαžβ€‹αžšαž™αŸˆαž–αŸαž›β€‹αž˜αž½αž™β€‹αžαŸ‚β€¦
  5. αžŠαŸ„αž™αžŠαŸƒ αž€αŸ†αžŽαžαŸ‹αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αžšαž½αž…αž αžΎαž™αŸ”

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

αžαžΎαž™αžΎαž„αž”αžΆαž“αž˜αž€αžšαž€αž’αŸ’αžœαžΈ werf? αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž›αŸ–

  1. αž€αŸ’αž”αžΆαž› GitαŸ– αžŸαŸ’αž›αžΆαž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž‚αŸ’αžšαž”αŸ‹αžŸαžΆαžαžΆ - αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αžŸαŸ’αž›αžΆαž€αž“αŸ…αž€αŸ’αž“αž»αž„ Git αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– (αž αžΎαž™αž”αžΎαž˜αž·αž“αž’αž‰αŸ’αž…αžΉαž„αž‘αŸ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž›αž»αž”αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Git αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„);
  2. αž•αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΌαž˜αž…αŸαž‰αž‘αŸ…αž€αžΆαž“αŸ‹ Kubernetes;
  3. ReplicaSets αž…αžΆαžŸαŸ‹ (αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‘αžΎαž”αž“αžΉαž„αž…αŸαž‰αž•αŸ’αžŸαžΆαž™) αž αžΎαž™αž™αžΎαž„αž€αŸαž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αžŸαŸ’αž€αŸαž“αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ Helm αž αžΎαž™αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžšαžΌαž”αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αŸ”

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

αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›

αžŸαŸαž…αž€αŸ’αžαžΈαž”αŸ’αžšαž€αžΆαžŸαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž…αŸ†αžŽαž»αž…αžŠαŸ†αž”αžΌαž„αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž‘αžΆαž€αŸ‹αž‘αžΆαž‰αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‚αžΊαž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαžŠαŸ„αž™αž”αŸ’αžšαž€αžΆαžŸαŸ” αž―αž€αžŸαžΆαžš YAML αžŠαžΎαž˜αžŠαŸ‚αž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž’αž“αž’αžΆαž“ Kubernetes αžαŸ‚αž„αžαŸ‚αžαž»αžŸαž‚αŸ’αž“αžΆαžαŸ’αž›αžΆαŸ†αž„αž–αžΈαž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αŸ” αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ Kubernetes αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž›αžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αŸ–

  1. αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽ;
  2. αž–αŸαžαŸŒαž˜αžΆαž“αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜;
  3. αžαž˜αŸ’αž›αŸƒαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‡αžΆαž…αŸ’αžšαžΎαž“;
  4. αž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“;
  5. αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒ webhook αž…αžΌαž›αžšαŸ€αž“;
  6. αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαž•αŸ’αžŸαŸαž„αŸ— (αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž–αŸαž›) αŸ”

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

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆ 2 αž•αŸ’αž›αžΌαžœ. αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Helm αŸ”

αž€αŸαž˜αžΆαž“αžŠαŸ‚αžšαŸ” αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆ 3 αž•αŸ’αž›αžΌαžœαžŠαŸ‚αž›αžαž»αžŸαž‚αŸ’αž“αžΆαžαŸ’αžšαž„αŸ‹αžαžΆαŸˆ

  • αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž…αž»αž„αž€αŸ’αžšαŸ„αž™ ΠΈ αžαŸ’αž˜αžΈαž™αžΎαž„αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”;
  • αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αžαŸ’αž˜αžΈ ΠΈ αžšαžŸαŸ‹αž“αŸ…αž™αžΎαž„αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αž¬αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”
  • αž”αŸ†αžŽαŸ‡αžŸαžšαž»αž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž‘αŸ… αžšαžŸαŸ‹αž“αŸ….

αž™αžΎαž„αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ 1000+ αž‡αžΆαž˜αž½αž™ Helm αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž–αž·αžαž‡αžΆαžšαžŸαŸ‹αž“αŸ…αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆ 2 αž•αŸ’αž›αžΌαžœαŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžœαžΆαž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ†αžŽαŸ‡αžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαŸ‚αž›αž‡αž½αž™αž±αŸ’αž™ Helm αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαŸ”

αžŸαŸ’αžαžΆαž“αž—αžΆαž–β€‹αž€αžΆαžšβ€‹αž…αŸαž‰β€‹αž•αŸ’αžŸαžΆαž™β€‹αž–αž·αž

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž˜αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Kubernetes αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž”αž“αŸ’αž‘αžΆαž”αŸ‹ αžœαžΆαž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ (αž’αž“αž»αžœαžαŸ’αž) αž‘αŸ…αž…αž„αŸ’αž€αŸ„αž˜ - αžŠαŸ„αž™αž”αŸ’αžšαžΎ Helm ឬ kubectl apply. αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› N-way αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžšαž½αž…αž αžΎαž™αž€αžΎαžαž‘αžΎαž„ αžŠαŸ‚αž› Kubernetes API αž†αŸ’αž›αžΎαž™αžαž”αžŠαŸ„αž™αž™αž›αŸ‹αž–αŸ’αžšαž˜αž…αŸ†αž–αŸ„αŸ‡αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CI αž αžΎαž™αž…αŸ†αž–αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ”

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

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

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž”αž“αŸ’αžαŸ‚αž˜ - αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž˜αžŠαžΆαž“αž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž–αžΈ Kubernetes API αž αžΎαž™αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžœαž·αž—αžΆαž‚αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž–αž·αžαž“αŸƒαžœαžαŸ’αžαž»αŸ” αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αž“αŸ…αž€αŸ’αž“αž»αž„ Go - αž€αžΌαž“αž†αŸ’αž€αŸ‚ (αžŸαžΌαž˜αž˜αžΎαž›αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαžšαž”αžŸαŸ‹αžœαžΆαŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡)αžŠαŸ‚αž›αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž“αž·αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ werf αŸ”

αž₯αžšαž·αž™αžΆαž”αžαžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž˜αžŠαžΆαž“αž“αŸαŸ‡αž“αŸ…αž€αž˜αŸ’αžšαž·αž werf αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ„αž™αž”αŸ’αžšαžΎαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αž›αžΎ Deployments ឬ StatefulSetsαŸ” αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αžŸαŸ†αžαžΆαž“αŸ‹ - fail-mode - αž™αž›αŸ‹αž’αžαŸ’αžαž“αŸαž™αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

  • IgnoreAndContinueDeployProcess - αž™αžΎαž„αž˜αž·αž“αž’αžΎαž–αžΎαž“αžΉαž„αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž…αŸαž‰αžŸαž˜αžΆαžŸαž—αžΆαž‚αž“αŸαŸ‡ αž αžΎαž™αž”αž“αŸ’αžαž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”
  • FailWholeDeployProcessImmediately - αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž˜αžΆαžŸαž’αžΆαžαž»αž“αŸαŸ‡αž”αž‰αŸ’αžˆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αŸ”
  • HopeUntilEndOfDeployProcess - αž™αžΎαž„αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαžŸαž˜αžΆαžŸαž—αžΆαž‚αž“αŸαŸ‡αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αŸ”

αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸƒαž’αž“αž’αžΆαž“ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž“αŸαŸ‡αŸ” fail-mode:

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„ αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ (MongoDB) αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž‘αžΆαž“αŸ‹αžšαž½αž…αžšαžΆαž›αŸ‹αž“αŸ…αž‘αžΎαž™αž‘αŸ - αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž“αžΉαž„αž”αžšαžΆαž‡αŸαž™αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αžšαž„αŸ‹αž…αžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αžœαžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž αžΎαž™αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž“αžΉαž„αž“αŸ…αžαŸ‚αž”αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžαž‘αŸ…αŸ”

αž˜αžΆαž“αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž–αžΈαžšαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ kubedog αž“αŸ…αž€αŸ’αž“αž»αž„ werfαŸ–

  • failures-allowed-per-replica - αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž’αŸ’αž›αžΆαž€αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž“αžΈαž˜αž½αž™αŸ—;
  • show-logs-until - αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αŸαž›αžœαŸαž›αžΆαžšαž αžΌαžαžŠαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž› werf αž”αž„αŸ’αž αžΆαž‰αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» (αž“αŸ…αž€αŸ’αž“αž»αž„ stdout) αž–αžΈαž•αžαžŠαŸ‚αž›αž”αžΆαž“αžŠαžΆαž€αŸ‹αž…αŸαž‰αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‚αžΊ PodIsReady (αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž˜αž·αž“β€‹αž’αžΎαž–αžΎβ€‹αžŸαžΆαžšβ€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αž˜αž·αž“β€‹αž…αž„αŸ‹β€‹αž”αžΆαž“β€‹αž“αŸ…β€‹αž–αŸαž›β€‹αžŠαŸ‚αž›β€‹αž…αžšαžΆαž…αžšαžŽαŸβ€‹αž…αžΆαž”αŸ‹β€‹αž•αŸ’αžαžΎαž˜β€‹αž…αžΌαž›β€‹αž˜αž€β€‹αž€αžΆαž“αŸ‹β€‹αž•αž) αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž€αŸβ€‹αž˜αžΆαž“β€‹αžŸαž»αž–αž›αž—αžΆαž–β€‹αžŠαŸ‚αžšαŸ– ControllerIsReady ΠΈ EndOfDeploy.

αžαžΎαž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“αž’αŸ’αžœαžΈαž‘αŸ€αžαž–αžΈαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™?

αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž…αŸ†αžŽαž»αž…αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžšαž½αž…αž αžΎαž™ αž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“αŸ–

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

αž›αž‘αŸ’αž’αž•αž›

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

αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αŸ–

werf - αž§αž”αž€αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CI / CD αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes (αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΌαž‘αŸ… αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌ)

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

វីដេធូ αž“αž·αž„αžŸαŸ’αž›αžΆαž™

αžœαžΈαžŠαŸαž’αžΌαž–αžΈαž€αžΆαžšαžŸαž˜αŸ’αžαŸ‚αž„ (~ៀ៧ αž“αžΆαž‘αžΈ)αŸ–

αž”αž‘αž”αž„αŸ’αž αžΆαž‰αž“αŸƒαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαŸ–

PS

αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž’αŸ†αž–αžΈ Kubernetes αž“αŸ…αž›αžΎαž”αŸ’αž›αž€αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

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

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