XNUMX ã€ã® Git ãªããžããªããäžé£ã®ãã€ã¯ããµãŒãã¹ãããŒã«ã¢ãŠããã
ã¢ããªã±ãŒã·ã§ã³ãå€ããå°ãªããç¬ç«ããå€æ°ã®ãµãŒãã¹ã«åå²ãããå Žåãç¶æ³ãããçºçããŸãã ãããã®ãµãŒãã¹ã®ãªãªãŒã¹ã¯ç¬ç«ããŠè¡ãããšãã§ããŸããäžåºŠã« XNUMX ã€ä»¥äžã®ãµãŒãã¹ããªãªãŒã¹ã§ããŸãããæ®ãã®ãµãŒãã¹ã¯å€æŽããã«åäœãç¶ããå¿ èŠããããŸãã ãã ããã³ãŒãã®ä¿åãšãããžã§ã¯ã管çã®èŠ³ç¹ãããããšããã®ãããªã¢ããªã±ãŒã·ã§ã³ ãµãŒãã¹ãåäžã®ãªããžããªã«ä¿æããæ¹ã䟿å©ã§ãã
ãµãŒãã¹ãçã«ç¬ç«ããŠãããåäžã®ã¢ããªã±ãŒã·ã§ã³ã«é¢é£ä»ããããŠããªãç¶æ³ããããŸãã ãã®å Žåããããã¯å¥ã®ãããžã§ã¯ãã«é 眮ããããªãªãŒã¹ã¯åãããžã§ã¯ãã®å¥ã® CI/CD ããã»ã¹ãéããŠå®è¡ãããŸãã
ãã ããå®éã«ã¯ãéçºè 㯠XNUMX ã€ã®ã¢ããªã±ãŒã·ã§ã³ãè€æ°ã®ãã€ã¯ããµãŒãã¹ã«åå²ããããšããããããŸãããããããã«åå¥ã®ãªããžããªãšãããžã§ã¯ããäœæããã®ã¯æããã«éå°ã§ãã ãã®ç¶æ³ã«ã€ããŠã¯ããã«è©³ãã説æããŸãããã®ãããªãã€ã¯ããµãŒãã¹ã XNUMX ã€ã®ãããžã§ã¯ã ãªããžããªã«è€æ°ååšãããªãªãŒã¹ã¯ CI/CD ã® XNUMX ã€ã®ããã»ã¹ãéããŠè¡ãããŸãã
Git ãã©ã³ããš Git ã¿ã°ã«ããã¿ã°ä»ã
æãäžè¬çãªã¿ã°ä»ãæŠç¥ã䜿çšãããŠãããšããŸãã ã¿ã°ãŸãã¯ãã©ã³ãã Git ãã©ã³ãã®å Žåãã€ã¡ãŒãžã«ã¯ãã©ã³ãã®ååãã¿ã°ä»ããããŸããäžåºŠã« XNUMX ã€ã®ãã©ã³ãã«å¯ŸããŠããã®ãã©ã³ãã®ååã§å ¬éãããã€ã¡ãŒãžã¯ XNUMX ã€ã ãã§ãã Git ã¿ã°ã®å Žåãç»åã¯ã¿ã°åã«åŸã£ãŠã¿ã°ä»ããããŸãã
æ°ãã Git ã¿ã°ãäœæããããš (ããšãã°ãæ°ããããŒãžã§ã³ããªãªãŒã¹ããããš)ãDocker ã¬ãžã¹ããªå ã®ãã¹ãŠã®ãããžã§ã¯ã ã€ã¡ãŒãžã«å¯ŸããŠæ°ãã Docker ã¿ã°ãäœæãããŸãã
-
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 ã¿ã°) ããå€æŽãããŠããããDocker ã¿ã°ã®ã¿ãå€æŽãããŠããå Žåã«ããããçºçããŸãã éå° ãã®ã¢ããªã±ãŒã·ã§ã³ãåèµ·åãããããããŠã³ã¿ã€ã ãçºçããå¯èœæ§ããããŸãã ãã ãããã®åèµ·åãå®è¡ããæ¬åœã®çç±ã¯ãããŸããã§ããã
ãã®çµæãçŸåšã®ã¿ã°ä»ãã¹ããŒã ã§ã¯ãããã€ãã®åå¥ã® Git ãªããžããªããã§ã³ã¹ããå¿ èŠãããããããã®ããã€ãã®ãªããžããªã®ããŒã«ã¢ãŠããçµç¹åãããšããåé¡ãçºçããŸãã äžè¬ã«ããã®ãããªã¹ããŒã ã¯éè² è·ã§è€éã§ããããšãããããŸãã äžå¿ èŠãªåèµ·åããªããããå€ãã®ãµãŒãã¹ã XNUMX ã€ã®ãªããžããªã«çµåããDocker ã¿ã°ãäœæããããšããå§ãããŸãã
Gitã³ãããã«ããã¿ã°ä»ã
werf ã«ã¯ãGit ã³ãããã«é¢é£ä»ããããã¿ã°ä»ãæŠç¥ããããŸãã
Git-commit 㯠Git ãªããžããªã®ã³ã³ãã³ãã®èå¥åã§ãããGit ãªããžããªå ã®ãã¡ã€ã«ã®ç·šéå±¥æŽã«äŸåãããããDocker ã¬ãžã¹ããªå ã®ã€ã¡ãŒãžã®ã¿ã°ä»ãã«ããã䜿çšããã®ã¯è«ççã§ãããšæãããŸãã
ãã ããGit ã³ãããã«ããã¿ã°ä»ãã«ã¯ãGit ãã©ã³ããŸã㯠Git ã¿ã°ã«ããã¿ã°ä»ããšåãæ¬ ç¹ããããŸãã
- ãã¡ã€ã«ãå€æŽããªã空ã®ã³ããããäœæããããšãã§ããŸãããã€ã¡ãŒãžã® Docker ã¿ã°ã¯å€æŽãããŸãã
- ãã¡ã€ã«ãå€æŽããªãããŒãž ã³ããããäœæããããšãã§ããŸãããã€ã¡ãŒãžã® Docker ã¿ã°ã¯å€æŽãããŸãã
- ã€ã¡ãŒãžã«ã€ã³ããŒããããŠããªã Git å ã®ãã¡ã€ã«ãå€æŽããã³ããããäœæãããšãã€ã¡ãŒãžã® Docker ã¿ã°ãå床å€æŽãããŸãã
Git ãã©ã³ãåã®ã¿ã°ä»ãã«ã€ã¡ãŒãžã®ããŒãžã§ã³ãåæ ãããªã
Git ãã©ã³ãã®ã¿ã°ä»ãæŠç¥ã«é¢é£ããå¥ã®åé¡ããããŸãã
ãã©ã³ãåã«ããã¿ã°ä»ãã¯ããã®ãã©ã³ãäžã®ã³ããããæç³»åã§é£ç¶ããŠåéãããŠããéãæ©èœããŸãã
çŸåšã®ã¹ããŒã ã§ãŠãŒã¶ãŒãç¹å®ã®ãã©ã³ãã«é¢é£ä»ããããå€ãã³ãããã®åæ§ç¯ãéå§ãããšãwerf ã¯å¯Ÿå¿ãã Docker ã¿ã°ã䜿çšããŠãå€ãã³ãããã®ã€ã¡ãŒãžã®æ°ããæ§ç¯ãããããŒãžã§ã³ã§ã€ã¡ãŒãžãæžãæããŸãã ä»åŸãã®ã¿ã°ã䜿çšãããããã€ã¡ã³ãã§ã¯ããããã®åèµ·åæã«ç°ãªãããŒãžã§ã³ã®ã€ã¡ãŒãžããã«ãããªã¹ã¯ãããããã®çµæãã¢ããªã±ãŒã·ã§ã³ã¯ CI ã·ã¹ãã ãšã®æ¥ç¶ã倱ããéåæã«ãªããŸãã
ããã«ãçãéé㧠XNUMX ã€ã®ãã©ã³ãã«é£ç¶ããŠããã·ã¥ãããšãå€ãã³ããããæ°ããã³ããããããé ãã³ã³ãã€ã«ãããå¯èœæ§ããããŸããå€ãããŒãžã§ã³ã®ã€ã¡ãŒãžããGit ãã©ã³ã ã¿ã°ã䜿çšããŠæ°ããããŒãžã§ã³ãäžæžãããŸãã ãã®ãããªåé¡ã¯ãCI/CD ã·ã¹ãã ã«ãã£ãŠè§£æ±ºã§ããŸã (ããšãã°ãGitLab CI ã§ã¯ãåŸè ã®ãã€ãã©ã€ã³ãäžé£ã®ã³ãããã«å¯ŸããŠèµ·åãããŸã)ã ãã ãããã¹ãŠã®ã·ã¹ãã ãããããµããŒãããŠããããã§ã¯ãªãããããã®ãããªæ ¹æ¬çãªåé¡ãé²ãããã®ããä¿¡é Œæ§ã®é«ãæ¹æ³ãå¿ èŠã§ãã
ã³ã³ãã³ãããŒã¹ã®ã¿ã°ä»ããšã¯äœã§ãã?
ã§ã¯ãã³ã³ãã³ãããŒã¹ã®ã¿ã°ä»ããšã¯äœã§ãããã³ã³ãã³ãããšã«ç»åãã¿ã°ä»ãããŸãã
Docker ã¿ã°ãäœæããã«ã¯ãGit ããªããã£ã (Git ãã©ã³ããGit ã¿ã°ãªã©) ã§ã¯ãªãã以äžã«é¢é£ä»ãããããã§ãã¯ãµã ã䜿çšãããŸãã
- ç»åã®å 容ã ç»å ID ã¿ã°ã¯ãã®å 容ãåæ ããŸãã æ°ããããŒãžã§ã³ããã«ããããšããã€ã¡ãŒãžå ã®ãã¡ã€ã«ãå€æŽãããŠããªãéãããã®èå¥åã¯å€æŽãããŸããã
- Git ã§ãã®ã€ã¡ãŒãžãäœæããå±¥æŽã ç°ãªã Git ãã©ã³ãã wef çµç±ã®ç°ãªããã«ãå±¥æŽã«é¢é£ä»ããããã€ã¡ãŒãžã«ã¯ãç°ãªã ID ã¿ã°ãä»ããããŸãã
ãã®ãããªèå¥ã¿ã°ã¯ãããã ã€ã¡ãŒãžã¹ããŒãžã®ãµã€ã³.
åã€ã¡ãŒãžã¯äžé£ã®ã¹ããŒãžã§æ§æãããŸãã from
, before-install
, git-archive
, install
, imports-after-install
, before-setup
ã... git-latest-patch
çåã¹ããŒãžã«ã¯ããã®å
容ãåæ ããèå¥åããããŸã- ã¹ããŒãžãµã€ã³ (ã¹ããŒãžãµã€ã³).
ãããã®ã¹ããŒãžã§æ§æãããæçµã€ã¡ãŒãžã«ã¯ããããã®ã¹ããŒãžã®ã»ããã®ãããã眲åãã¿ã°ä»ããããŸãã ã¹ããŒãžçœ²å, - ããã¯ç»åã®ãã¹ãŠã®æ®µéãäžè¬åããŠããŸãã
æ§æããã®åç»åã«ã€ã㊠werf.yaml
äžè¬çãªã±ãŒã¹ã§ã¯ãç¬èªã®çœ²åããããããã«å¿ã㊠Docker ã¿ã°ãååšããŸãã
Stage Signature ã¯ããããã®åé¡ããã¹ãŠè§£æ±ºããŸãã
- 空㮠Git ã³ãããã«å¯Ÿããèæ§ã
- ã€ã¡ãŒãžã«é¢ä¿ã®ãªããã¡ã€ã«ãå€æŽãã Git ã³ãããã«èæ§ããããŸãã
- ãã©ã³ãã®å€ã Git ã³ãããã®ãã«ããåéãããšãã«ãã€ã¡ãŒãžã®çŸåšã®ããŒãžã§ã³ããªãŒããŒããŒã«ãããšããåé¡ãçºçããŸããã
ããã¯çŸåšæšå¥šãããã¿ã°ä»ãæŠç¥ã§ããããã¹ãŠã® CI ã·ã¹ãã ã® werf ã®ããã©ã«ãã§ãã
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
æ§æã®è©³çŽ°ã«ã€ããŠã¯ã次ã®ããã¥ã¡ã³ããåç §ããŠãã ããã
-
ãã£ã¬ã¯ããªâåºçç©ïŒåºçïŒ ; -
CI/CD ã®æäœ â äžè¬æ å ± â ã¹ããŒãžçœ²å ; -
GitLab CI/CD ãšã®çµ±å â .gitlab-ci.yml .
åèšã§
- æ°ãããªãã·ã§ã³
werf publish --tag-by-stages-signature=true|false
. - æ°ãããªãã·ã§ã³å€
werf ci-env --tagging-strategy=stages-signature|tag-or-branch
(æå®ããªãå Žåãããã©ã«ãã¯stages-signature
). - 以åã« Git ã³ãããã®ã¿ã°ä»ããªãã·ã§ã³ã䜿çšããŠããå Žå (
WERF_TAG_GIT_COMMIT
ãŸãã¯ãªãã·ã§ã³werf publish --tag-git-commit COMMIT
)ããã®åŸã¯å¿ ãã¿ã°ä»ãæŠç¥ã«åãæ¿ããŠãã ããã ã¹ããŒãžçœ²å. - æ°ãããããžã§ã¯ããããã«æ°ããã¿ã°ä»ãã¹ããŒã ã«åãæ¿ããããšããå§ãããŸãã
- werf 1.1 ã«ç§»è¡ããå Žåã¯ãå€ããããžã§ã¯ããæ°ããã¿ã°ä»ãã¹ããŒã ã«åãæ¿ããããšããå§ãããŸãããå€ããããžã§ã¯ã㯠ã¿ã°ãŸãã¯ãã©ã³ã ã¯ãŸã ãµããŒããããŠããŸãã
ã³ã³ãã³ãããŒã¹ã®ã¿ã°ä»ãã«ããããã®èšäºã§åãäžãããã¹ãŠã®åé¡ã解決ãããŸãã
- 空㮠Git ã³ãããã«å¯Ÿãã Docker ã¿ã°åã®èæ§ã
- ã€ã¡ãŒãžã«é¢ä¿ã®ãªããã¡ã€ã«ãå€æŽãã Git ã³ãããã«å¯Ÿãã Docker ã¿ã°åã®èæ§ã
- Git ãã©ã³ãã®å€ã Git ã³ãããã®ãã«ããåéãããšãã«ãã€ã¡ãŒãžã®çŸåšã®ããŒãžã§ã³ããªãŒããŒããŒã«ãããšããåé¡ã¯çºçããŸããã
ããã䜿ã£ãŠïŒ ãã²ãè¶ããã ããã
PS
ç§ãã¡ã®ããã°ããèªã¿ãã ãã:
- «
werf 1.1 ãªãªãŒã¹: çŸåšã®ãã«ããŒã®æ¹åãšå°æ¥ã®èšç» » - «
werf 1.0 å®å®çã®çŽ¹ä»: GitOps ãšãããšã®é¢ä¿ãã¹ããŒã¿ã¹ãèšç» » - «
werf - Kubernetes ã® CI / CD çšããŒã« (æŠèŠãšãããªã¬ããŒã) "; - werf ã®ã€ãããŒã·ã§ã³ã«é¢ããäžé£ã®ã¡ã¢:
- «
werf ãžã® 3 æ¹åããŒãž: Helm ãã匷åã«ã䜿çšãã Kubernetes ãžã®ãããã€ã¡ã³ã "; - «
wef ã䜿çšããŠè€é㪠Helm ãã£ãŒããå±éãã "; - «
werf ã§ã®ã¢ããªããžããªãšãã«ããªããžããªã®ãµããŒããšãDocker ã¬ãžã¹ããªã¯ãããšäœã®é¢ä¿ããããŸãã "; - «
éåžžã® Dockerfile ã䜿çšããŠãwerf 㧠Docker ã€ã¡ãŒãžãæ§ç¯ã§ããããã«ãªããŸãã 'ã
- «
åºæïŒ habr.com