ʲôÊdzÖÐø¼¯³É

³ÖÐø¼¯³É£¨Continuous integration£¬¼ò³ÆCI£©Ö¸µÄÊÇ£¬Æµ·±µØ£¨Ò»Ìì¶à´Î£©½«´úÂ뼯³Éµ½Ö÷¸É¡£
ËüµÄºÃ´¦Ö÷ÒªÓÐÁ½¸ö¡£
¿ìËÙ·¢ÏÖ´íÎó¡£Ã¿Íê³ÉÒ»µã¸üУ¬¾Í¼¯³Éµ½Ö÷¸É£¬¿ÉÒÔ¿ìËÙ·¢ÏÖ´íÎ󣬶¨Î»´íÎóÒ²±È½ÏÈÝÒס£
·ÀÖ¹·ÖÖ§´ó·ùÆ«ÀëÖ÷¸É¡£Èç¹û²»ÊǾ³£¼¯³É£¬Ö÷¸ÉÓÖÔÚ²»¶Ï¸üУ¬»áµ¼ÖÂÒԺ󼯳ɵÄÄѶȱä´ó£¬ÉõÖÁÄÑÒÔ¼¯³É¡£
³ÖÐø¼¯³ÉµÄÄ¿µÄ£¬¾ÍÊÇÈòúÆ·¿ÉÒÔ¿ìËÙµü´ú£¬Í¬Ê±»¹Äܱ£³Ö¸ßÖÊÁ¿¡£ËüµÄºËÐÄ´ëÊ©ÊÇ£¬´úÂ뼯³Éµ½Ö÷¸É֮ǰ£¬±ØÐëͨ¹ý×Ô¶¯»¯²âÊÔ¡£Ö»ÒªÓÐÒ»¸ö²âÊÔÓÃÀýʧ°Ü£¬¾Í²»Äܼ¯³É¡£
³ÖÐø½»¸¶¡¢³ÖÐø²¿ÊðµÄ¸ÅÄî
³ÖÐø½»¸¶£¨Continuous delivery£©Ö¸µÄÊÇ£¬Æµ·±µØ½«Èí¼þµÄа汾£¬½»¸¶¸øÖÊÁ¿ÍŶӻòÕßÓû§£¬ÒÔ¹©ÆÀÉó¡£Èç¹ûÆÀÉóͨ¹ý£¬´úÂë¾Í½øÈëÉú²ú½×¶Î¡£
³ÖÐø²¿Êð£¨continuous deployment£©ÊdzÖÐø½»¸¶µÄÏÂÒ»²½£¬Ö¸µÄÊÇ´úÂëͨ¹ýÆÀÉóÒÔºó£¬×Ô¶¯²¿Êðµ½Éú²ú»·¾³¡£

³ÖÐø¼¯³ÉµÄÔÔò
Òµ½çÆÕ±éÈÏͬµÄ³ÖÐø¼¯³ÉµÄÔÔò°üÀ¨£º
ÐèÒª°æ±¾¿ØÖÆÈí¼þ±£ÕÏÍŶӳÉÔ±Ìá½»µÄ´úÂë²»»áµ¼Ö¼¯³Éʧ°Ü¡£³£Óõİ汾¿ØÖÆÈí¼þÓÐ git¡¢svn µÈ£»
¿ª·¢ÈËÔ±±ØÐ뼰ʱÏò°æ±¾¿ØÖÆ¿âÖÐÌá½»´úÂ룬Ҳ±ØÐë¾³£ÐԵشӰ汾¿ØÖÆ¿âÖиüдúÂëµ½±¾µØ£»
ÐèÒªÓÐרÃŵɷþÎñÆ÷À´Ö´Ðм¯³É¹¹½¨¡£¸ù¾ÝÏîÄ¿µÄ¾ßÌåʵ¼Ê£¬¼¯³É¹¹½¨¿ÉÒÔ±»Èí¼þµÄÐÞ¸ÄÀ´Ö±½Ó´¥·¢£¬Ò²¿ÉÒÔ¶¨Ê±Æô¶¯£¬Èçÿ°ë¸öСʱ¹¹½¨Ò»´Î£»
±ØÐë±£Ö¤¹¹½¨µÄ³É¹¦¡£Èç¹û¹¹½¨Ê§°Ü£¬ÐÞ¸´¹¹½¨¹ý³ÌÖеĴíÎóÊÇÓÅÏȼ¶×î¸ßµÄ¹¤×÷¡£Ò»µ©ÐÞ¸´£¬ÐèÒªÊÖ¶¯Æô¶¯Ò»´Î¹¹½¨¡£
³ÖÐø¼¯³ÉϵͳµÄ×é³É
Óɴ˿ɼû£¬Ò»¸öÍêÕûµÄ¹¹½¨ÏµÍ³±ØÐë°üÀ¨£º
Ò»¸ö×Ô¶¯¹¹½¨¹ý³Ì£¬°üÀ¨×Ô¶¯±àÒë¡¢·Ö·¢¡¢²¿ÊðºÍ²âÊԵȡ£
Ò»¸ö´úÂë´æ´¢¿â£¬¼´ÐèÒª°æ±¾¿ØÖÆÈí¼þÀ´±£ÕÏ´úÂëµÄ¿Éά»¤ÐÔ£¬Í¬Ê±×÷Ϊ¹¹½¨¹ý³ÌµÄËØ²Ä¿â¡£
Ò»¸ö³ÖÐø¼¯³É·þÎñÆ÷¡£
Gitlab CI½éÉÜ

GitLabÌṩ¿É³ÖÐø¼¯³É·þÎñ¡£Ö»ÒªÔÚÄãµÄ²Ö¿â¸ùĿ¼ ´´½¨Ò»¸ö.gitlab-ci.yml
Îļþ£¬ ²¢Îª¸ÃÏîĿָÅÉÒ»¸öRunner£¬µ±Óкϲ¢ÇëÇó»òÕß pushµÄʱºò¾Í»á´¥·¢build¡£
Õâ¸ö.gitlab-ci.yml Îļþ¶¨ÒåGitLab runnerÒª×öÄÄЩ²Ù×÷¡£ ĬÈÏÓÐ3¸ö[stages(½×¶Î)]:
build¡¢test¡¢deploy¡£
µ±buildÍê³Éºó(·µ»Ø·ÇÁãÖµ)£¬Äã»á¿´µ½pushµÄ commit»òÕߺϲ¢ÇëÇóÇ°Ãæ³öÏÖÒ»¸öÂÌÉ«µÄ¶ÔºÅ¡£
Õâ¸ö¹¦Äܷܺ½±ãµÄÈÃÄã¼ì²é³öÀ´ºÏ²¢ÇëÇóÊÇ·ñ»áµ¼ÖÂbuildʧ°Ü£¬ ÃâµÄÄãÈ¥¼ì²é´úÂë¡£
´ó²¿·ÖÏîÄ¿ÓÃGitLab's CI·þÎñÅÜbuild²âÊÔ£¬ ¿ª·¢Õß»áºÜ¿ìµÃµ½·´À¡£¬ÖªµÀ×Ô¼ºÊÇ·ñд³öÁËBUG¡£
ËùÒÔ¼òµ¥µÄ˵£¬ÒªÈÃCI¹¤×÷¿É×ܽáΪÒÔϼ¸µã:
ÔÚ²Ö¿â¸ùĿ¼´´½¨Ò»¸öÃûΪ.gitlab-ci.yml µÄÎļþ
Ϊ¸ÃÏîÄ¿ÅäÖÃÒ»¸öRunner
Íê³ÉÉÏÃæµÄ²½Öèºó£¬Ã¿´Îpush´úÂëµ½Git²Ö¿â£¬ Runner¾Í»á×Ô¶¯¿ªÊ¼pipeline¡£
»ùÓÚGitlab CI¿ìËٴ³ÖÐø¼¯³É»·¾³
¿ªÆô Gitlab CI ¹¦ÄÜ

ÔÚ×Ô¼ºµÄGitlabÖдò¿ªCI½çÃæ£¬±ÈÈçѸÀ×µÄGitlab£¬µØÖ·ÊÇ https://gitlab.xunlei.cn/ci/projects£¬ÕÒµ½×Ô¼ºÏîÄ¿ºóÑ¡Ôñ
¡°Add project To CI¡±
ÏîÄ¿ Gitlab CI ÅäÖÃ

¿ÉÒÔ¶ÔÏîÄ¿µÄ¹¹½¨½øÐÐÏêϸÅäÖ㬱ÈÈç¹¹½¨µÄʱ¼ä±í¼°ÐèÒª CI ½øÐгÖÐø¼¯³ÉµÄ·ÖÖ§µÈ£¬ÕâÀïÅäÖÃÁË ¶ÔmasterºÍdevelop·ÖÖ§½øÐгÖÐø¼¯³É¡£
ÅäÖÃÒ»¸ö Runner
GitLab CI ÖУ¬runner ÊÇÒ»¸ö¸ôÀëµÄÐéÄâ»úÆ÷£¬ÓÃÀ´ÅäºÏ Gitlab CI ½øÐй¹½¨¡£
°²×° GitLab-Runner
°²×°gitlab-ci-multi-runner
»·¾³£ºcentos 7, ʹÓÃÁËÇ廪´óѧµÄ¾µÏñ
н¨ gitlab-ci-multi-runner.repo
touch /etc/yum.repos.d/gitlab-ci-multi-runner.repo |
½«ÒÔÏÂÄÚÈÝдÈëÎļþ
[gitlab-ci-multi-runner]
name=gitlab-ci-multi-runner
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
|
Ö´ÐÐ
sudo yum makecache
sudo yum install gitlab-ci-multi-runner |
ÆäËûϵͳ°²×°
https://docs.gitlab.com/runner/install/
Gitlab CI Multi Runner ¹úÄÚ¾µÏñ
https://mirrors.tuna.tsinghua.edu.cn/help/gitlab-ci-multi-runner/
Runner µÄÇø·Ö

Ö¸¶¨ Runner£º ¿ÉÒÔÖ¸¶¨ÔËÐÐijһ¸öGitlab CI µÄÏîÄ¿
¹²Ïí Runner£º¿ÉÒÔÔËÐÐËùÓÐµÄ CI ÏîÄ¿
Gitlab Runner ºÍ Gitlab ²»Äܰ²×°ÔÚͬһ¸ö»úÆ÷
×¢²áÒ»¸öÖ¸¶¨µÄrunner
×¢²á¹²ÏíµÄRunner ÐèÒª gitlab µÄ admin ȨÏÞ
sudo gitlab-ci-multi-runner
register |
ÊäÈëGitlab CIµØÖ·, (e.g. https://gitlab.xunlei.cn/ci)
ÊäÈëÏîÄ¿CI token
ÊäÈë Runner ÃèÊö£¨e.g. home.xl9.xunlei.com ²âÊÔrunner£©
ÊäÈë Runner ±êÇ©£¬¿ÉÒÔ¶à¸ö£¬ÓöººÅ¸ô¿ª£¨e.g. 10.10.34.91-dev£©
ÊäÈë Runner Ö´ÐеÄÓïÑÔ (e.g. shell)
×¢²áÍê³ÉÖ®ºó£¬GitLab-CIÁ¢¿Ì¾Í»á¶à³öÒ»ÌõRunner¼Ç¼
Æô¶¯ runner
ÕâÀï°ÑÅúÁ¿ÔËÐÐRunnerÕâ¸ö¹¦Äܰ²×°ÎªÒ»Ïî·þÎñ
# Install runner
as service and start it:
cd ~
gitlab-ci-multi-runner install
gitlab-ci-multi-runner start |
´´½¨.gitlab-ci.yml
.gitlab-ci.yml ÎļþÊÇʲô
.gitlab-ci.yml ÓÃÀ´ÅäÖà CI ÓÃÄãµÄÏîÄ¿ÖÐ×öÄÄЩ²Ù×÷£¬Õâ¸öÎļþλÓÚ²Ö¿âµÄ¸ùĿ¼¡£
µ±ÓÐÐÂÄÚÈÝpushµ½²Ö¿âºó£¬GitLab»á²éÕÒÊÇ·ñÓÐ.gitlab-ci.ymlÎļþ£¬Èç¹ûÎļþ´æÔÚ£¬
Runners ½«»á¸ù¾Ý¸ÃÎļþµÄÄÚÈÝ¿ªÊ¼build ±¾´Îcommit¡£
.gitlab-ci.yml ʹÓÃYAMLÓï·¨£¬ ÄãÐèÒª¸ñÍâ×¢ÒâËõ½ø¸ñʽ£¬ÒªÓÿոñÀ´Ëõ½ø£¬²»ÄÜÓÃtabsÀ´Ëõ½ø¡£
´´½¨.gitlab-ci.yml
stages:
- test
- deploy
# ±äÁ¿
variables:
DEV_RSYNC_PATH: "/data/deploy/xunlei.com/misc.xl9.xunlei.com/d/"
# ËùÓÐ stage ֮ǰµÄ²Ù×÷
before_script:
- npm set registry http://xnpm.sz.xunlei.cn
- npm install
# ´úÂë¼ì²é
lint:
stage: test
script: npm run lint
# µ¥Ôª²âÊÔ
unit:
stage: test
script: npm run unit
# ²¿Êð²âÊÔ·þÎñÆ÷
deploy_dev:
stage: deploy
tags:
- 10.10.34.91-dev
only:
- develop
script:
- rsync -av --delete-after --exclude-from=/data/shell/home.xl9.xunlei_exclude.list
. $DEV_RSYNC_PATH
- chmod -R 755 $DEV_RSYNC_PATH
- chown -R nobody:nobody $DEV_RSYNC_PATH
- find $DEV_RSYNC_PATH -type f -exec chmod 644
{} \;
- cd $DEV_RSYNC_PATH
- npm install
|
ÍÆË͹¹½¨ÅäÖÃÎļþ
ÅäÖúÃ.gitlab-ci.ymlÎļþÖ®ºó£¬Ö»Òª°ÑËü¼ÓÈëgitºóÈ»ºóÍÆË͵½Ô¶³Ì²Ö¿â£¬CI¾Í»á¿ªÊ¼×Ô¶¯»¯¼¯³É
²é¿´¿ÉÊÓ»¯µÄ¹¹½¨¹ý³Ì
Gitlab CI ÌṩÁË¿ÉÊÓ»¯µÄ¹¹½¨¹ý³ÌµÄÏÔʾ¿ÉÒÔËæÊ±²é¿´¡£

ÆôÓù¹½¨Óʼþ֪ͨ
Gitlab CIÌá¸ßÁËһЩ Service£¬ ±ÈÈçÓʼþ֪ͨ£¬¿ÉÒÔÅäÖÃһϵÁнÓÊÜÓʼþµÄµØÖ·ºÍÊÇ·ñÖ»ÓÐʧ°ÜµÄʱºò²Å·¢ËÍÓʼþ¡£


»ÕÕÂ
»ÕÕ£¬µ±PipelinesÖ´ÐÐÍê³É£¬»áÉú³É»ÕÕ£¬Äã¿ÉÒÔ½«ÕâЩ»ÕÕ¼ÓÈëµ½ÄãµÄREADME.mdÎļþ»òÕßÄãµÄÍøÕ¾¡£build
status
½áÓï
±¾Îļòµ¥½éÉÜÁ˳ÖÐø¼¯³ÉµÄ¸ÅÄî²¢×ÅÖØ½éÉÜÁËÈçºÎ»ùÓÚ Gitlab CI ¿ìËÙ¹¹½¨³ÖÐø¼¯³É»·¾³£¬Ö÷Òª½éÉÜÁË
Gitlab CI µÄ»ù±¾¹¦ÄܺÍÈëÃŲÙ×÷Á÷³Ì¡£
Ï£ÍûÔÚ½øÒ»²½µÄѧϰºÍÓ¦ÓÃÖÐÓë´ó¼Ò·ÖÏí Gitlab CI µÄÆäËü¸ß¼¶µÄÓ¦Óá£
|