
ãAWSãAzureãGitlabã®CI / CDãã³ãŒã¹ã®éå§ãèŠè¶ããŠã圹ç«ã€è³æã®ç¿»èš³ãçšæããŸããã
ç¶ç¶ççµ±åïŒCIïŒãšç¶ç¶çé ä¿¡ïŒCDïŒã¯ãéçºè ããœãããŠã§ã¢ã®å€æŽãããé »ç¹ãã€ç¢ºå®ã«å±éã§ããããã«ããæåãäžé£ã®ååãšå®è·µã§ãã
CI / CDã¯DevOpsãã©ã¯ãã£ã¹ã®1ã€ã§ãããŸããã¢ãžã£ã€ã«ãã©ã¯ãã£ã¹ã«ãé©çšãããŸããå±éã®èªååã«ãããéçºè ã¯ããžãã¹èŠä»¶ãã³ãŒãå質ãããã³ã»ãã¥ãªãã£ãæºããããšã«éäžã§ããŸãã
CI / CDã®å®çŸ©
ç¶ç¶ççµ±åã¯ãé »ç¹ã«ã³ãããããã³ãŒãã«å°ããªå€æŽãå ããéçºæ¹æ³è«ãšäžé£ã®ãã©ã¯ãã£ã¹ã§ãããŸããææ°ã®ã¢ããªã±ãŒã·ã§ã³ã®ã»ãšãã©ã¯ããŸããŸãªãã©ãããã©ãŒã ãšããŒã«ã䜿çšããŠéçºãããŠãããããçµ±åã¡ã«ããºã ãšå°å ¥ããã倿Žã®ãã¹ããå¿ èŠã§ãã
æè¡çã«èšãã°ãCIã®ç®æšã¯ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããã±ãŒãžåãããã³ãã¹ãããããã®äžè²«ããèªååãããæ¹æ³ãæäŸããããšã§ããåçåãããç¶ç¶çãªçµ±åããã»ã¹ã«ãããéçºè ã¯é »ç¹ã«ã³ãããããå¯èœæ§ãé«ããªããŸããããã«ãããã³ãã¥ãã±ãŒã·ã§ã³ãæ¹åããããœãããŠã§ã¢ã®å質ãåäžããŸãã
ç¶ç¶çãªé ä¿¡ã¯ãç¶ç¶çãªçµ±åãçµäºãããšããããå§ãŸããŸããããŸããŸãªç°å¢ãžã®ã¢ããªã±ãŒã·ã§ã³ã®å±éãèªååããŸããã»ãšãã©ã®éçºè ã¯ãå®çšŒåç°å¢ãšéçºããã³ãã¹ãç°å¢ã®äž¡æ¹ã§äœæ¥ããŸãã
CI / CDããŒã«ã¯ãå±éäžã«æ§æãããç¹å®ã®ç°å¢ãã©ã¡ãŒã¿ãŒãèšå®ããã®ã«åœ¹ç«ã¡ãŸãããŸããCI / CDèªååã¯ãWebãµãŒããŒãããŒã¿ããŒã¹ãããã³ã¢ããªã±ãŒã·ã§ã³ã®å±éæã«åèµ·åãŸãã¯è¿œå ã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããã®ä»ã®ãµãŒãã¹ã«å¯ŸããŠå¿ èŠãªèŠæ±ãå®è¡ããŸãã
ç¶ç¶çãªçµ±åãšç¶ç¶çãªé ä¿¡ã«ã¯ç¶ç¶çãªãã¹ããå¿ èŠã§ã究極ã®ç®æšã¯é«å質ã®ã¢ããªã±ãŒã·ã§ã³ãéçºããããšã ããã§ããç¶ç¶çãªãã¹ãã¯ãCI / CDãã€ãã©ã€ã³ã§å®è¡ãããããŸããŸãªèªåãã¹ãïŒååž°ãããã©ãŒãã³ã¹ãªã©ïŒã®ã»ãããšããŠå®è£ ãããããšããããããŸãã
CI / CDã®æçãããã©ã¯ãã£ã¹ã«ãããç¶ç¶çãªå±éãå¯èœã«ãªããŸããã³ãŒããCI / CDãã€ãã©ã€ã³ãæ£åžžã«ééãããšãã¢ã»ã³ããªã¯èªåçã«å®çšŒåç°å¢ã«å±éãããŸããç¶ç¶çãªé ä¿¡ãå®è·µããŠããããŒã ã¯ãæ¯æ¥ãŸãã¯1æéããšã«å±éããäœè£ããããŸãããã ããç¶ç¶çãªé ä¿¡ããã¹ãŠã®ããžãã¹ã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããããã§ã¯ãªãããšã«æ³šæããŠãã ããã
ç¶ç¶çãªçµ±åã«ãããã³ãã¥ãã±ãŒã·ã§ã³ãšå質ãåäžããŸã
ç¶ç¶çãªçµ±åã¯ãèŠå¶ãããããã»ã¹ãšèªååã«åºã¥ãéçºæ¹æ³è«ã§ããç¶ç¶çãªçµ±åãå®è£ ãããŠãããããéçºè ã¯ã³ãŒãããœãŒã¹ã³ãŒããªããžããªã«ã³ãããããããšããããããŸãããããŠãã»ãšãã©ã®ããŒã ã¯ãå°ãªããšã1æ¥ã«1åã³ããããããšããã«ãŒã«ã«åŸããŸããå°ããªå€æŽã¯ãé·æéã«ããã£ãŠåãçµãã§ãã倧ããªå€æŽããããæ¬ é¥ãããŸããŸãªåé¡ãèŠã€ãããããªããŸããããã«ãçãã³ããããµã€ã¯ã«ã§äœæ¥ãããšãè€æ°ã®éçºè ãåãã³ãŒãã倿Žããå¯èœæ§ãäœããªããããŒãžã®ç«¶åãçºçããå¯èœæ§ããããŸãã
ç¶ç¶çãªçµ±åãå®è£ ããããŒã ã¯ãå€ãã®å ŽåãããŒãžã§ã³å¶åŸ¡ã·ã¹ãã ãã»ããã¢ããããŠã¯ãŒã¯ãããŒãå®çŸ©ããããšããå§ããŸããã³ãããã¯é »ç¹ã«è¡ããããšããäºå®ã«ãããããããæ©èœã®å®è£ ãšãã°ã®ä¿®æ£ã«ã¯é·ãæéããããå¯èœæ§ããããŸããã©ã®æ©èœãšã³ãŒãã®æºåãã§ããŠããããå¶åŸ¡ããã«ã¯ãããã€ãã®ã¢ãããŒãããããŸãã
å€ãã®äººãæ©èœãã©ã°ã䜿çšããŠããŸããããã¯ãå®è¡æã«æ©èœã®ãªã³ãšãªããåãæ¿ããã¡ã«ããºã ã§ãããŸã éçºäžã®æ©èœã¯æ©èœãã©ã°ã«ã©ããããããã¹ã¿ãŒãã©ã³ãããæ¬çªç°å¢ã«å±éãããŸãããå®å šã«äœ¿çšã§ããããã«ãªããŸã§ç¡å¹ã«ãªããŸããæè¿ã®ç ç©¶ã«ãããšãã©ã°æ©èœã䜿çšããŠããããŒã ã®63ïŒ ãããã¹ãå®¹ææ§ãšãœãããŠã§ã¢å質ã®åäžãå ±åããŠããŸããCloudBees RolloutãOptimizely RolloutsãLaunchDarklyãªã©ã®æ©èœãã©ã°ãæäœããããã®ç¹å¥ãªããŒã«ããããŸãããããã¯CI / CDã«çµ±åãããæ©èœã¬ãã«ã§æ§æãå®è¡ã§ããŸãã
æ©èœãæäœããå¥ã®æ¹æ³ã¯ãããŒãžã§ã³å¶åŸ¡ã·ã¹ãã ã§ãã©ã³ãã䜿çšããããšã§ãããã®å Žåãåå²ã¢ãã«ïŒGitflowãªã©ïŒãå®çŸ©ããã³ãŒããéçºããã¹ããããã³æ¬çªã®ãã©ã³ãã«ã©ã®ããã«çµã¿èŸŒãŸãããã説æããå¿ èŠããããŸããéçºãµã€ã¯ã«ãé·ãæ©èœã®å Žåãåå¥ã®æ©èœãã©ã³ããäœæãããŸããæ©èœã®äœæ¥ãå®äºããåŸãéçºè ã¯æ©èœãã©ã³ãããã¡ã€ã³éçºãã©ã³ãã«å€æŽãããŒãžããŸãããã®ã¢ãããŒãã¯ããŸãæ©èœããŸãããå€ãã®æ©èœãåæã«éçºãããŠããå Žåã¯äžäŸ¿ã«ãªãå¯èœæ§ããããŸãã
ãã«ããã§ãŒãºã§ã¯ãå¿ èŠãªãœãããŠã§ã¢ãããŒã¿ããŒã¹ãããã³ãã®ä»ã®ã³ã³ããŒãã³ãã®ããã±ãŒãžåãèªååããŸããããšãã°ãJavaã¢ããªã±ãŒã·ã§ã³ãéçºããŠããå ŽåãCIã¯ãHTMLãCSSãJavaScriptãªã©ã®ãã¹ãŠã®éçãã¡ã€ã«ãJavaã¢ããªã±ãŒã·ã§ã³ããã³ããŒã¿ããŒã¹ã¹ã¯ãªãããšãšãã«ããã±ãŒãžåããŸãã
CIã¯ããã¹ãŠã®ãœãããŠã§ã¢ã³ã³ããŒãã³ããšããŒã¿ããŒã¹ãããã±ãŒãžåããã ãã§ãªãããŠããããã¹ãããã®ä»ã®ã¿ã€ãã®ãã¹ããèªåçã«å®è¡ããŸãããã®ãã¹ãã«ãããéçºè ã¯ãè¡ã£ã倿Žã«ãã£ãŠäœãç Žæããªãã£ããšãããã£ãŒãããã¯ãåŸãããšãã§ããŸãã
ã»ãšãã©ã®CI / CDããŒã«ã§ã¯ãæåãã³ãããããŸãã¯ã¹ã±ãžã¥ãŒã«ã«åŸã£ãŠãã«ããéå§ã§ããŸããããŒã ã¯ãããŒã ã®ãµã€ãºãäºæ³ããã1æ¥ã®ã³ããããããã³ãã®ä»ã®åºæºã«åºã¥ããŠãããŒã ã«é©ãããã«ãã¹ã±ãžã¥ãŒã«ã«ã€ããŠè©±ãåãå¿ èŠããããŸããã³ããããšãã«ããé«éã§ããããšãéèŠã§ããããããªããšããã«ããé·ããšãéçºè ããã°ããé »ç¹ã«ã³ãããããããšããéã®é害ã«ãªãå¯èœæ§ããããŸãã
ç¶ç¶çãªãã¹ãã¯ãã¹ãã®èªåå以äžã®ãã®ã§ã
èªåãã¹ããã¬ãŒã ã¯ãŒã¯ã¯ãQAãšã³ãžãã¢ãããŸããŸãªçš®é¡ã®ãã¹ããèšèšãå®è¡ãããã³èªååããã®ã«åœ¹ç«ã¡ãéçºè ããã«ãã®æåã远跡ããã®ã«åœ¹ç«ã¡ãŸãããã¹ãã«ã¯ãåã¹ããªã³ãã®æåŸã«éçºãããã¢ããªã±ãŒã·ã§ã³å šäœã®ååž°ãã¹ãã«çµåãããæ©èœãã¹ããå«ãŸããŸããååž°ãã¹ãã¯ã倿Žã«ãã£ãŠã¢ããªã±ãŒã·ã§ã³ã®ä»ã®å Žæã§äœããå£ãããã©ãããããŒã ã«éç¥ããŸãã
ãã¹ããã©ã¯ãã£ã¹ã¯ãéçºè ã«ããŒã«ã«ç°å¢ã§ååž°ãã¹ãã®å šéšãŸãã¯äžéšãå®è¡ããããã«èŠæ±ããããšã§ããããã«ãããéçºè ã¯ãã§ã«ãã§ãã¯æžã¿ã®ã³ãŒããã³ãããã§ããŸãã
ååž°ãã¹ãã¯ã»ãã®å§ãŸãã«éããŸãããããã©ãŒãã³ã¹ãã¹ããAPIãã¹ããéçã³ãŒãåæãã»ãã¥ãªãã£ãã¹ã-ãããããã³ãã®ä»ã®ã¿ã€ãã®ãã¹ããèªååã§ããŸããéèŠãªç¹ã¯ãã³ãã³ãã©ã€ã³ãWebhookããŸãã¯WebãµãŒãã¹ãä»ããŠãããã®ãã¹ããå®è¡ããå®è¡çµæãè¿ãæ©èœã§ãããã¹ããæåãããã©ããã
ç¶ç¶çãªãã¹ãã«ã¯ãèªååã ãã§ãªããèªååããããã¹ãã®CI / CDãã€ãã©ã€ã³ãžã®çµ±åãå«ãŸããŸãããŠããããã¹ããšæ©èœãã¹ãã¯CIã®äžéšã§ãããCIãã€ãã©ã€ã³ã®èµ·ååãŸãã¯èµ·åäžã«åé¡ãç¹å®ã§ããŸããããã©ãŒãã³ã¹ãã¹ããã»ãã¥ãªãã£ãã¹ããªã©ãå®å šãªç°å¢å±éãå¿ èŠãšãããã¹ãã¯ãå€ãã®å ŽåCDã®äžéšã§ããããã«ããã¿ãŒã²ããç°å¢ã«å±éãããåŸã«å®è¡ãããŸãã
CDãã€ãã©ã€ã³ã¯ãããŸããŸãªç°å¢ãžã®å€æŽã®é ä¿¡ãèªååããŸã
ç¶ç¶çãªé ä¿¡ãšã¯ãã¢ããªã±ãŒã·ã§ã³ãã¿ãŒã²ããç°å¢ã«èªåçã«å±éããããšã§ããéåžžãéçºè ã¯ããã¹ããšã¬ãã¥ãŒã®ããã«ã¢ããªã±ãŒã·ã§ã³ãå±éããã1ã€ä»¥äžã®éçºç°å¢ãšãã¹ãç°å¢ã§äœæ¥ããŸãããã®ããã«ãJenkinsãCircleCIãAWS CodeBuildãAzure DevOpsãAtlassian BambooãTravisCIãªã©ã®CI / CDããŒã«ã䜿çšãããŸãã
äžè¬çãªCDãã€ãã©ã€ã³ã¯ããã«ãããã¹ããããã³å±éã®ã¹ãããã§æ§æãããŠããŸããããè€éãªãã€ãã©ã€ã³ã«ã¯ãæ¬¡ã®æé ãå«ãŸããŸãã
- ãœãŒã¹ã³ã³ãããŒã«ããã³ãŒããååŸãããã«ããå®è¡ããŸãã
- Infrastructure-as-Codeã¢ãããŒãã«ãã£ãŠèªååãããã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ§æã
- ã³ãŒããã¿ãŒã²ããç°å¢ã«ã³ããŒããŸãã
- ã¿ãŒã²ããç°å¢ã®ç°å¢å€æ°ãèšå®ããŸãã
- (-, API-, ).
- , , .
- .
- .
ããšãã°ãJenkinsã³ã³ãã€ãŒã§æ±ºå®ããããã¡ã€ã«Jenkinsfileã«ã¯ãã¢ã»ã³ããªïŒãã«ãïŒããã¹ãïŒãã¹ãïŒãå±éïŒãããã€ïŒãªã©ã®ããŸããŸãªã¹ããããèšè¿°ãããŠããŸãããŸãããã€ãã©ã€ã³ã¹ããŒãžã§äœ¿çšã§ããç°å¢å€æ°ãç§å¯éµãèšŒææžãããã³ãã®ä»ã®ãã©ã¡ãŒã¿ãŒã«ã€ããŠã説æããŸããæçš¿ã»ã¯ã·ã§ã³ã§ã¯ããšã©ãŒåŠçãšéç¥ãæ§æããŸãã
ããè€éãªCDãã€ãã©ã€ã³ã§ã¯ãããŒã¿ã®åæãæ å ±ãªãœãŒã¹ã®ã¢ãŒã«ã€ããæŽæ°ãšãããã®ã€ã³ã¹ããŒã«ãªã©ã®è¿œå ã®æé ãå¿ èŠã«ãªãå ŽåããããŸãã CI / CDããŒã«ã¯éåžžããã©ã°ã€ã³ããµããŒãããŸããããšãã°ãJenkinsã«ã¯ããµãŒãããŒãã£ãã©ãããã©ãŒã ãšçµ±åãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã管çããœãŒã¹ã³ãŒã管çãããã³æ§ç¯ãæ¡åŒµããããã®1500ãè¶ ãããã©ã°ã€ã³ããããŸãã
CI / CDããŒã«ã䜿çšããå Žåãéçºè ã¯ããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãç°å¢å€æ°ãä»ããŠã¢ããªã±ãŒã·ã§ã³ã®å€éšã§æ§æãããŠããããšã確èªããå¿ èŠããããŸããCI / CDããŒã«ã䜿çšãããšããããã®å€æ°ã®å€ãèšå®ãããã¹ã¯ãŒããšã¢ã«ãŠã³ãããŒããã¹ã¯ããç¹å®ã®ç°å¢ãžã®å±éäžã«ããããã«ã¹ã¿ãã€ãºã§ããŸãã
CDããŒã«ã«ãããã·ã¥ããŒããšã¬ããŒãããããŸãããã«ããŸãã¯é ä¿¡ã«å€±æããå Žåã圌ãã¯ããã«ã€ããŠéç¥ããŸããCDãããŒãžã§ã³ã³ã³ãããŒã«ããã³ã¢ãžã£ã€ã«ããŒã«ãšçµ±åããããšã«ããããã«ãã«å«ãŸããã³ãŒãã®å€æŽããŠãŒã¶ãŒã¹ããŒãªãŒãç°¡åã«èŠã€ããããšãã§ããŸãã
Kubernetesããã³ãµãŒããŒã¬ã¹ã¢ãŒããã¯ãã£ã䜿çšããCI / CDãã€ãã©ã€ã³ã®å®è£
ã¯ã©ãŠãã§CI / CDãã€ãã©ã€ã³ã䜿çšããå€ãã®ããŒã ã¯ãDockerã®ãããªã³ã³ãããšKubernetesã®ãããªãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã·ã¹ãã ã䜿çšããŸããã³ã³ããã¯ãããã±ãŒãžã³ã°ãé ä¿¡ãæšæºåããæ®çºæ§ç°å¢ã®ã¹ã±ãŒãªã³ã°ãšç Žå£ãç°¡çŽ åããã®ã«åœ¹ç«ã¡ãŸãã
ã³ã³ãããã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãããã³CI / CDãã€ãã©ã€ã³ãå ±æããããã®å€ãã®ãªãã·ã§ã³ããããŸããããã«ã€ããŠè©³ããã¯ãKubernetes withJenkinsããã³Kuberneteswith AzureDevOpsã®èšäºãã芧ãã ããã
ãµãŒããŒã¬ã¹ã³ã³ãã¥ãŒãã£ã³ã°ã¯ãã¢ããªã±ãŒã·ã§ã³ãå±éããã³ã¹ã±ãŒãªã³ã°ãããã1ã€ã®æ¹æ³ã§ãããµãŒããŒã¬ã¹ç°å¢ã§ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ã¯ã©ãŠããããã€ããŒã«ãã£ãŠå®å šã«ç®¡çãããã¢ããªã±ãŒã·ã§ã³ã¯ãã®èšå®ã«åŸã£ãŠå¿ èŠã«å¿ããŠãªãœãŒã¹ãæ¶è²»ããŸããããšãã°ãAWSã§ã¯ããµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã¯AWS Lambda颿°ãä»ããŠå®è¡ããããã®å±éã¯ãã©ã°ã€ã³ã䜿çšããŠJenkins CI / CDãã€ãã©ã€ã³ã«çµ±åã§ããŸãã
CI / CDã«ãããããé »ç¹ãªã³ãŒãå±éãå¯èœã«ãªããŸã
ããã§ã¯ãèŠçŽããŸãããã CIããã±ãŒãžããã«ãã®ãã¹ããããã³åé¡ãçºçããå Žåã®éçºè ãžã®éç¥ã CDã¯èªåçã«ã¢ããªã±ãŒã·ã§ã³ãå±éãã远å ã®ãã¹ããå®è¡ããŸãã
CI / CDãã€ãã©ã€ã³ã¯ãä¿¡é Œæ§ã®é«ãé ä¿¡ããã»ã¹ã§ã¢ããªã±ãŒã·ã§ã³ã«é »ç¹ã«å€æŽãå ããå¿ èŠãããçµç¹åãã«èšèšãããŠããŸãããã«ãã®æšæºåããã¹ãã®éçºãããã³å±éã®èªååã«å ããŠãã³ãŒã倿Žãå±éããããã®å šäœçãªã¯ãŒã¯ãããŒãååŸããŸãã CI / CDãå®è£ ããããšã§ãéçºè ã¯ã¢ããªã±ãŒã·ã§ã³ã®æ¹åã«éäžã§ããå±éã«æéãç¡é§ã«ããããšã¯ãããŸããã
CI / CDã¯DevOpsãã©ã¯ãã£ã¹ã®1ã€ã§ãããã¯ãé »ç¹ã«å€æŽãå ãããéçºè ãšãå®å®æ§ãå¿ èŠãšããæªçšãšã®éã®ççŸãšæŠãããšãç®çãšããŠããããã§ããèªååã«ãããéçºè ã¯ããé »ç¹ã«å€æŽãå ããããšãã§ããç°å¢ã®æ§æãæšæºåãããé ä¿¡ããã»ã¹äžã«ç¶ç¶çãªãã¹ããå®è¡ããããããéçšããŒã ã¯ããå®å®æ§ãåŸãããšãã§ããŸãããŸããç°å¢å€æ°ã®èšå®ã¯ã¢ããªã±ãŒã·ã§ã³ãšã¯å¥ã§ãããèªåããŒã«ããã¯æé ããããŸãã
CI / CDãã€ãã©ã€ã³ã®å®è£ ã«ãã圱é¿ã¯ãDevOpsã®äž»èŠãªããã©ãŒãã³ã¹ææšïŒKPIïŒã®èгç¹ããæž¬å®ã§ããŸãã..ãå±éé »åºŠã倿ŽãªãŒãæéãå¹³åå埩æéãªã©ã®KPIã¯ãç¶ç¶çãªãã¹ãã䌎ãCI / CDå±éã§æ¹åãããããšããããããŸãããã ããCI / CDã¯ããããã®æ¹åã«è²¢ç®ã§ããããã»ã¹ã®1ã€ã«ãããŸãããé ä¿¡é »åºŠãäžããã«ã¯ãä»ã«ãæ¡ä»¶ããããŸãã
CI / CDã®äœ¿çšãéå§ããã«ã¯ãéçºããã³éçšããŒã ããã¯ãããžãŒããã©ã¯ãã£ã¹ãããã³åªå é äœã«ã€ããŠååããå¿ èŠããããŸããããŒã ã¯ãCI / CDã®å®è£ åŸãããŒã ãéžæããããã©ã¯ãã£ã¹ãäžè²«ããŠé å®ã§ããããã«ãããžãã¹ãšãã¯ãããžãŒãžã®é©åãªã¢ãããŒãã«ã€ããŠã³ã³ã»ã³ãµã¹ãæ§ç¯ããå¿ èŠããããŸãã
CICDããŒã«ã®æŠèŠïŒGitlab CIãDockerãAnsible