ÔÚÒ»¸öÏîÄ¿µÄ¿ª·¢¹ý³ÌÖУ¬ÍùÍù»áÓÐһЩÐèÒª·´¸´Ö´ÐеIJÙ×÷£¬±ÈÈç±àÒë¡¢²âÊÔ¡¢²¿Êð¡£¾ßÌåÓÚFlaskÏîÄ¿£¬ÎÒÒ»°ãʹÓÃnoseÖ´Ðе¥Ôª²âÊÔ¡¢fabric½øÐв¿Êð¡¢pylintÖ´ÐдúÂëÖÊÁ¿¼ì²âµÈ¡£ÕâЩƵ·±ÐèÒªÖ´ÐеIJ½Ö裬ÊǷdz£¿ÝÔïµÄ£¬ÄǺβ»½»¸ø»úÆ÷À´×Ô¶¯Ö´ÐÐÄØ£¿×î½ü£¬ÎÒ²ÎÓëµÄÒ»¸öУÄÚÍŶÓÒ²Óöµ½ÁËÀàËÆµÄÎÊÌ⣬ÓÚÊÇ´òËãµ÷ÑÐÒ»ÏÂÏà¹ØµÄ¹¤¾ß¡£
»¹ÊÇϰ¹ßÐԵزéÔÄÁËÏÂKenneth Reitz´óÉñµÄpython-guide£¬¹ûÈ»ÕÒµ½Á˹ØÓÚCIµÄÕ½ڡ£Ñ¡À´Ñ¡È¥£¬×îÖÕûÓÐÑ¡ÔñPython
StackµÄBuildbot£¬¶øÊǸü¼Ó³ÉÊìµÄJenkins¡£Jenkins»ùÓÚJava¿ª·¢£¬ÊÇÒµ½çʹÓõÃ×î¶àµÄÒ»¿î³ÖÐø¼¯³Éϵͳ£¬Êг¡·Ý¶îÕ¼µ½ÁË70%¡£
¹ØÓÚJenkins£¬¹Ù·½µÄ½éÉÜÈçÏ£º
monitors executions of repeated jobs, such as building
a software project or jobs run by cron¡£
ÎĵµÖÐҲ˵ĿǰJenkinsרעÓÚÒÔÏÂ2¸öµã£º
Building/testing software projects continuously
Monitoring executions of externally-run jobs
ÆäʵJenkinsÄܹ»×öµÄÔ¶²»Ö¹ÕâÁ½µã£¬Äã¿ÉÒÔ°ÑËüÀí½â³É¿ÉÒÔ×Ô¶¯Ö´ÐÐÈÎÎñ£¨ÀàËÆcron£©²¢ÊÕ¼¯±¨¸æµÄ»ù´¡¹¤¾ß¡£ÔÙ¼ÓÉÏËüÓÐ×ŷdz£·á¸»µÄ²å¼þ¿â£¬ËùÒÔʹÓÃÆðÀ´Ó¦¸ÃÊǺÜÁé»îµÄ¡£
ÏÂÃæ¼Ç¼һЩÔÚPython WebÏîÄ¿ÖÐÓ¦ÓÃJenkinsµÄ¾Ñé¡£
°²×°
¼ûInstalling Jenkins¡£ËüÒ²Ö§³Öͨ¹ýDocker°²×°£¬ÕæµÄÊǽô¸ú³±Á÷£¡
ÐèÒªÌáµÄÒ»µãÊÇJenkins±È½ÏºÄÄڴ棬²»ÔËÐÐÈκι¹½¨ÈÎÎñµÄÇé¿öϾͳԵôÁË300¶àM£¬ÔÙ¼ÓÉϹ¹½¨ÈÎÎñʱ»áÕ¼Óøü¶à£¬ËùÒÔ½¨Òé·þÎñÆ÷µÄÄÚ´æÖÁÉÙÓÐ1G£¬512MµÄ»°ºÜ¿ÉÄÜÔÚÖ´Ðй¹½¨ÈÎÎñµÄʱºòÄÚ´æ²»¹»Óá£
·ÃÎÊ¿ØÖÆ
°²×°ºóĬÈÏËùÓÐÈ˶¼¿ÉÒÔ·ÃÎÊ£¬¹ÊÐèÒª¸ü¸Ä·ÃÎÊ¿ØÖƲßÂÔ£¬¾ßÌå¼ûStandard Security Setup¡£
²å¼þÇåµ¥
ÏÂÃæÊÇÎÒÓõ½µÄһЩ²å¼þ£º
Git Plugin£ºÊ¹ÓÃGit×÷ΪԴ´úÂë¹ÜÀí
SSH plugin£ºÔ¶³ÌsshµÇ¼serverÖ´ÐÐÃüÁî
Parameterized Trigger Plugin£º´¥·¢ÆäËûµÄjob
Cobertura Plugin£º´úÂë²âÊÔ¸²¸ÇÂʱ¨¸æ
Task Scanner Plugin£º¼ì²â´úÂëÖгöÏÖµÄÌØÊâ±ê¼Ç£¨ÈçTODOµÈ£©
Violations£º´úÂëÖÊÁ¿¼ì²â£¬Ö§³Öpylint¡¢jslintµÈ
ThinBackup£ºÓÃÓÚ±¸·ÝJenkins
SCM Sync configuration plugin£º½«JenkensµÄÅäÖñä¸üͬ²½µ½SCMÖÐ
ÕâÀïÖ»ÊǼ¯ÖеØÁоÙһϣ¬¾ßÌåµÄʹÓûáÔÚÏÂÃæ´©²å½éÉÜ¡£
²âÊÔ¡¢Staging²¿Êð¡¢Production²¿ÊðÁ÷³Ì
¸ù¾Ý±¾ÏîÄ¿µÄÐèÒª£¬ÔÚJenkinsÖн¨Á¢ÁË3¸öÈÎÎñ£º
tm_test£ºÓÃÓÚÖ´ÐвâÊÔ¡¢´úÂëÖÊÁ¿¼ì²âµÈ
tm_staging_deploy£ºÓÃÓÚÔÚstaging·þÎñÆ÷ÉÏdeploy´úÂë
tm_deploy£ºÓÃÓÚÔÚproduction·þÎñÆ÷ÉÏdeploy´úÂë

ÆäÖÐstaging·þÎñÆ÷ÓÃÓÚ½øÐÐÏßÉϲâÊÔ£¬staging·þÎñÆ÷ºÍproduction·þÎñÆ÷µÄ»·¾³±ØÐë±£³ÖÍêÈ«Ïàͬ£¨µ±È»£¬staging·þÎñÆ÷ÅäÖÿÉÒÔµÍһЩ£©¡£
¾ßÌåµÄ¿ª·¢¡¢²âÊÔ¡¢²¿ÊðÁ÷³ÌÊÇ£º
ÔÚ¿ª·¢Ð¹¦ÄÜ/ÐÞ¸´bugµÄʱºò£¬Ò»°ãÊÇ¿ªÐ·ÖÖ§£»µ«Èç¹ûÊÇÄÇÖÖºÜСµÄÐ޸ģ¬ÔòÖ±½ÓÔÚmasterÉϸģ¬ÕâÑù±È½Ïʡʶù
й¦ÄÜ¿ª·¢Íê³É/bugÐÞ¸´ºó£¬½øÐе¥Ôª²âÊÔ+È˹¤²âÊÔ£¬Èç¹ûͨ¹ý£¬ºÏ²¢µ½master
ÿ´ÎmasterÓб䶯ºó£¬´¥·¢tm_testÈÎÎñ£¬Ö´Ðм¯³ÉµÄµ¥Ôª²âÊԺʹúÂëÖÊÁ¿¼ì²â£¬Èç¹ûOK£¬Ôò×Ô¶¯´¥·¢tm_staging_deploy£¬²¿Êðµ½staging·þÎñÆ÷ÉÏ
Èôtm_staging_deploy³É¹¦£¬ÔòµÇ½µ½ÔËÐÐÔÚstaging·þÎñÆ÷µÄ²âÊÔÍøÕ¾ÉÏ£¬È˹¤²âÊÔй¦ÄÜÊÇ·ñOK/bugÊÇ·ñÒÑÐÞ¸´£»Èôtm_staging_deployʧ°Ü£¬¼ì²éʧ°ÜÔÒò£¬½øÐÐÐÞ¸´£¬Ö±ÖÁ³É¹¦
ÈôstagingÈ˹¤²âÊÔͨ¹ý£¬ÔòÊÖ¶¯´¥·¢tm_deploy£¬²¿Êðµ½Éú²ú·þÎñÆ÷ÉÏ
µÇ¼µ½Éú²ú·þÎñÆ÷ÉϽøÐÐÈ˹¤²âÊÔ£¬Èô³öÏÖÎÊÌ⣬½øÐÐÐÞ¸´£»Í¬Ê±ÃÜÇйØ×¢Sentry·¢Ë͵ĸ澯Óʼþ£¬ÕùÈ¡ÔÚµÚһʱ¼äÐÞ¸´´íÎó
±È½Ï¼òµ¥£¬Ã»ÓвÉÓÃGit-Flow/GitHub-Flow£¬µ¥Ôª²âÊÔдµÃºÜdz£¬Ò²Ã»ÓÐ×ö´úÂëÉó²é¡£²»¹ýÍŶӹæÄ£Ð¡£¬´ÓĿǰÀ´¿´£¬ÉÏÃæµÄÁ÷³ÌÊǹ»Óõġ£
ÏÂÃæ¶ÔÕâÈý¸öÈÎÎñ×ö½ÏΪÏêϸµÄ½éÉÜ¡£
tm_test
¸ÃÈÎÎñÓÃÓÚÖ´ÐвâÊÔ¡¢´úÂëÖÊÁ¿¼ì²âµÈ¡£
push´¥·¢¹¹½¨
ÿµ±ÏîÄ¿²Ö¿âµÄmaster·ÖÖ§Óб䶯ʱ£¬¼´»á´¥·¢tm_test¡£Òª×öÕâÒ»µã£¬ÐèÒªÈçϲ½Ö裺
ÉèÖÃtm_testµÄBuild TriggersΪPoll SCM£¬µ«²»ÌîSchedule
ΪÏîÄ¿²Ö¿âÌí¼ÓWeb Hook£¬URLÌîдhttp://<Jenkins URL>/git/notifyCommit?url=<URL
of the Git repository>
²Î¿¼Stack Overflow¡£
ʹÓÃvirtualenvÅäÖòâÊÔ»·¾³
Ö´ÐвâÊÔ֮ǰ£¬ÐèҪȷ¶¨Python°æ±¾£¨Ò»°ãÊÇ2.7£©£¬È»ºó¸ù¾Ý´Ë°æ±¾³õʼ»¯virtualenv¡£
ÔÚ¹¹½¨ÖÐÌí¼ÓExecute shellÏ
if [ ! -d "venv" ]; then virtualenv -p /usr/bin/python2.7 venv fi
. venv/bin/activate
pip install -i http://pypi.douban.com/simple -r
requirements.txt |
²âÊÔÓ뱨¸æ
²âÊÔÖÐÐèÒª2¸ö¿â£ºnoseÓÃÓÚÖ´Ðе¥Ôª²âÊÔ£¬coverageÓÃÓÚͳ¼Æ²âÊÔ¸²¸ÇÂÊ¡£
ÐèÒªÔÚJenkinsÖа²×°Cobertura Plugin²å¼þ£¬ÓÃÓÚÉú³É´úÂë²âÊÔ¸²¸ÇÂʱ¨¸æ¡£
È»ºóÔÚ¹¹½¨ÖÐÌí¼ÓExecute shellÏÊäÈ룺
nosetests --with-xunit --with-coverage --cover-package=tm && coverage xml |
ÆäÖÐ--with-xunit¸æËßnoseÊä³öJUnitÐÎʽµÄ²âÊÔ±¨¸æ£¬--with-coverage±íʾͬʱÔËÐÐcoverage£¨Õâ¸ö¹¦ÄÜÏ൱ÔÞ£©£¬--cover-package=tm±íʾ½ö¶ÔÖ¸¶¨µÄpackageÖ´ÐвâÊÔ¸²¸ÇÂʼì²â£¬ºóÃæµÄcoverage
xml±íʾÊä³öxml¸ñʽµÄcoverage±¨¸æ¡£
È»ºóÔÚ¹¹½¨ºó²Ù×÷ÖУ¬Ìí¼ÓÈçÏÂ2Ï
Publish JUnit test result report£ºÌîдnosetests.xml
Publish Cobertura Coverage Report£ºÌîдcoverage.xml
ÕâÑùÒ»À´£¬¾Í¿ÉÒÔÖ´ÐвâÊÔ£¬²¢µÃµ½²âÊÔ±¨¸æºÍ²âÊÔ¸²¸ÇÂʱ¨¸æÀ²£º

ÉÏÃæµÄͼ±í¶¼Êǿɵã»÷µÄ£¬µã½øÈ¥ºóÓдúÂë¼¶µÄÏêϸ±¨¸æ£¬·Ç³£ÔÞ£º

ÂÌÉ«µÄ´úÂëÐбíʾÒѾ¸²¸Çµ½£¬ºìÉ«ÔòûÓС£
´úÂëÖÊÁ¿¼ì²â
JenkinsÓÐÒ»¸öÂù²»´íµÄ´úÂëÖÊÁ¿±¨¸æ²å¼þ£ºViolations£¬Ö§³Ö·Ç³£¶àµÄ´úÂë²âÊÔ¹¤¾ß¡£Ä¿Ç°ÏîÄ¿ÖÐʹÓÃPylint×öPython´úÂëÖÊÁ¿¼ì²â£¬Ê¹ÓÃJSHint×öJavaScript´úÂëÖÊÁ¿¼ì²â¡£
ÔÚ°²×°ºÃPylintºó£¬ÔËÐÐpylint --generate-rcfile > pylintrcÉú³ÉÅäÖÃÎļþ£¬²¢½«ÆäÖеÄoutput-formatÏîµÄÖµ¸ÄΪparseable¡£
È»ºóÔÚ¹¹½¨ÖÐÌí¼Ó2ÏîExecute shellÏ
pylint£º
pylint tm2 > pylint.xml || exit 0 |
jshint£º
jshint --reporter=jslint $WORKSPACE/tm2/static/js/ > jslint.xml || exit 0 |
ÆäÖеÄexit 0ÊÇΪÁ˸æËßJenkins¸ÃÃüÁîÖ´Ðгɹ¦¡£¶ÔÓÚjshintÀ´Ëµ£¬reportÑ¡Ôñjslint£¬È»ºóÐèҪʹÓÃ$WORKSPACE×é³É¾ø¶Ô·¾¶£¬·ñÔòÎÞ·¨¿´µ½Ô´Âë¼¶µÄ·ÖÎö±¨¸æ£¨ÊDz»ÊÇÒ»¸öbug£¿£©¡£
È»ºóÔÚ¹¹½¨ºó²½ÖèÖÐÌí¼ÓViolations Report£¬ÔÚ¶ÔӦλÖÃÊäÈëjslint.xmlºÍpylint.xml¡£
×îÖÕµÄͼÐα¨¸æÈçÏ£¬¿ÉÒÔ¿´µ½Ç÷ÊÆ×ßÏò£º

Ô´Âë¼¶±ðµÄ·ÖÎöÒ²ÓУº

¼ì²â´úÂëÖеÄÌØÊâ±ê×¢£¨ÈçTODO£©
ÍŶÓÖÐÔ¼¶¨£¬ÔÚ´úÂëδÍê³ÉµÄµØ·½Ê¹ÓÃTODO½øÐбê¼Ç£¬ÒòΪPyCharmÓÐÒ»¸öºÜºÃµÄ¹¦ÄܾÍÊÇ¿ÉÒÔ¼ì²â³ö´úÂëÖеÄËùÓÐTODOÐÅÏ¢£º

JenkinsÖÐÒ²ÓÐÒ»¸ö·Ç³£°ôµÄ²å¼þTask Scanner PluginÓÃÓÚ¼ì²â´úÂëÖгöÏÖµÄÌØÊâ±ê¼Ç£¬µ±È»£¬ÕâÐ©ÌØÊâ±ê¼ÇÍêÈ«ÊÇ¿ÉÒÔ×Ô¶¨ÒåµÄ¡£
°²×°Íê¸Ã²å¼þºó£¬ÔÚ¹¹½¨ºó²Ù×÷ÖÐÌí¼ÓÒ»ÏîScan workspace for open tasks£¬¸ù¾ÝÐèÒªÌîдÅäÖãº

È»ºó±¨¸æ¾Í¿ÉÒÔ³öÀ´À²£º

Óʼþ¸æ¾¯
Èç¹û¹¹½¨ºó״̬ÊÇunstable»òfailed£¬Ôò¿ÉÒÔ·¢ËÍÓʼþ¸æ¾¯£¬¼°Ê±Í¨ÖªÏà¹Ø¸ºÔðÈ˽øÐд¦Àí¡£Jenkins×Ô´øSMTP¹¦ÄÜ£¬²»¹ýÐèÒªÄãÌṩSMTP·þÎñÆ÷¡£
ÎÒʹÓõÄÊÇqqÓÊÏäSMTP·þÎñÆ÷£¬Í¦ºÃÓõģ¬Ä¿Ç°Ã»Óз¢Ï־ܷ¢µÄÇé¿ö¡£ÓÐÒ»µãÐèҪעÒâµÄÊÇ£¬ÔÚÅäÖúÃSMTPµÄÕË»§ÐÅÏ¢ºó£¬»¹ÐèÌîдϵͳ¹ÜÀíÔ±ÓʼþµØÖ·£¬·ñÔò»á·¢ËÍʧ°Ü£¬ÕâÒ²ÊDZȽÏÈÝÒ׺öÂԵĵط½¡£
ÅäÖúÃSMTPºó£¬È»ºóÔÚ¹¹½¨ºó²Ù×÷ÖÐÌí¼ÓE-mail NotificationÏÌîд¸ºÔðÈ˵ÄÓÊÏä¼´¿É¡£
´¥·¢ÏÂÓÎÈÎÎñ
Èç¹ûtm_test¹¹½¨³É¹¦£¬ÔòÐèÒª×Ô¶¯´¥·¢tm_staging_deployÈÎÎñ£¬Õâ¸ö´¥·¢¹ý³ÌÊÇͨ¹ý²å¼þParameterized
Trigger PluginÀ´Íê³ÉµÄ¡£
ÔÚ¹¹½¨ºó²Ù×÷ÖÐÌí¼ÓTrigger parameterized build on other projectsÏѡÔñ´¥·¢Ìõ¼þΪstable£¬È»ºóÌîд´ý³ö·¢µÄÈÎÎñÃû³Æ¼´¿É¡£
×îºóµÄtm_testÈÎÎñÃæ°åÈçÏ£º

½çÃæÊÇͦoutµÄ£¬²»¹ýºÜʵÓá£
tm_staging_deploy
ÕâÒ»¸öjobÓÃÓÚ½«×îдúÂ벿Êðµ½staging·þÎñÆ÷ÉÏ£¬ÎÒ²ÉÓõIJ¿Êð·½·¨ÊÇͨ¹ýsshÔ¶³ÌµÇ½·þÎñÆ÷Ö´ÐÐÃüÁîµÄ·½Ê½£¬ÐèÒªÒ»¸ö²å¼þSSH
plugin¡£
È»ºóÔÚ¹¹½¨ÖÐÌí¼ÓShellÏ
cd /var/www/tm export MODE=PRODUCTION git reset --hard HEAD git pull -f source venv/bin/activate pip install -r requirements.txt python manage.py db upgrade supervisorctl restart tm |
´ËÈÎÎñºÍtm_staging_deploy»ù±¾²î²»¶à£¬²»Í¬µÄµØ·½ÓÐ2¸ö£º£¨1£©Ä¿±ê·þÎñÆ÷²»Í¬£¨2£©´¥·¢·½Ê½ÊÇÊÖ¶¯´¥·¢
±¸·Ý
ʹÓÃthinBackup½øÐб¸·Ý£¬¿ÉÉ趨±¸·ÝÖÜÆÚ¡£
ÅäÖñä¸üͬ²½
³ý´ËÖ®Í⣬ÎÒ»¹Óõ½ÁËÒ»¸öºÜÓÐÓõIJå¼þSCM Sync configuration plugin£¬¾ÍÊǰÑJenkinsµÄÅäÖã¨È«¾ÖÅäÖÃ+¸÷jobÅäÖã©Í¬²½µ½Ò»¸öGit²Ö¿âÖС£ÕâÑùµÄ»°£¬Ã¿´ÎÅäÖÃÓб䶯£¬¶¼»áÐγÉÒ»¸öcommitÍÆË͵½Git²Ö¿â¡£
ÕâÏ൱ÓÚ°ÑÅäÖõÄÀúÊ·±äǨ¶¼¼Ç¼ÏÂÀ´£¬Èç¹ûÄÄÌìJenkinsÈÎÎñ¹ÒÁË£¬¿ÉÒÔ¿´¿´ÅäÖñä¸ü½øÐÐÅÅ´í¡£
|