แƒ™แƒแƒœแƒขแƒ”แƒœแƒขแƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒ werf builder-แƒจแƒ˜: แƒ แƒแƒขแƒแƒ› แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก?

แƒ™แƒแƒœแƒขแƒ”แƒœแƒขแƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒ werf builder-แƒจแƒ˜: แƒ แƒแƒขแƒแƒ› แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก?

แƒ•แƒ”แƒ แƒค แƒแƒ แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก 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 commit-แƒ”แƒ‘แƒ—แƒแƒœ.

Git-commit แƒแƒ แƒ˜แƒก Git แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜ แƒ“แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Git แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒแƒ–แƒ”, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ Docker Registry-แƒจแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“.

แƒ—แƒฃแƒ›แƒชแƒ, Git commit-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ›แƒแƒœแƒ˜แƒจแƒ•แƒœแƒแƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ”แƒ”แƒ‘แƒ˜ แƒแƒฅแƒ•แƒก, แƒ แƒแƒช Git-แƒ˜แƒก แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒœ Git แƒขแƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ›แƒแƒœแƒ˜แƒจแƒ•แƒœแƒแƒก:

  • แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒแƒก แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ commit, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒชแƒ•แƒšแƒ˜แƒก แƒแƒ แƒชแƒ”แƒ แƒ— แƒคแƒแƒ˜แƒšแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก Docker แƒขแƒ”แƒ’แƒ˜.
  • แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒแƒก แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒชแƒ•แƒšแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก Docker แƒขแƒ”แƒ’แƒ˜.
  • แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒชแƒ•แƒšแƒ˜แƒก แƒ˜แƒ› แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก Git-แƒจแƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ  แƒแƒ แƒ˜แƒก แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒจแƒ˜ แƒ“แƒ แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก Docker แƒขแƒ”แƒ’แƒ˜ แƒ˜แƒกแƒ”แƒ• แƒจแƒ”แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ.

Git แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒจแƒ•แƒœแƒ แƒแƒ  แƒแƒกแƒแƒฎแƒแƒ•แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก

แƒแƒ แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Git แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒจแƒ•แƒœแƒ˜แƒก แƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒแƒกแƒ—แƒแƒœ.

แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ›แƒแƒœแƒ˜แƒจแƒ•แƒœแƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒแƒ› แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ–แƒ” แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ’แƒ แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ— แƒฅแƒ แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒฃแƒ แƒ˜ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ—.

แƒ—แƒฃ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒกแƒฅแƒ”แƒ›แƒ˜แƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒซแƒ•แƒ”แƒšแƒ˜ commit-แƒ˜แƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒš แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ—แƒแƒœ, แƒ›แƒแƒจแƒ˜แƒœ werf แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒก แƒกแƒฃแƒ แƒแƒ—แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ Docker แƒขแƒ”แƒ’แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒแƒฎแƒšแƒแƒ“ แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒ— แƒซแƒ•แƒ”แƒšแƒ˜ commit-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜แƒ“แƒแƒœ แƒแƒ› แƒขแƒ”แƒ’แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ แƒ”แƒ›แƒฃแƒฅแƒ แƒ”แƒ‘แƒ แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒงแƒ•แƒแƒœแƒ˜แƒก แƒ แƒ˜แƒกแƒ™แƒก แƒžแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒแƒก, แƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“แƒแƒช แƒฉแƒ•แƒ”แƒœแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ“แƒแƒ™แƒแƒ แƒ’แƒแƒ•แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒก CI แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒกแƒ—แƒแƒœ แƒ“แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ“แƒ”แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒ.

แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒ”แƒ แƒ— แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜ แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒซแƒ’แƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒ›แƒแƒ™แƒšแƒ” แƒ“แƒ แƒแƒ˜แƒ—, แƒซแƒ•แƒ”แƒšแƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒฃแƒคแƒ แƒ แƒ’แƒ•แƒ˜แƒแƒœ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒแƒฎแƒแƒšแƒ˜: แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒซแƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒก แƒแƒฎแƒแƒšแƒก Git แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜แƒก แƒขแƒ”แƒ’แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒแƒกแƒ”แƒ—แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒญแƒ แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ CI/CD แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒ— (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, GitLab CI-แƒจแƒ˜ แƒแƒ› แƒฃแƒ™แƒแƒœแƒแƒกแƒ™แƒœแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ แƒ˜แƒ’แƒ˜ แƒจแƒ”แƒ—แƒแƒœแƒฎแƒ›แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก). แƒ—แƒฃแƒ›แƒชแƒ, แƒงแƒ•แƒ”แƒšแƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒแƒ  แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒฎแƒแƒ แƒก แƒแƒ›แƒแƒก แƒ“แƒ แƒฃแƒœแƒ“แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ”แƒก แƒฃแƒคแƒ แƒ แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ แƒ’แƒ–แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒคแƒฃแƒœแƒ“แƒแƒ›แƒ”แƒœแƒขแƒฃแƒ แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒกแƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“.

แƒ แƒ แƒแƒ แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒœแƒขแƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒ?

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ แƒ แƒแƒ แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒœแƒขแƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒ - แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒ’แƒ˜แƒ แƒ”แƒ‘แƒ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—.

Docker แƒขแƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ แƒ Git แƒžแƒ แƒ˜แƒ›แƒ˜แƒขแƒ˜แƒ•แƒ”แƒ‘แƒ˜ (Git แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜, Git tag...), แƒแƒ แƒแƒ›แƒ”แƒ“ แƒกแƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ แƒฏแƒแƒ›แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ:

  • แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜. แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก ID แƒขแƒ”แƒ’แƒ˜ แƒแƒกแƒแƒฎแƒแƒ•แƒก แƒ›แƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒก. แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒก, แƒ”แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ, แƒ—แƒฃ แƒกแƒฃแƒ แƒแƒ—แƒ–แƒ” แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒแƒ  แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ;
  • Git-แƒจแƒ˜ แƒแƒ› แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ. แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Git-แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒ build-แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒแƒกแƒ—แƒแƒœ werf-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ”แƒฅแƒœแƒ”แƒ‘แƒแƒ— แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ ID แƒขแƒ”แƒ’แƒ”แƒ‘แƒ˜.

แƒแƒกแƒ”แƒ—แƒ˜ แƒกแƒแƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒขแƒ”แƒ’แƒ˜ แƒแƒ แƒ˜แƒก แƒ”.แƒฌ แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ”แƒขแƒแƒžแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ.

แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ: from, before-install, git-archive, install, imports-after-install, before-setup, ... git-latest-patch แƒ“แƒ แƒ.แƒจ. แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ”แƒขแƒแƒžแƒก แƒแƒฅแƒ•แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒกแƒแƒฎแƒแƒ•แƒก แƒ›แƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒก โˆ’ แƒกแƒแƒกแƒชแƒ”แƒœแƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ (แƒกแƒชแƒ”แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ).

แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒกแƒฃแƒ แƒแƒ—แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒแƒ› แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ, แƒ›แƒแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜แƒ แƒแƒ› แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”.แƒฌ. แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ, - แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒœแƒ–แƒแƒ’แƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ”แƒขแƒแƒžแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒกแƒ’แƒแƒœ werf.yaml แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒ“แƒ, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, Docker tag.

แƒกแƒแƒกแƒชแƒ”แƒœแƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒฌแƒงแƒ•แƒ”แƒขแƒก แƒงแƒ•แƒ”แƒšแƒ แƒแƒ› แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒก:

  • แƒ›แƒ“แƒ’แƒ แƒแƒ“แƒ˜แƒ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ Git แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—.
  • Resistant to 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 tag แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒแƒ‘แƒ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ Git commits-แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—.
  • Docker แƒขแƒ”แƒ’แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ“แƒ’แƒ แƒแƒ“แƒแƒ‘แƒ Git-แƒก แƒแƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ  แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ แƒกแƒฃแƒ แƒแƒ—แƒก.
  • แƒแƒ  แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฎแƒ”แƒ“แƒ•แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒก แƒซแƒ•แƒ”แƒšแƒ˜ Git-แƒ˜แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒแƒก Git แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แฒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”! แƒ“แƒ แƒแƒ  แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ”แƒ— แƒ’แƒ•แƒ”แƒกแƒขแƒฃแƒ›แƒ แƒแƒ— GitHubแƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜ แƒแƒœ แƒ˜แƒžแƒแƒ•แƒ”แƒ— แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒžแƒšแƒฃแƒกแƒ˜, แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒžแƒ˜แƒแƒ แƒ˜ แƒแƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒงแƒฃแƒ แƒ”แƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒแƒก.

PS

แƒแƒกแƒ”แƒ•แƒ” แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ— แƒฉแƒ•แƒ”แƒœแƒก แƒ‘แƒšแƒแƒ’แƒ–แƒ”:

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ