ÔÚ»¥ÁªÍøµÄ²úÆ·¿ª·¢Ê±´ú£¬²úÆ·µü´úÔ½À´Ô½Æµ·±£¬¡°´Ó¹¦ÄÜ¿ª·¢Íê³ÉÖ±µ½³É¹¦²¿Êð¡±ÕâÒ»½×¶Î±»³ÆÎªÈí¼þ¿ª·¢¡°×îºóÒ»¹«À¡£ºÜ¶à¿ª·¢ÍŶÓÒ²Ô½À´Ô½ÈÏʶµ½£¬×Ô¶¯»¯²âÊԺͳÖÐø²¿Êð¿É°ïÖú¿ª·¢ÍŶÓÌá¸ßµü´úЧÂʺÍÖÊÁ¿¡£
ÄÇô£¬ÈçºÎ¸üºÃµØ½â¾ö¡°×îºóÒ»¹«ÀÕâÒ»ÎÊÌâÄØ?
Ò»ÇдÓ×Ô¶¯»¯²âÊÔ¿ªÊ¼£¬ÈÃ×Ô¶¯»¯²âÊԹᴩÔÚÕû¸öÏîÄ¿¿ª·¢-¼¯³É-²¿Êð-½»¸¶µÄ-¿ª·¢Á÷³ÌÖС£
Èç¹ûÄãµÄÍŶӻ¹Ã»ÓпªÊ¼×Ô¶¯»¯²âÊÔ£¬ÍƼö´Ó¾µäµÄ²âÊÔ½ð×ÖËþ¿ªÊ¼¡£
×Ô¶¯»¯²âÊÔ

ÔÚÕâ¸ö·Ö²ã×Ô¶¯»¯²âÊÔ½ð×ÖËþÖУ¬Unit ´ú±íµ¥Ôª²âÊÔ£¬Service ´ú±í·þÎñ¼¯³É²âÊÔ£¬UI ´ú±íÒ³Ãæ¼¶µÄ¹¦ÄܲâÊÔ¡£²»Í¬µÄ²úÆ·²ã´Î¶¼ÐèÒª×Ô¶¯»¯²âÊÔ£¬Í¶ÈëµÄ¾«Á¦ºÍ¹¤×÷Á¿»áÓÐËù²»Í¬¡£ÏÂÃæÎÒÃÇ×Ðϸ¿´ÏÂÿ¸ö²ã´ÎµÄ²âÊÔ£º
1.1 Unit µ¥Ôª²âÊÔ
¡°·²ÊDz»ÄÜÁ¿»¯µÄ¹¤×÷¶¼ÊDz»¿É¿¼Á¿µÄ¡±
ĿǰºÜ¶à¹«Ë¾ÒѾÒâʶµ½Á˵¥Ôª²âÊÔµÄÖØÒªÐÔ£¬µ«¹úÄÚ¼á³Öдµ¥Ôª²âÊÔµÄÍŶӲ¢²»¶à£¬ÆäÖÐÒ»¸öÄѵãÔÚÓÚûÓп¼Á¿£¬Ã»ÓкܺõØÖ´Ðе¥Ôª²âÊÔ¸²¸ÇÂʼì²â¡£
ÏëÏ룬Èç¹ûûÓе¥Ôª²âÊÔ¸²¸ÇÂʼì²â£¬µ¥´¿µÄֻдµ¥Ôª²âÊÔ£¬Ê±¼ä³¤ÁËÒ²Ðí¿ª·¢ÈËÔ±»á²úÉú¶èÐÔ£¬±ÈÈ磺½ñÌìÈÎÎñÌ«½ôÁË£¬¾Í²»Ð´µ¥Ôª²âÊÔÁË£¬ÒÔºóÔÙ²¹£¬·´Õýд²»Ð´Ò²Ã»ÓÐÈËÖªµÀ¡£ÒýÈëµ¥Ôª²âÊÔ¸²¸ÇÂʼì²âÖ®ºó£¬¿ª·¢ÈËÔ±»á¸üÖ÷¶¯µØÐ´µ¥Ôª²âÊÔ£¬¾ÍË㲹дµ¥Ôª²âÊÔÒ²¸üÓгɾ͸С£µ¥Ôª²âÊÔ¸²¸ÇÂʼì²âÓÐÏֳɵĵÚÈý·½¹¤¾ß£¬±ÈÈç
code climate ¡¢ Coveralls µÈµÈ£¬Õë¶Ô²»Í¬µÄÓïÑÔÒ²Óл¹ÓÐһЩ¶¨ÖÆ»¯µÄ¼ì²â¹¤¾ß£¬ ±ÈÈçǰ¶Ë³£ÓõÄ
Eslint , Python ³£ÓõÄPEP8 µÈµÈ¡£Õû¸öÏîÄ¿µÄµ¥Ôª²âÊÔ¸²¸ÇÇé¿ö°Ù·Ö±È£¬¿´ÉÏȥһĿÁËÈ»¡£
Ïà±ÈÆäËû²ã¼¶µÄ²âÊÔ£¬µ¥Ôª²âÊÔ·¢ÏÖ²¢½â¾öÎÊÌ⸶³öµÄ³É±¾Ïà¶ÔÀ´Ëµ×îµÍ£¬¶øÍ¶Èë²ú³ö±È×î¸ß¡£µ¥Ôª²âÊÔµÄÔðÈÎÖ÷ÌåÒ»°ãÀ´ËµÊÇ¿ª·¢ÈËÔ±£¬Ð´µ¥Ôª²âÊÔÒ²ÊÇ¿ª·¢ÈËÔ±¶Ô×Ô¼ºµÄ´úÂë½øÐмì²éµÄ¹ý³Ì¡£
1.2 Service ¼¯³É²âÊÔ
¡°¶àÊýÓ¦ÓúͲúÆ·¶¼ÐèÒªÓëÍⲿ×ÊÔ´½»»¥£¬ÓÐʱºò¶àÊý Bug ²¢²»À´Ô´ÓÚ³ÌÐò±¾Éí£¬¶øÊÇÓÉ´ÓÍⲿÊäÈëµÄÊý¾ÝËùÒýÆðµÄ¡£¡±
Õâʱºò£¬¾Í¸üÐèÒª¼¯³É²âÊÔ¡£
¼¯³É²âÊÔÊÇÔÚµ¥Ôª²âÊԵĻù´¡ÉÏ£¬½«ËùÓÐÄ£¿é°´ÕÕÉè¼ÆÒªÇó£¨Èç¸ù¾Ý½á¹¹Í¼£©×é×°³ÉΪ×Óϵͳ»òϵͳ£¬½øÐм¯³É²âÊÔ¡£Õâ¸ö¼¯³É²âÊÔ½×¶ÎÖ÷Òª½â¾öµÄÊǼì²é¸÷¸öÈí¼þ×é³Éµ¥Ôª´úÂëÊÇ·ñ·ûºÏ¿ª·¢¹æ·¶¡¢½Ó¿ÚÊÇ·ñ´æÔÚÎÊÌâ¡¢ÕûÌ幦ÄÜÓÐÎÞ´íÎó¡¢½çÃæÊÇ·ñ·ûºÏÉè¼Æ¹æ·¶¡¢ÐÔÄÜÊÇ·ñÂú×ãÓû§ÐèÇóµÈµÈ¡£
¼¯³É²âÊÔÓëµ¥Ôª²âÊÔ×î´óµÄÇø±ðÔÚÓÚ£¬ËüÐèÒª¾¡¿ÉÄܵزâÊÔÕû¸ö¹¦Äܼ°Ïà¹Ø»·¾³¡£Èç¹û²»¾¹ýµ¥Ôª²âÊÔ£¬ÄÇô¼¯³É²âÊÔµÄЧ¹û½«»áÊܵ½ºÜ´óÓ°Ï죬´ó·ùÔö¼Óµ¥Ôª´úÂë¾À´íµÄ´ú¼Û¡£
ÕâÒ»²ãµÄ±»²â¶ÔÏóÊdzéÀëÁËÕ¹ÏÖ²ãµÄ´úÂë(ǰ¶ËÒÔ¼°²¿·Öºó¶ËÕ¹ÏÖ²ãÂß¼)£¬Ö÷ÒªÊÇÓɲâÊÔÈËÔ±½øÐУ¬ÊDzâÊÔÈËÔ±´óÕ¹ÉíÊֵĵط½¡£
1.3 UI ϵͳ²âÊÔ
¡°Ò»·ÝÓÀÔ¶¶¼ÔËÐгɹ¦µÄ×Ô¶¯»¯²âÊÔÓÃÀýÊÇûÓмÛÖµµÄ¡£Ò»Çж¼Ôڱ仯ÖС£¡±
ÔÚ×öºÃÉÏÃæÁ½²ãµÄ²âÊÔ¸²¸ÇÖ®ºó£¬×î¶¥¶ËµÄÊÇ UI ²ãµÄ×Ô¶¯»¯²âÊÔ¡£Ä¿Ç°£¬UI ²ãµÄ×Ô¶¯»¯¸²¸ÇÕýÔÚÖð½¥×ª±äÎªÒ³ÃæÕ¹Ê¾Âß¼¼°½çÃæÇ°¶ËÓë·þÎñÕ¹Ïֲ㽻»¥µÄ¼¯³ÉÑéÖ¤¡£UI²ã×Ô¶¯»¯×öµÄ·½Ê½ºÜ¶à£¬¸ù¾Ý²»Í¬µÄϵͳ£¬²»Í¬µÄ¼Ü¹¹¿ÉÄÜ»áÓõ½²»Í¬µÄ¿ò¼Ü»òÕß¹¤¾ß£¬±È½ÏÖ÷Á÷µÄÓÐQTP£¬Robot
Framework¡¢watir¡¢selenium µÈ¡£
ÔõôѡÔñºÏÊʵŤ¾ß£¿Ã¿¸ö²âÊÔ¹¤¾ß¶¼ÓÐËüµÄÓÅȱµã£¬Ã¿¸ö±»²âÊÔµÄÏîĿҲÓÐ×Ô¼º±¾ÉíµÄÌØµã¡£±ÈÈ磬ÏîÄ¿ÊÇÓÃʲôÓïÑÔ±àдµÄ£¬C,
C++, Java, PHP , Python or C#? ÏîÄ¿ÊÇʲôÀàÐÍ£¬Desktop , Web
or Mobile Application? ºÜÄÑ˵һÖÖ¹¤¾ß¾Í¿ÉÒԸ㶨ËùÓлòÕߴ󲿷ֵÄÏîÄ¿£¬Ò²ºÜÄÑ˵һ¸öÏîÄ¿¾ÍÄܵ¥´¿µÄ¿¿Ò»ÖÖ¹¤¾ßÀ´¸ã¶¨¡£
UI ²ãÊÇÖ±½ÓÃæÏòÓû§µÄ£¬ÐèÒª²âÊÔÈËÔ±·ÅÈë¸ü¶àµÄʱ¼äºÍ¾«Á¦¡£Èç½ñµÄ»¥ÁªÍø¹«Ë¾´ó¶àÐèÇó±ä»¯´ó¶ø¿ì£¬µü´úƵ·±£¬ËùÒԺܶàÍŶÓ×ö
UI ×Ô¶¯»¯²âÊÔͶÈë½Ï´ó¾«Á¦£¬È´³Ù³Ù¼û²»µ½Ð§¹û£¬×Ô¶¯»¯²âÊÔÈËԱÿÌì±¼ÃüÓÚά»¤½Å±¾£¬×·¸Ï½ø¶È¡£ÓÐ 2 µã
UI²ã×Ô¶¯»¯¸²¸ÇµÄÔÔò·Ç³£ÓбØÒªÌáÏ£º
ÄÜÔڵײã×ö×Ô¶¯»¯¸²¸Ç£¬¾Í¾¡Á¿²»ÔÚUI²ã×ö×Ô¶¯»¯¸²¸Ç£»
Ö»×ö×îºËÐŦÄܵÄ×Ô¶¯»¯¸²¸Ç£¬½Å±¾¿Éά»¤ÐÔ¾¡¿ÉÄÜÌá¸ß¡£
×ÛÉÏËùÊö£¬·Ö²ã×Ô¶¯»¯²âÊÔ²àÖØ²»Í¬£¬Ð§¹û²»¾¡È»ÍêÃÀµÄ£¬¶ø×î¿ìËÙ¸ßЧ·¢ÏÖ bug µÄ·½·¨Êǽ«×Ô¶¯»¯²âÊÔ°üº¬µ½¹¹½¨¹ý³ÌÖС£½÷É÷ÖÜÈ«µÄ×Ô¶¯»¯²âÊÔ¿ÉÒÔ½øÒ»²½±£Ö¤³ÖÐø²¿ÊðµÄÎȶ¨Ó밲ȫ£¬Ìá¸ß³ÖÐø²¿ÊðµÄ³É¹¦ÂÊ¡£
³ÖÐø²¿Êð

¶ÔÓÚ³ÖÐø²¿Êð£¬@ÍåÇøÈÕ±¨ ÕâÑùÆÀÂÛ£º
Ò»¸öÍŶӹ¤³Ì¼¼Êõˮƽ¸ßµÍ£¬Ö±½Ó·´Ó³ÔÚ²¿Êð´úÂëÉÏ¡£ÎÒÅöµ½ÆäËû¹«Ë¾µÄÈË£¬¶¼Ï²»¶ÎÊÄãÃÇÔõô²¿Êð´úÂëµÄ£¬·Ç³£´ó¿ªÑ۽硣ÄãºÜÄÑÏàÐÅ£¬ºÜ¶à£¨ÓÐÒ»¶¨¹æÄ£µÄ£©¹«Ë¾ÈÔÈ»ÊÇÈËÈâ
SSH µ½Ê®¼¸¡¢¶þʮ̨»úÆ÷ÉÏ git pull¡¢ÊÖ¶¯ÖØÆô·þÎñÆ÷£¬²¿ÊðÒ»´Î´úÂ뼸¸öСʱ -- ÕâôÔʼ£¬»î¸Ã¼Ó°à£º£©
³ÖÐø²¿Êð£¨continuous deployment£©ÊÇͨ¹ý×Ô¶¯»¯µÄ¹¹½¨¡¢²âÊԺͲ¿ÊðÑ»·À´¿ìËÙ½»¸¶¸ßÖÊÁ¿µÄ²úÆ·¡£Ä³Ö̶ֳÈÉÏ´ú±íÁËÒ»¸ö¿ª·¢ÍŶӹ¤³Ì»¯µÄ³Ì¶È£¬±Ï¾¹¿ìËÙÔËתµÄ»¥ÁªÍø¹«Ë¾ÈËÁ¦³É±¾»á¸ßÓÚ»úÆ÷£¬Í¶×Ê»úÆ÷ÓÅ»¯¿ª·¢Á÷³Ì»¯Ïà¶ÔÒ²Ìá¸ßÁËÈ˵ÄЧÂÊ£¬ÈÃ
engineering productivity ×î´ó»¯¡£
2.1 ³ÖÐø²¿ÊðµÄ²½Öè
¡°³ÖÐø²¿Ê𡱵ÄÍ´¿àÔ´ÓÚ²¿ÊðʱµÄ¸÷·½Ã棬±ÈÈçÐèÒª²¿Êðµ½ÄÄЩ»·¾³£¬²âÊÔ»·¾³£¿»Ò¶È·¢²¼£¿Õýʽ»·¾³£¿»¹ÓÐÆäÒÀÀµ°üµÄ°æ±¾£¬»·¾³ÅäÖùÜÀíµÈµÈ£¬¶¼ÐèÒª¿¼ÂÇÔÚÆäÖС£¶ÔÓÚÒ»¸ö±ê×¼µÄ²¿Ê𡪡ª°²×°Èí¼þ°ü²¢Æô¶¯»·¾³£¬¿ÉÄܵIJ½Ö轫»áÊÇ£º

2.2 CI ¹¤¾ßµÄÑ¡ÔñÓëʹÓÃ
imothyд¹ýһƪÎÄÕ½éÉÜÁË IMVU ÊÇÈçºÎ½øÐгÖÐø²¿Êð¡£IMVU µÄ×ö·¨ÊÇ£¬ÔÚ³ÖÐø¼¯³É¹¹½¨¹ý³ÌÖнøÐдóÁ¿µÄ¡¢¸²¸Ç·¶Î§¹ãµÄ¡¢·Ç³£¿É¿¿µÄ×Ô¶¯»¯²âÊÔ£¬±£Ö¤ÔÚ
10 ·ÖÖÓÄÚÅÜÍêÕû¸ö²âÊÔÌ×¼þ¡£ËùÓвâÊÔͨ¹ýºó£¬²¿Êð±ã¿ªÊ¼ÁË¡£
ÔÚÕâ¸ö¹ý³ÌÖУ¬³ÖÐø¼¯³É¹¤¾ßµÄÑ¡ÔñºÍϵͳµÄ´î½¨ÏÔµÃÓÈÎªÖØÒª¡£Ãæ¶ÔÖÚ¶àµÄ CI ¹¤¾ß£¬ÎÒÃǽ«Æä·ÖΪ Hosted
CI ºÍ Self Hosted CI£º
Self HostedCI Ö¸µÄÊǽ«Èí¼þ²¿ÊðÔÚ¹«Ë¾µÄ»ú·¿»òÄÚÍøÖУ¬ÐèÒªÌṩ¶ą̀·þÎñÆ÷À´Íê³É CI ϵͳµÄÔËת£¬Í¬Ê±ÐèÒª¶Ô²»Í¬»úÆ÷Ö®¼ä½øÐл·¾³ÅäÖá£Ö÷Á÷¹¤¾ßÓÐJenkins£¬ÆäËûÊÜ»¶ÓµÄ¹¤¾ß±ÈÈç
Baboom ¼° TeamCity µÈ¡£
Hosted CI Ö¸µÄÊÇÓÉ SaaS Ð굀 CI ·þÎñ£¬È«³ÌÔÚÏß½øÐй¹½¨ÅäÖ㬲»ÐèÒª¿¼ÂÇ×°»úÆ÷£¬×°Èí¼þ£¬»·¾³´î½¨µÈ³É±¾¡£³£¼ûµÄÓÐ
CircleCI£¬Codeship ºÍ TravisCI µÈ¡£
ÎÒÃǶԱÈÒ»ÏÂÕâÁ½ÖÖ CI ·þÎñ£º
Self Hosted CI ¶Ô¹¹½¨»·¾³ÓÐÍêÈ«µÄ¿ØÖÆÈ¨£¬Äܹ»ÊµÏÖÍêÈ«¶¨ÖÆ¡£µ«ÐèÒª´î½¨»·¾³ºÍÅäÖá¢Î¬»¤³É±¾¸ß£¬ÐèÒªÂòרÃŵĻúÆ÷£¬»¨·ÑÈËÁ¦ÎïÁ¦ÇÒ¸üÐÂÇ¨ÒÆ·çÏոߣ»
Hosted CI ÎÞÐè¶îÍâ»úÆ÷£¬¼¸·ÖÖӾͿÉÒÔÓÃÆðÀ´¡£¿ÉÒÔ¸ù¾ÝÄãµÄÐèÒª¶¯Ì¬µ÷¶È×ÊÔ´¡£Ê¡Ê±£¬Ê¡ÐÄ£¬Ê¡Á¦¡£
ÎÒÃÇ×öÁËÒ»¿î Hosted CI ²úÆ·¡ª¡ª flow.ci £¬ËüÊÇÈÚÈëÁË workflow »úÖÆµÄ³ÖÐø¼¯³É£¨CI£©·þÎñ£¬Ò²¿ÉÒÔÀí½âΪ×Ô¶¯»¯Á÷³Ìƽ̨£¬³ýÁ˼¯³É´úÂë¡¢±àÒë¡¢²âÊÔÖ®Í⣬»¹¿ÉÒÔ¼¯³É³£ÓõŤ¾ß¡¢Áé»î×Ô¶¨ÒåÁ÷³Ì¡£1
·ÖÖÓ¼´¿ÉÍê³É¿ª·¢²âÊÔ»·¾³´î½¨£¬¿ªÆôµÚÒ»¸öBuild¡£

flow.ci ¸ü²àÖØÓÚ¹¤×÷Á÷µÄÉèÖã¬Ä¬ÈϵŤ×÷Á÷¿ÉÒÔ×Ô¶¯±àÒë²âÊÔ´úÂ룬½øÐе¥Ôª²âÊÔ¸²¸ÇÂÊ£¬´úÂëÖÊÁ¿¼ì²âµÈ¹¤¾ßÒÔ²å¼þµÄÐÎʽ½øÐм¯³É£»²¢¼ÓÈëÁË
Webhook ¹¦ÄÜ¡£´Ó×Ô¶¯»¯²âÊÔµ½³ÖÐø²¿Êð£¬Ò»Çмòµ¥Áé»î¡£
2.3 ÈóÖÐø²¿Êð³É¹¦µÄÒªµã
Ò»¸ö³ÖÐø¼¯³É & ³ÖÐø²¿ÊðµÄ×Ô¶¯»¯ÏµÍ³²¢²»ÊÇÄÇô¼òµ¥µÄÊ£¬Èç¹û²»Ñ¡ÓÃÆäËû CI ·þÎñ£¬Æä¿ª·¢¹¤×÷Á¿ºÍÒ»¸ö±ê×¼µÄ´óÐÍ»¥ÁªÍøÒµÎñϵͳûʲôÁ½Ñù¡£Èç¹ûûÓгÖÐø²¿ÊðµÄ¾Ñ飬ҪÏë³É¹¦µØ½øÐгÖÐø²¿ÊðҪעÒâÕâЩ:
³ä·Ö¶ø¹ã·ºµÄ×Ô¶¯»¯²âÊÔ¸²¸Ç£»
¾¡¿ÉÄ̵ܶIJâÊÔ·´À¡Ê±¼ä£»
²¿Êð¹ý³Ì×Ô¶¯»¯£»
²¿Êð¹ý³ÌÒª±£Ö¤Êý¾Ý°²È«£»
ÔÚÎȶ¨µÄǰÌáÏ£¬¾¡Ô粿Êð£»
ÍêÉÆµÄ·çÏÕ»º½â´ëÊ©£»
½«Í¬ÑùµÄ²úÎﲿÊðµ½²»Í¬µÄ»·¾³ÖÐ
2.4 ³ÖÐø²¿Êðϰ¹ßµÄÑø³É
³ÖÐø²¿ÊðÕæÕýÀ§ÄѵIJ»ÊǼ¼ÊõµÄʵÏÖ£¬Ò²²»Êǹ¤¾ßµÄÑ¡ÔñºÍʹÓã¬×îÄѵÄÊÇÅàÑøÍŶӳÖÐø²¿ÊðµÄϰ¹ßÒÔ¼°¹¤³ÌÎÄ»¯¡£¿ÉÒԲο¼ÏÂInstagram
µÄ³ÖÐø²¿Ê𹤳ÌÎÄ»¯¡£
×ܽá
²»ÂÛÊÇ×Ô¶¯»¯²âÊÔ£¬»¹ÊdzÖÐø²¿Ê𣬶¼Ö»ÊÇÒ»ÖÖʵÏÖÊֶΣ»ËûÃÇÕæÕý´æÔڵļÛÖµÔÚÓÚÌá¸ß´úÂëÖÊÁ¿ºÍÌá¸ß²úÆ·µÄ³ÖÐø½»¸¶ÄÜÁ¦¡£¹ØÓÚÈçºÎ½øÐиüºÃµØ½øÐÐ×Ô¶¯»¯²âÊԺͳÖÐø²¿Ê𣬿ÉÒÔ¶à²Î¿¼ÏÂÆäËû¹«Ë¾µÄ³ÖÐø²¿Êðʵ¼ù°¸ÀýÓë¾Ñé¡£ |