ã¯ããã«
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãªãã®ææ°ã®éçºãæ³åããããšã¯å°é£ã§ãã å€ãã®äŒæ¥ã1æ¥ã«è€æ°ã®ãªãªãŒã¹ããªãªãŒã¹ããæ°åã®ãã¹ããå®è¡ããŠããŸãã JenkinsãšTravis CIã®æ代以æ¥ãæãå€æ§ãªããŒã«ã®å€ããåžå Žã«ç»å ŽããŠããŸãã ãããã®ã»ãšãã©ã¯SaaSã¢ãã«ã§åäœããŸãããµãŒãã¹ã®äœ¿çšãŸãã¯ãŠãŒã¶ãŒæ°ã«å¯ŸããŠåºå®æéãæ¯æããŸãã
ãã ããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã転éã§ããªãå Žåããå€éšãµãŒãã¹ã«äŸåããããªãå Žåãªã©ããã¹ããã©ãããã©ãŒã ã®äœ¿çšã¯åžžã«å¯èœãšã¯éããŸããã ãã®å ŽåããµãŒããŒã«ã€ã³ã¹ããŒã«ã§ããïŒèªå·±ãã¹ãåïŒã·ã¹ãã ã圹ç«ã¡ãŸãã ããŒãã¹ãšããŠããªãœãŒã¹ãå®å šã«å¶åŸ¡ã§ããããšãã°Amazon ec2ã䜿çšããŠãå¿ èŠã«å¿ããŠãªãœãŒã¹ãã¹ã±ãŒãªã³ã°ã§ããŸãã
ãã®èšäºã§ã¯ãè€æ°ã®ãªãŒãã³ãœãŒã¹ã®èªå·±ãã¹ãåã®ç¶ç¶ççµ±åã·ã¹ãã ã䜿çšããå人çãªçµéšã玹ä»ããŸãã ä»ã®ã·ã¹ãã ã䜿çšããå Žåã¯ãã³ã¡ã³ãã§ãããæããŠãã ããã
åºæ¬çãªæŠå¿µ
CIã®åºç€ã¯ããã«ãïŒãã«ãïŒ-ãããžã§ã¯ãã®åäžã®ã¢ã»ã³ããªã§ãã ãã«ãã¯ãããŸããŸãªããªã¬ãŒã«åŸã£ãŠçµã¿ç«ãŠãããšãã§ããŸã-ã¹ã±ãžã¥ãŒã«ã«åŸã£ãŠããªããžããªãžã®ããã·ã¥ããã«ãªã¯ãšã¹ãã ãã«ãã¯äžé£ã®ã¿ã¹ã¯ïŒãžã§ãïŒã§æ§æãããŸãã ã¿ã¹ã¯ã¯ãé 次ããã³äžŠè¡ããŠå®è¡ã§ããŸãã ã¿ã¹ã¯ã®ã»ããã¯ããã¹ãŠã®ã¿ã¹ã¯ãŸãã¯ãã«ããããªãã¯ã¹ïŒåé¢ãçºçããç¹æ§ïŒããªã¹ãããããšã§æå®ãããŸãã ããšãã°ãããã°ã©ãã³ã°èšèªãšç°å¢å€æ°ã®ããŒãžã§ã³ã瀺ãããšã«ãããèšèªã®åããŒãžã§ã³ãšå€æ°ã®åå€ã«å¯ŸããŠã¿ã¹ã¯ãäœæãããŸãã
äžéšã®ciã·ã¹ãã ã«ã¯ãã€ãã©ã€ã³ããããŸã-ã¿ã¹ã¯ã¯ã°ã«ãŒãã«ã°ã«ãŒãåããïŒã¹ããŒãžïŒãçŸåšã®ã°ã«ãŒãã®ãã¹ãŠã®ã¿ã¹ã¯ã¯äžŠåã§å®è¡ããã次ã®ã°ã«ãŒãã¯åã®ã°ã«ãŒããæ£åžžã«å®äºããå Žåã«ã®ã¿å®è¡ãããŸãã ããšãã°ããã¹ããã€ãã©ã€ã³ã¯ãããã€ã§ãããã¹ãäžã®ãã¹ãŠã®ã¿ã¹ã¯ãæ£åžžã«å®äºããå Žåããããã€ã°ã«ãŒãããã¿ã¹ã¯ãå®è¡ã§ããŸãã
ciãå¹ççã«æ©èœããããã«ã¯ããã£ãã·ã¥ãäœæããããšãéèŠã§ãããã£ãã·ã¥ã¯ããã«ããé«éåããããã«äœ¿çšãããŸãã apt-packagesãnpm cacheãcomposerã®ããããã§ãã ãã£ãã·ã¥ããªããã°ãåã¿ã¹ã¯ãéå§ãããšãã«ããã¹ãŠã®äŸåé¢ä¿ãå床ããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããå¿ èŠããããŸããããã¯ããã¹ãã®å®è¡èªäœãããæéããããå ŽåããããŸãã ãã£ãã·ã¥ãã¿ã¹ã¯ãå®è¡ãããµãŒããŒã«è¿ãã»ã©ãããšãã°ãamazon ec2ã䜿çšããŠããå Žåã¯ãamazon s3ã«ãã£ãã·ã¥ãä¿åããããšããå§ãããŸãã
ãã«ããå®è¡ãããšãã¢ãŒãã£ãã¡ã¯ããçæãããå¯èœæ§ããããŸã-ã¢ã»ã³ããªçµæãã³ãŒãã®æž æœãã«é¢ããã¬ããŒãããã°ã ãããã®ã¢ãŒãã£ãã¡ã¯ãã衚瀺ããã³ããŠã³ããŒãã§ããCIã·ã¹ãã ã¯ãç掻ãå€§å¹ ã«ç°¡çŽ åããŸãã
åæã«èµ·åãããå€æ°ã®ã¿ã¹ã¯ãæã€å€§èŠæš¡ãªãããžã§ã¯ããããå Žåãã¹ã±ãŒãªã³ã°ããã«è¡ãããšã¯ã§ããŸããã ã¹ã±ãŒãªã³ã°ã¯æåããã³èªåã§ãã æåã¹ã±ãŒãªã³ã°ã䜿çšãããšãç¡æã®ãµãŒããŒã§ã©ã³ããŒãèªåã§èµ·åããã³åæ¢ã§ããŸãã èªåã¹ã±ãŒãªã³ã°ã®å Žåãã·ã¹ãã èªäœãæ°ããä»®æ³ãã·ã³ãäœæãããã©ãããããã³ãã®æ°éã決å®ããŸãã ããŸããŸãªCIã·ã¹ãã ãããŸããŸãªãããã€ããŒããµããŒãããŸã-éåžžãAmazonãGoogle ComputeãDigital Oceanãªã©ã
éèŠãªããšã¯ãã·ã¹ãã ããã«ãæ§æïŒãšã°ãŒãã¥ãŒã¿ãŒïŒã§æå®ãããã³ãã³ããå®è¡ããæ¹æ³ã§ãã ããã€ãã®æ¹æ³ããããŸãïŒçŽæ¥å®è¡ïŒã©ã³ããŒãå®è¡ãããŠãããã¹ãäžïŒãsshãä»ããä»®æ³ãã·ã³ãDockerã³ã³ããå ã§ã®å®è¡ã ããããã®æ¹æ³ã«ã¯ãciã·ã¹ãã ãéžæããéã«èæ ®ããªããã°ãªããªãæ©èœããããŸããããšãã°ãDockerã³ã³ãããŒã§ã¿ã¹ã¯ãéå§ããå Žåãã»ãã·ã§ã³ãã¿ãŒããã«ããªãããããã¹ãã§ããªããã®ããããŸãã ãŸãããã¹ãã§å®è¡ããå Žåã¯ãå®è¡ã®çµäºåŸã«ãªãœãŒã¹ãã¯ãªãŒã³ã¢ããããããšãå¿ããªãã§ãã ãã-ããŒã¿ããŒã¹ãDockerã€ã¡ãŒãžãªã©ããããŒã¿ãåé€ããŸãã
æåŸã«ãéèŠã§ã¯ãªãããciã§ã®äœæ¥ããã楜ãããããªãã·ã§ã³ããããŸãã ãã°åºå-ãªã¢ã«ã¿ã€ã ã¢ãŒãã§åäœããŸããããããšãäžå®ã®ééã§åäœããŸããïŒ åé¡ãçºçããå Žåã«ãã«ããäžæããããšã¯å¯èœã§ããïŒ ãã«ãæ§æãšã¿ã¹ã¯ã確èªã§ããŸããïŒ
ãããŒã³
ãããŒã³ã¯ãããã«ãŒã³ã³ãããŒã«åºã¥ãç¶ç¶çãªçµ±åã·ã¹ãã ã§ãã Goã§æžãããŠããŸãã çŸåšã®ããŒãžã§ã³ã¯0.4ã§ãããŒãžã§ã³0.5ã¯ããŒã¿çã§ãã ã¬ãã¥ãŒã§ã¯ããŒãžã§ã³0.5ãèæ ®ããŠããŸãã
ãããŒã³ã¯ãGitHubãBitbucketãBitbucket ServerãGitLabãGogsãªã©ã®å€æ°ã®gitãªããžããªã§åäœããŸãã ãã«ãæ§æã¯ããªããžããªã®ã«ãŒãã«ãã.drone.ymlãã¡ã€ã«ã§æ§æãããŸãã
ãã«ãã¯è€æ°ã®ã¹ãããã§æ§æãããåã¹ãããã¯åå¥ã®dockerã³ã³ããã§äžŠè¡ããŠå®è¡ãããŸãã ãã«ããããªãã¯ã¹ã¯ãç°å¢å€æ°ã«ãã£ãŠå®çŸ©ãããŸãã ãµãŒãã¹ã³ã³ãããŒã䜿çšããããšãã§ããŸã-ããšãã°ãããŒã¿ããŒã¹ã§åäœããWebã¢ããªã±ãŒã·ã§ã³ããã¹ãããå ŽåããµãŒãã¹ã»ã¯ã·ã§ã³ã§ããŒã¿ããŒã¹ã®ããã«ãŒã€ã¡ãŒãžãèšå®ããå¿ èŠãããããã«ãã³ã³ãããŒããèªåçã«å©çšå¯èœã«ãªããŸãã ä»»æã®dockerã€ã¡ãŒãžã䜿çšã§ããŸãã
ãããŒã³ã¯ããããŒã³ãµãŒããŒãšãããŒã³ãšãŒãžã§ã³ãã§æ§æãããŸãã ãããŒã³ãµãŒããŒã¯ã³ãŒãã£ããŒã¿ãŒãšããŠæ©èœãã1ã€ä»¥äžã®ãããŒã³ãšãŒãžã§ã³ãããã«ããå®è¡ããŸãã ã¹ã±ãŒãªã³ã°ã¯ãè¿œå ã®ãããŒã³ãšãŒãžã§ã³ããèµ·åããããšã§å®è¡ãããŸãã èªåå®è¡ãšãŒãžã§ã³ãã«ã¯ã©ãŠããªãœãŒã¹ã䜿çšããæ¹æ³ã¯ãããŸããã çµã¿èŸŒã¿ã®ãã£ãã·ã¥ãµããŒãã¯ãããŸããïŒs3ã¹ãã¬ãŒãžã«ãã£ãã·ã¥ãããŒãããã³ä¿åããããã®ãµãŒãããŒãã£ã®ãã©ã°ã€ã³ããããŸãïŒã
ãã«ãã§æå®ãããã³ãã³ãã¯ãshã€ã³ã¿ãŒããªã¿ãŒã«ãã£ãŠdockerã³ã³ãããŒã§çŽæ¥å®è¡ãããŸããããã¯ãæ¡ä»¶ä»ãããžãã¯ãæã€è€éãªã³ãã³ããå®è¡ããå¿ èŠãããå Žåã«åé¡ãåŒãèµ·ãããŸãã
Gitlab CI
Gitlab CIã¯ãGithubã®èªå·±ãã¹ãåã¢ããã°ã§ããGitlabãããžã§ã¯ãã®äžéšã§ãã Gitlabã¯rubyã§æžããã gitlabã©ã³ããŒã¯Goã§æžãããŠããŸãã gitlabã®çŸåšã®ããŒãžã§ã³ã¯8.15ãgitlabã©ã³ããŒã¯1.9ã§ãã
Gitlab CIã¯gitlabãšçµ±åãããŠããããããªããžããªãšããŠgitlabã®ã¿ã䜿çšããŸãã gitlabã§ãµãŒãããŒãã£ã®ãªããžããªããã©ãŒãªã³ã°ã§ããŸãããç§ã®æèŠã§ã¯ãããã¯ããŸã䟿å©ã§ã¯ãããŸããã ãã«ãã¯ãã³ã³ãã¢ã®åçã«åºã¥ããŠæ§æãããŠããŸãã ã¿ã¹ã¯èµ·åã®ã¿ã€ããèšå®ã§ããŸã-Webã€ã³ã¿ãŒãã§ãŒã¹ããèªåãŸãã¯æåã§ã
Gitlab CIã¯ãWebã€ã³ã¿ãŒãã§ã€ã¹ïŒã³ãŒãã£ããŒã¿ãŒïŒãšã©ã³ããŒã§æ§æãããŠããŸãã ã³ãŒãã£ããŒã¿ãŒã¯ãã¿ã¹ã¯ãå®è¡ããã©ã³ããŒã«ã¿ã¹ã¯ãé åžããŸãã ã·ã§ã«ãdockerãdocker-sshãsshãvirtualboxãkubernetes-å¹ åºããšã°ãŒãã¥ãŒã¿ãŒããããŸãã ãã«ããã°ã¯ãªã¢ã«ã¿ã€ã ã§ã¯ãããŸãã-Webã€ã³ã¿ãŒãã§ãŒã¹ã¯å®æçã«ãµãŒããŒãããŒãªã³ã°ãããã°ã®æ°ããéšåã衚瀺ãããå ŽåãæåŸã«è¿œå ãããŸãã
çµã¿èŸŒã¿ã®ãã£ãã·ã¥ãµããŒãããããs3äºæã®ã¹ãã¬ãŒãžãã¹ãã¬ãŒãžãšããŠäœ¿çšã§ããŸãã ã¢ãŒãã£ãã¡ã¯ãããããŸã-åã ã®ãã¡ã€ã«ã衚瀺ããWebã€ã³ã¿ãŒãã§ãŒã¹ããã¢ãŒãã£ãã¡ã¯ãå šäœãããŠã³ããŒãã§ããŸãã
ã¯ã©ãŠããªãœãŒã¹ã®æäœã¯ãDocker mashineã䜿çšããŠæŽçãããŸãã æ°ãããã«ãã®ãªã¯ãšã¹ããåä¿¡ãããšã空ããã·ã³ããªãå ŽåãDocker mashineã¯æ°ãããã·ã³ãäœæãããã®ãã·ã³äžã§ãã«ããå®è¡ããŸãã åæã«ããã«ãã«å¿ èŠãªã€ã¡ãŒãžãå床ããŠã³ããŒãããå¿ èŠããããããgitlabã¯ãdocker mashineãããã€ããŒãšåããããã¯ãŒã¯äžã«ããå¥ã®dockerã¬ãžã¹ããªãäžããããšããå§ãããŸãã
ã·ã³ãã«ã·
SimpleCIã¯ããªãœãŒã¹ã®äœ¿çšãæ倧åããããã«äœæãããç¶ç¶çãªçµ±åã·ã¹ãã ã§ãã ããã³ããšã³ãã¯phpïŒSymfony3ães6ïŒã§æžãããããã¯ãšã³ãã¯javaã§æžãããŠããŸãã çŸåšã®ããŒãžã§ã³ã¯0.6ã§ãããç©æ¥µçãªéçºãé²è¡äžã§ãã
SimpleCIã¯githubããã³gitlabãªããžããªããµããŒãããŠããŸãã ãã«ãã¯ãgitlabãšåæ§ããã€ãã©ã€ã³ã®ååã«åºã¥ããŠç·šæãããŠããŸãã 1ã€ã®ã¹ããŒãžã®ãã¬ãŒã ã¯ãŒã¯å ã®ãã¹ãŠã®ã¿ã¹ã¯ãæ£åžžã«å®äºãããšã次ã®ã¹ããŒãžãéå§ãããŸãã
ãã£ãã·ã¥ã®ãµããŒããããäœæ¥ã ãã£ãã·ã¥ã¯ãã¿ã¹ã¯ã®äžéšãšããŠãã£ãã·ã¥ãã¡ã€ã«ãå€æŽãããå Žåã«ã®ã¿ã¹ãã¬ãŒãžã«æ³šãããŸãã s3äºæã¹ãã¬ãŒãžãšGoogleã¹ãã¬ãŒãžã® 2çš®é¡ã®ã¹ãã¬ãŒãžã§äœæ¥ãå®è£ ããŸããã
ãã«ãã¯ãDockerã³ã³ãããŒãèµ·åããsshãä»ããŠãã«ãã³ã³ãããŒã«æ¥ç¶ãããã«ãã¹ã¯ãªãããå®è¡ããããšã§å®è¡ãããŸãã ãã«ããã°ã¯ãªã¢ã«ã¿ã€ã ã§è¡šç€ºãããŸãïŒwebsocketãšcentrifugoã䜿çšïŒã
ã¯ã©ãŠããããã€ããŒã®ãªãœãŒã¹ã䜿çšããããšã«ãããèªåã¹ã±ãŒãªã³ã°ã®å¯èœæ§ããããŸãïŒãããŸã§ã¯googleã³ã³ãã¥ãŒãã£ã³ã°ãšã³ãžã³ã®ã¿ïŒã ã¹ã±ãŒãªã³ã°ãèšå®ããå Žåãä»®æ³ãã·ã³ã®äœææã«äœ¿çšãããã¹ãããã·ã§ãããæå®ããå¿ èŠããããŸãã ããã«ãããæ°ãããã·ã³ãäœæãããã³ã«ããŒãããªãããã«ãå¿ èŠãªdocker-imagesã䜿çšããŠã¹ãããã·ã§ãããäœæã§ããŸãã ã¢ãŒãã£ãã¡ã¯ãã®ãµããŒãã¯ãŸã ãããŸããã
ãããã«
ãã®ã¬ãã¥ãŒã§ã¯ãããã€ãã®èªå·±ãã¹ãåãªãŒãã³ãœãŒã¹ç¶ç¶ççµ±åã·ã¹ãã ã玹ä»ããŠããŸãã ã¬ãã¥ãŒæžã¿ã®ãã®ã«å ããŠããã¹ãåãåçšãããã³ãªãŒãã³ãªã·ã¹ãã ãå€æ°ãããŸãã ããŸããŸãªCIã·ã¹ãã ããéžæããå¿ èŠãªãã®ã«æ³šæãæããšããã¹ãã«æè¬ããŸãã
åç §è³æ
- ãããŒã³
- Gitlab CI
- ã·ã³ãã«ã·
- ãžã§ã³ãã³ã¹
- awersome ci - CIã·ã¹ãã ã®ãªã¹ãããã¹ãããŒã«ãããã³ãããã€