GitLab CIã¯ã€ãã¯ã¹ã¿ãŒã
GitLab CIã¯ã€ãã¯ã¹ã¿ãŒãã¬ã€ããžããããããã®ã¬ã€ãã§ã¯ãGitLabã§ã®ãããžã§ã¯ãèšå®ãããã·ã³ãã«ãªCIèšå®ãã³ãŒãã§äœæãããŸã§ã®æé ããæ¡å ããŸããGitLab CIãçŽ æ©ãå§ããããããããããããã解説ããŸãã
ãã®ã¯ã€ãã¯ã¹ã¿ãŒãã¬ã€ãã§ã¯ã以äžã®ã¿ã¹ã¯ã«ã€ããŠèª¬æããŸãïŒ
- æ°èŠãããžã§ã¯ãã®äœæ
- åããŠã®CI/CDèšå®ã®äœæãšãã€ãã©ã€ã³ã®å®è¡
- å®è¡çµæãžã®ã¢ã¯ã»ã¹ãšç¢ºèª
- ãžã§ãå®è¡ã決å®ããã«ãŒã«ããŒã¹ã®æ¡ä»¶ã®å°å ¥
- ãã€ãã©ã€ã³ãã³ãã¬ãŒããæŽ»çšããæçãªèšå®ã®ã·ãŒã ã¬ã¹ãªçµ±å
éå§åã®æºå
GitLabã¢ã«ãŠã³ãããæã¡ã§ããããšãã確èªãã ãããã¢ã«ãŠã³ãããæã¡ã§ãªãå Žåã¯ããã¡ããããµã€ã³ã¢ããããŠãã ããã
ãããžã§ã¯ãå ã§ã¯ãã³ãŒãããŒã¹ãCIèšå®ãèšç»ãåæãããŒã ã¡ã³ããŒãªã©ãããŸããŸãªã³ã³ããŒãã³ãã管çãããŸãããã®ã¬ã€ãã§ã¯ãreadmeãã¡ã€ã«ã®ã¿ãå«ããŸã£ãããªç¶æ ã®æ°èŠãããžã§ã¯ããäœæããŸãã
- ãããããŒã®å³åŽã«ãããã©ã¹ã¢ã€ã³ã³ãã¯ãªãã¯ããæ°èŠãããžã§ã¯ã/ãªããžããªãéžæããŠæ°èŠãããžã§ã¯ããäœæããŸã
- 空ã®ãããžã§ã¯ãã®äœæãéžæããŸãã
ãããžã§ã¯ãåã«my-projectãšå ¥åããŸãã - ãããžã§ã¯ããäœæãã¯ãªãã¯ããŸãã
- ããã§ãšãããããŸãïŒåããŠã®ãããžã§ã¯ãã®äœæã«æåããŸããã
GitLabã§ã¯ãCIèšå®ã¯YAMLæ§æã䜿çšããŠã³ãŒãã§å®çŸ©ãããŸãããã®èšå®ã§ã¯ããžã§ãã®å®è¡ããžã§ãã®é åºããžã§ãã®æ¡ä»¶ãªã©ã«é¢ããã©ã³ããŒãã·ã³ãžã®æç€ºãæå®ããŸããCIèšå®ãå®çŸ©ããã«ã¯ããªããžããªã®ã«ãŒãã«é 眮ãã**.gitlab-ci.yml**ãšãããã¡ã€ã«ãäœæããå¿ èŠããããŸãããã®ã¬ã€ãã§ã¯ãWeb IDEã䜿çšããŠãã®ãã¡ã€ã«ãäœæã»ç·šéããŸãã
Web IDEã«ã¢ã¯ã»ã¹ããã«ã¯ããããžã§ã¯ãå ã«ããWeb IDEã¯ã€ãã¯ãã¿ã³ãã¯ãªãã¯ããã ãã§ããWeb IDEå ã§ãå·ŠåŽã®ãã¡ã€ã«ãšã¯ã¹ãããŒã©ãŒã«ç§»åããŸãããã¡ã€ã«ãšã¯ã¹ãããŒã©ãŒå ã§å³ã¯ãªãã¯ããæ°ãããã¡ã€ã«ãªãã·ã§ã³ãéžæããŸããæ°ããäœæãããã¡ã€ã«ã«**.gitlab-ci.yml**ãšããååãä»ããŸãã
ãžã§ãå®è¡ã®é åºã¯ãèšå®ã§å®çŸ©ãããã¹ããŒãžã«ãã£ãŠæ±ºãŸããŸãããã®ã¬ã€ãã§ã¯ãbuildãtestãpackageã®3ã€ã®ã¹ããŒãžãããã®é åºã§å®çŸ©ããŸãã以äžã®ã³ãŒãã**.gitlab-ci.yml**ãã¡ã€ã«ã«ã³ããŒïŒããŒã¹ãããŠãã ããïŒ
stages:
- build
- test
- package
2ã€ã®ããã¹ããã¡ã€ã«ãäœæããã·ããªãªãæ³å®ããŠã¿ãŸãããããããã®ãã¡ã€ã«ãé£çµããæã«ãHello world.ããšããæååãå«ãŸããããšãæãéèŠã§ãããã€ãã©ã€ã³ãžã§ãã䜿çšããŠããã®èŠä»¶ããã«ãããã¹ããããã±ãŒãžåããããšãç®æšã§ãã
以äžã®ã¿ã¹ã¯ãå®è¡ãããã«ããžã§ããæå®ããŸãïŒãHello,ããšããåèªãå«ãããã¹ããã¡ã€ã«ã®äœæããWorldããšããåèªãå«ãå¥ã®ããã¹ããã¡ã€ã«ã®äœæã2ã€ã®ãã¡ã€ã«ã®çµåå 容ãä¿åãã3çªç®ã®ãã¡ã€ã«ãçæããŸãã3çªç®ã®ãã¡ã€ã«ãã¢ãŒãã£ãã¡ã¯ããšããŠä¿åããtestãšpackageã¹ããŒãžã®åŸç¶ãžã§ããã¢ã¯ã»ã¹ã§ããããããŸããstagesãããã¯ã®äžã«ä»¥äžã®ã³ãŒããæ¿å ¥ããŸãïŒ
build-job:
stage: build
script:
- echo "Hello " | tr -d "\n" > file1.txt
- echo "world" > file2.txt
- cat file1.txt file2.txt > compiled.txt
artifacts:
paths:
- compiled.txt
ãã«ãã®æŽåæ§ãæ€èšŒããããããã¹ããžã§ããçµã¿èŸŒã¿ãŸãããã®ãžã§ãã¯ãcompiled.txtãã¡ã€ã«ã«æåŸ ããããHello worldããšããæååãå®éã«å«ãŸããŠãããã確èªããŸãããã«ããžã§ãã®äžã«ä»¥äžã®ã³ãŒããæ¿å ¥ããŠãã ããïŒ
test:
stage: test
script: cat compiled.txt | grep -q 'Hello world '
ãã¹ããæ£åžžã«å®äºãããšã次ã®ç®æšã¯ã³ãŒãã®ããã±ãŒãžãçæããããšã§ãããããå®çŸãããããããã±ãŒãžãžã§ããå«ããŸãããã¹ãã倱æããå Žåããã€ãã©ã€ã³å šäœã倱æãšã¿ãªãããåŠçãç¶ç¶ãããªãããšã«ã泚æãã ããããã¹ããžã§ãã®äžã«ä»¥äžã®ã³ãŒããæ¿å ¥ããŠãã ããïŒ
package:
stage: package
script: cat compiled.txt | gzip > packaged.gz
artifacts:
paths:
- packaged.gz
stages: # ãžã§ãã®ã¹ããŒãžãªã¹ããšå®è¡é åº
- build
- test
- package
build-job:
stage: build
script:
- echo "Hello " | tr -d "\n" > file1.txt
- echo "world" > file2.txt
- cat file1.txt file2.txt > compiled.txt
artifacts:
paths:
- compiled.txt
test:
stage: test
script: cat compiled.txt | grep -q 'Hello world'
package:
stage: package
script: cat compiled.txt | gzip > packaged.gz
artifacts:
paths:
- packaged.gz
ãµã³ãã«ãããžã§ã¯ãã®èšå®ãã¡ã€ã«ãžã®ãªã³ã¯ã¯ãã¡ãã§ãã
ããã§ãšãããããŸãïŒåããŠã®CIãã€ãã©ã€ã³ãæ§ç¯ããŸããã
ãããžã§ã¯ãå ã§ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ïŒCIïŒãæå¹ã«ããã«ã¯ã.gitlab-ci.ymlãã¡ã€ã«ããªããžããªã«ããã·ã¥ããå¿ èŠããããŸãããã®ãã¡ã€ã«ããªããžããªã®ã«ãŒãã«é 眮ããããšããããžã§ã¯ãã«å¯Ÿãããã¹ãŠã®ã³ããããèªåçã«CIãã€ãã©ã€ã³ãéå§ããŸãããã®ãã¡ã€ã«ããµãŒããŒã«ããã·ã¥ããçŽåŸã«ãååã®ãã€ãã©ã€ã³ãéå§ãããŸãã
- ãã¡ã€ã«ãšã¯ã¹ãããŒã©ãŒã®å·ŠåŽã«ããããŒãžã¢ã€ã³ã³ãã¯ãªãã¯ããŸãã
- ãCIèšå®ã远å ããªã©ã®ã³ãããã¡ãã»ãŒãžãå ¥åããŸãã
- ã³ãããïŒããã·ã¥ãã¯ãªãã¯ããŸãã
- ãæ°ãããã©ã³ãã«ã³ãããããŸããïŒããšè¡šç€ºããããããããããçŸåšã®ãã©ã³ãmainã䜿çšããéžæããŸãã
- ãããžã§ã¯ãã«æ»ãã«ã¯ãå·Šäžã«ãããããžã§ã¯ãã«ç§»åãã¿ã³ãã¯ãªãã¯ããŸãã
ããã§ãšãããããŸãïŒãããžã§ã¯ãããã¹ãŠã®ã³ãŒãã³ãããã«å¯ŸããŠCIãã€ãã©ã€ã³ãèªåçã«éå§ããããæ£åžžã«èšå®ãããŸããã
ãã€ãã©ã€ã³ã®å®è¡äžã¯ãCI/CDã¿ãã§ã¹ããŒã¿ã¹ãç£èŠã§ããŸãããã®æ©èœã«ããããžã§ãã®é²è¡ç¶æ³ãç°¡åã«è¿œè·¡ã§ããå®è¡ã¹ããŒã¿ã¹ïŒéå§æžã¿ãæåã倱æãªã©ïŒãããžã§ãã¹ã¯ãªããã«ãã£ãŠçæãããåºåã確èªã§ããŸãã
- GitLabãããžã§ã¯ãã«ç§»åããå·ŠåŽã®ã¡ãã¥ãŒã確èªããŸãã
- ã¡ãã¥ãŒã®CI/CDãã¯ãªãã¯ãããã€ãã©ã€ã³ãã¯ãªãã¯ããŸãã
- ãã€ãã©ã€ã³ããŒãžã§ãã¹ããŒã¿ã¹åã®ãã€ãã©ã€ã³ãã¿ã³ãèŠã€ããŸãããããã¯ãªãã¯ããŠãã€ãã©ã€ã³ã°ã©ããéããŸãã
- ãã€ãã©ã€ã³ã°ã©ãå ã§ãžã§ããšããããã®ã¹ããŒã¿ã¹ã確èªã§ããŸãã
- ç¹å®ã®ãžã§ãã詳ãã調ã¹ãã«ã¯ããžã§ããã¯ãªãã¯ããŠãžã§ãã³ã³ãœãŒã«ãéããŸãããã®ã³ã³ãœãŒã«ã«ã¯ãRunnerãã·ã³ã§å®è¡ããããã¹ãŠã®ã¹ãããã衚瀺ãããŸãã
- packageãžã§ãã³ã³ãœãŒã«ãéããŠãRunnerã«ãã£ãŠåŠçãããã¹ãããã確èªããŸãã
- packageãžã§ãã¯ã¢ãŒãã£ãã¡ã¯ããçæããŸããå³åŽã«ããããŠã³ããŒããã¿ã³ãã¯ãªãã¯ããŠããŠã³ããŒãã§ããŸãã
- ãããã®æé ã«åŸãããšã§ããã€ãã©ã€ã³ã¹ããŒã¿ã¹ã广çã«è¿œè·¡ãããžã§ãã®è©³çŽ°ãæ€æ»ãããã€ãã©ã€ã³å®è¡äžã«çæãããé¢é£ããã¢ãŒãã£ãã¡ã¯ããããã±ãŒãžãååŸã§ããŸãã
** åããŠã®ãã€ãã©ã€ã³ã®å®è¡ã«æåããŸãããããã§ãšãããããŸãïŒãã€ãã©ã€ã³ãæåããçµæã確èªããŠãžã§ãã¢ãŒãã£ãã¡ã¯ããããŠã³ããŒãããŸãã**
ãã¹ããžã§ãã®æåŸ å€ã倿Žãããšããã¹ããžã§ãã倱æãããã€ãã©ã€ã³å šäœã倱æããŸãã
- testãžã§ããç·šéãããHello Worldããšããæååããhello worldãïŒå°æåïŒã«å€æŽããŸãã
- ã³ãŒãã®å€æŽãã³ãããããã¹ããã4ãšåæ§ã«ãã€ãã©ã€ã³ã確èªããŸãã
- ãã€ãã©ã€ã³ã確èªãããšãtestãžã§ãã倱æããŠããããšãããããŸããããã«ãåŸç¶ã®packageãžã§ãã¯éå§ããããæ³å®éãã«ãã€ãã©ã€ã³èªäœã倱æããŠããŸãã
ã¹ããã5ã§ã¯ããžã§ãã®å€±æããã€ãã©ã€ã³å šäœã倱æãããããšã確èªããŸããã以äžã®æé ã§ããžã§ãã®å€±æããã€ãã©ã€ã³å šäœã®å€±æãåŒãèµ·ããã¿ã€ãã³ã°ã決å®ããããžãã¯ããã€ãã©ã€ã³ã«å°å ¥ã§ããŸãïŒ
- ãžã§ãã®å€±æããã€ãã©ã€ã³ã®å€±æã«ã€ãªããæ¡ä»¶ãè©äŸ¡ããŸããããšãã°ãmainãŸãã¯ããã©ã«ããã©ã³ãã§ãžã§ãã倱æããå Žåã¯ãã€ãã©ã€ã³ã®å€±æã匷å¶ããä»ã®ãã©ã³ãã§ã®ãžã§ã倱æã¯ãã€ãã©ã€ã³ã®ç¶ç¶ãèš±å¯ããããšãã§ããŸãã
- 倱æåäœãå¶åŸ¡ããã«ãŒã«ãå®çŸ©ããŸãã$CI_COMMIT_BRANCHãªã©ã®å€æ°ã掻çšããŠçŸåšã®ãã©ã³ãã確èªããããã«åºã¥ããŠæ±ºå®ãè¡ãããšãã§ããŸãã
- é©åãªæ¡ä»¶ãèšå®ãããžã§ããallow_failure: falseãŸãã¯allow_failure: trueãšããŠããŒã¯ããããæå®ããŸãã
- ãã¹ããžã§ãã«rules/ifæ¡ä»¶ã远å ããŸãã
- ãã©ã³ãã«åºã¥ããŠtrueãŸãã¯falseã«èšå®ãããallow_failureããŒã¯ãŒãã䜿çšããŸãã
test:
stage: test
script: cat compiled.txt | grep -q 'Hello world'
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
allow_failure: false
- if: $CI_COMMIT_BRANCH
allow_failure: true
ãã€ãã©ã€ã³èšå®ã®ã»ããã¢ãããå¹çåãããããGitLabãæäŸããçµã¿èŸŒã¿ãã€ãã©ã€ã³ãã³ãã¬ãŒããæŽ»çšã§ããŸãããããã®ãã³ãã¬ãŒãã¯ãã»ãã¥ãªãã£ã¹ãã£ã³ãAWSãããã€ãªã©ãäžè¬çãªãŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ããäºåå®çŸ©ãããèšå®ãæäŸããŸãã
çµã¿èŸŒã¿ãã€ãã©ã€ã³ãã³ãã¬ãŒããå©çšããã«ã¯ã以äžã®æé ã«åŸã£ãŠãã ããïŒ
- ãã«ãããã¹ãããããã€ãªã©ãããŸããŸãªã·ããªãªã«å¯ŸããŠGitLabãæäŸããå©çšå¯èœãªãã€ãã©ã€ã³ãã³ãã¬ãŒãã確èªããŸãããã³ãã¬ãŒãã¯ãã¡ãã§ç¢ºèªã§ããŸãã
- èŠä»¶ã«åã£ããã³ãã¬ãŒããéžæããŸãã
- .gitlab-ci.ymlãã¡ã€ã«ã§ãã³ãã¬ãŒããåç §ããããšã§ããã€ãã©ã€ã³èšå®ã«ãã³ãã¬ãŒããçµã¿èŸŒã¿ãŸããéåžžãincludeããŒã¯ãŒãã䜿çšããŠãã³ãã¬ãŒããã¡ã€ã«ãžã®ãã¹ãŸãã¯URLãæå®ããããšã§å®è¡ã§ããŸãã
ãã®ã¬ã€ãã§ã¯ãCode-Qualityãã³ãã¬ãŒãã䜿çšããŠãã³ãŒãå質ã¹ãã£ã³ãèšå®ã«è¿œå ããŸãã
stagesãããã¯ã®äžã«ä»¥äžã®ã³ãŒãã远å ããŠãã³ãŒãå質ãã³ãã¬ãŒãã**.gitlab-ci.yml**ã«å«ããŸãã
include:
- template: Jobs/Code-Quality.gitlab-ci.yml
ãã®å€æŽãã³ãããããŠããã·ã¥ããŸãã
ãã€ãã©ã€ã³ã«ã³ãŒãå質ãžã§ãã远å ãããããšã確èªã§ããŸããã³ãŒãå質ã¹ãã£ããŒã¯ããã®ãªããžããªã«ã³ãããããããã¹ãŠã®ã³ãŒã倿Žã培åºçã«åæããæ³šæãæ¹åãå¿ èŠãªã³ãŒãå質ã®åé¡ã匷調衚瀺ããæçãªãã£ãŒãããã¯ãæäŸããŸãããã®è²ŽéãªæŽå¯ã«ãããã³ãŒãããŒã¹å šäœã®å質ãåäžãããããã©ãŒãã³ã¹ãæé©åã§ããŸãã
以äžã§ãïŒãããã®æé ã«ãããGitLab CIãéå§ãããããžã§ã¯ãã®ãã«ããšãã¹ãããã»ã¹ãèªååã§ããããã«ãªããŸãã


