±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚit168£¬,Ö÷Òª½éÉÜÁËÒÔiOS¶àbundleµÄ¹¤³ÌΪÀý£¬½²½âÏÂÈçºÎÓÃSpringBoot¡¢VueʵÏÖ³ÖÐø¼¯³É·½°¸£¬½«ÐèÇó
- ´úÂë - ²âÊÔ¹ØÁª£¬×öµ½´úÂë½á¹¹»¯²¢³ÖÐø¼¯³É¡£ |
|
±³¾°
Ãô½Ý¿ª·¢ÒÔÓû§µÄÐèÇó½ø»¯ÎªºËÐÄ£¬²ÉÓõü´ú¡¢ÑÐò½¥½øµÄ·½·¨½øÐÐÈí¼þ¿ª·¢¡£ÏÐÓãĿǰ²ÉÓÃÓ¾µÀÈÎÎñģʽ½øÐеü´ú¿ª·¢£¬¿ª·¢ÖÜÆÚÊÇÁ½ÖÜÒ»¸ö°æ±¾£¬·¢°æÆµÂʱȽϸߣ¬²¢Ðпª·¢µÄÒµÎñÐèÇóÓֺܶ࣬Ôõô²ÅÄܸßЧµÄµü´ú¿ª·¢?²âÊÔ×ÊÔ´Ïà¶Ô½ôȱ£¬ÈçºÎ±£Ö¤¿Í»§¶ËµÄÑз¢ÖÊÁ¿?ÓÚ´Ëͬʱ£¬µü´ú¹ý³ÌÖУ¬¹¹½¨¡¢¼¯³ÉÒÔ¼°²âÊÔ¶¼ÐèÒªÈ˹¤¸ÉÔ¤£¬¹µÍ¨³É±¾ºÍ³ö´í¸ÅÂʶ¼±È½Ï¸ß¡£
ÈçºÎÓÐЧµÄ½â¾öÉÏÃæÕâЩÎÊÌâ?Ê×ÏÈÏëµ½µÄÊdzÖÐø¼¯³É£¬Äܹ»×öµ½×Ô¶¯»¯¡¢¼¯³É²âÊԺͼ°Ê±·´À¡ÎÊÌ⣬²ÅÄܼõÉÙ¿ª·¢ºÍ²âÊԵijɱ¾£¬Ìá¸ßÍŶӵŤ³ÌÄÜЧ¡£ÏÐÓãÔÚ¿Í»§¶Ë³ÖÐø¼¯³É·½°¸ÉÏÃæ×öÁËЩ̽Ë÷ºÍʵ¼ù£¬±¾ÎÄÖ÷ÒªÒÔiOS¶àbundleµÄ¹¤³ÌΪÀý£¬½²½âÏÂÈçºÎÓÃSpringBoot¡¢VueʵÏÖ³ÖÐø¼¯³É·½°¸£¬½«ÐèÇó
- ´úÂë - ²âÊÔ¹ØÁª£¬×öµ½´úÂë½á¹¹»¯²¢³ÖÐø¼¯³É¡£
1. Êý¾ÝÄ£ÐÍ
1.1 Ó¾µÀÄ£ÐÍ
Ê×ÏÈ£¬ÈÃÎÒÃÇÀ´¿´ÏÂÓ¾µÀÄ£ÐÍ£¬ÈÃÎÒÃǶÔËûÓиö´óÌåÁ˽⡣ÏÈÀ´¿´Ò»ÕÅͼ£º

ÕâÊÇ´ó¼Ò³£ÓõÄgit flowÄ£ÐÍ£¬¼¯³É·ÖÖ§¾ÍÊÇdevelop£¬Èç¹ûÐèÒª¿ª·¢ÐèÇ󣬾ʹӼ¯³É·ÖÖ§À³ö¶ÔÓ¦µÄÌØÐÔ·ÖÖ§Feature£¬µÈ¿ª·¢½áÊø£¬ÔÙ½«FeatureºÏ²¢»Ødevelop·ÖÖ§£¬¼¯³É·ÖÖ§²âÊÔͨ¹ýµÄ»°£¬ÔÙÀ³ö·¢²¼·ÖÖ§Release£¬ÓÉÓÚmaster·ÖÖ§²»ÊǺܳ£Óã¬ËùÒÔÔÚÏÐÓãÕâ±ßÔÝʱûÓá£
ÕâÊǵ¥¸ö¿âµÄÇé¿ö£¬¶¼±È½ÏºÃÀí½â£¬Ç°Ãæ±³¾°Ò²½éÉܹý£¬iOSµÄ¹¤³ÌÔÚ²ð¿â£¬²ð¿âµÄÇé¿ö´óÖÂÈçÏ£º

iOS»áÓÐÒ»¸öÖ÷¹¤³ÌÀ´¹ÜÀíÕâЩ×ӿ⣬ÕâÊÇ8¸ö×ӿ⣬Íâ¼ÓÒ»¸öÖ÷¹¤³Ì£¬Ò²¾ÍÒâζ×Å»áÓÐ9¸ögitµØÖ·£¬ÔÚ¿ª·¢ÐèÇóµÄʱºò£¬Ö÷Òª¸Ä¶¯µÄbundle¼¯ÖÐÔÚ£ºIFMatrix¡¢IFContainer;Èç¹û¸Ä¶¯µÄ¿âÒ»¶à£¬ÄǾÍÒâζ×Åÿ¸ö¿â¶¼ÐèÒªÀ³öÒ»¸öFeature·ÖÖ§¡£µÈ²Ù×÷ÍêÁË£¬ÔÙ½øÐкϲ¢µ½Develop·ÖÖ§£¬ÓÖÊÇÒ»¸ö²»Ð¡µÄ¹¤×÷Á¿¡£
ÉÏÃæÖ»ÊǽéÉÜÁËÒ»¸öÐèÇóµÄÇé¿ö£¬Èç¹ûÓÐn¸öÐèÇ󣬶ÔÓÚ¼¯³ÉÈËÔ±À´Ëµ£¬¾ÍÊÇ9*nµÄ¹¤×÷Á¿¡£Õâ¸öÖ»ÊÇiOS¹¤³Ì£¬»¹ÓÐÒ»¸öandroid¹¤³Ì£¬ÒÔºó¿ÉÄÜ»¹ÓÐweexµÄ¡¢flutterµÄ£¬×µÄÇé¿ö£¬¹¤×÷Á¿¾ÍÊÇ4*9*n£¬ÏàÐŶÔÓÚÈκÎÒ»¸ö¿ª·¢/²âÊÔ/PM£¬¶¼ÊÇÒ»¸ö²»Ð¡µÄÌôÕ½¡£
ËùÒÔ£¬×Ô¶¯¼¯³É¶ÔÓÚÏÐÓãÀ´Ëµ£¬ÆÈÔÚü½Þ£¬ÒªÏë×ö¿Í»§¶Ë×Ô¶¯¼¯³É£¬°ÚÔÚÎÒÃÇÃæÇ°ÓÐÕâô¼¸¸öÎÊÌ⣺
¶à¸öÐèÇó£¬Ôõô²ÅÄܱ£Ö¤ÓÐÌõ²»ÎɵÉ?
ÈçºÎ³ÖÐø¼¯³É£¬·½°¸Ó¦¸ÃÈçºÎÉè¼Æ?
¼¯³É½áÊø£¬ÔõÑù´¥·¢²âÊÔ?
ÈÃÎÒÃÇÏÈÀ´¿´Ï¿ª·¢¹ý³Ì±ê×¼»¯£¬½«ÐèÇó¡¢´úÂë¡¢¼¯³É¹ØÁªÆðÀ´£¬×öµ½´ÓÔ´Í·µ½½áβµÄ×Ô¶¯»¯¡£
1.2 ¹ØÁªÐèÇóºÍ´úÂë
ÐèÇó¶¼ÊÇÔÚAoneƽ̨ÉÏÃæÀ´¹ÜÀíµÄ£¬Ã¿¸öÐèÇó¶¼¶ÔÓ¦ÓÐÒ»¸öid£¬Ôõô½«ÐèÇó¸ú´úÂë¹ØÁª?
×¢£ºAoneÊÇÒ»¸öÐèÇó¹ÜÀíÆ½Ì¨
ÏÐÓãµÄ½â¾ö·½°¸ÊÇ£ºÔÚgitÌá½»commitÖУ¬Ìí¼ÓÉÏÐèÇóµÄÐÅÏ¢£¬±ÈÈçÐèÇóµÄid¡£ÊµÏÖµÄÔÀí¾ÍÊÇÀ¹½Øgit
commitʼþ£¬È»ºó½«Ïà¹ØµÄÐèÇóÌí¼Óµ½commetÖУ¬½ÓÏÂÀ´µÄÎÊÌâ¾ÍÊÇÔõôȡµ½Ïà¹ØÐèÇóµÄÐÅÏ¢?
ÓÐ2¸ö·½·¨£º
ͳһ·ÖÖ§ÃüÃû¹æ·¶£¬ÀýÈçtask/task_<AoneId>_<desc>
Ìá½»µÄʱºòÖ÷¶¯ÊäÈëÐèÇóÐÅÏ¢£¬ÀýÈç fix ##<AoneId>
ÕâÑùÔÚÌá½»µÄʱºò£¬¾Í¿ÉÒÔ»ñÈ¡µ½<AondId>£¬×îÖÕ½«´úÂëºÍÐèÇó¹ØÁªÆðÀ´£¬½á¹ûÈçÏÂͼËùʾ£º

µÚ2ÐоÍÊǹØÁªÐèÇóµÄÁ´½Ó£¬Ã¿¸öcommitÉÏÃæ¾ÍЯ´øÁËÐèÇóµÄÐÅÏ¢£¬Ö÷ÒªÊÇΪÁ˺óÃæ¶¨Î»²âÊÔ·¶Î§¡£Õâ¸öÐèÇóÔÚ²âÊÔͨ¹ýºó£¬¿ÉÒÔ¼àÌýÐèÇó״̬±ä¸üµÄmetaqÏûÏ¢£¬ÏȺϲ¢·ÖÖ§´úÂ룬ÔÙ×Ô¶¯É¾³ý·ÖÖ§¡£
¹ØÁªÐèÇóºÍ´úÂ룬ÏêÇé¿É²Î¿¼ÕâÆªÎÄÕ£ºHook GitʵÏÖ´úÂëÓëÐèÇóµÄÒ»ÖÂÐÔ
1.3 ¹ØÁªÐèÇóºÍ¼¯³ÉÏî
Ç°ÃæÒ²½»´ú¹ý±³¾°£¬ÏÐÓã²âÊÔ×éÆÚÍûÊÇÄÜ×öµ½¿ª·¢½×¶ÎºÍ¼¯³É½×¶Î¶¼ÄÜ´¥·¢Ïà¹ØµÄ¼¯³ÉºÍ²âÊÔ¼þ£¬Õâ¾ÍÒªÇóÎÒÃÇ£¬Òª×öµ½ÐèÇóÓ뼯³ÉÏî¹ØÁªÆðÀ´£¬Ò»¸öÐèÇó¶ÔÓ¦Ò»¸öĦÌìÂÖµÄÏîÄ¿¡£
×¢£ºÄ¦ÌìÂÖÊÇÒ»¸ö¹¹½¨Æ½Ì¨£¬¿ÉÒÔÅäÖÃÏà¹ØµÄÄ£¿éÒÀÀµ

ÔÚÊý¾Ý¿âÖУ¬¾Í¿ÉÒÔ½«²úÆ· - ÐèÇó - ĦÌìÂÖÏîÄ¿¹ØÁªÆðÀ´£¬Ã¿¸öprojectId¾Í¶ÔÓ¦Ò»¸öĦÌìÂÖµÄÏîÄ¿£¬Ã¿¸öĦÌìÂÖÏîÄ¿»á¶ÔÓ¦ºÜ¶à¸öÅäÖÃÏÊý¾Ý¿âÖоÍÓÐÁ˼¯³ÉÏîµÄÊý¾Ý¹ØÏµ£¬°üÀ¨¹¤³ÌÖ®¼äµÄÒÀÀµ¹ØÏµ¡£
½ÓÏÂÀ´µÚ2¸öÎÊÌ⣺ÈçºÎ³ÖÐø»¯¼¯³É£¬·½°¸Ó¦¸ÃÈçºÎÉè¼Æ?
2. ×Ô¶¯¼¯³É¿ò¼Ü
Êý¾ÝÖÐÒѾ´æ´¢ÁËÐèÇó - ĦÌìÂÖÏîÄ¿µÄ¹ØÏµ£¬Ôõô½«¹ØÁªµÄ´úÂëÓ¦ÓÃÆðÀ´µÄ£¬×öµ½¿É³ÖÐø¼¯³É?ÏÐÓãĿǰ²ÉÓÃwebservice³ÐÔØ·þÎñÖ®¼äµÄ´®Áª£¬ÐγÉÁËÒ»¸öpiplineģʽ¡£
2.1 ƽ̨¼Ü¹¹
´Ëƽ̨ʹÓÃspringboot´î½¨£¬²ÉÓÃǰºó¶Ë·ÖÀëµÄÉè¼Æ£¬·þÎñ¶Ë¶ÔÍⱩ¶µÄ½Ó¿Ú¶¼ÊÇrestful£¬Ç°¶ËÓÃVue±àд£¬Í¨¹ýaxios·¢ËÍAJAXÇëÇóÓë·þÎñ¶ËͨѶ¡£ÐÅÏ¢À´Ô´³ýÁËgitlab¡¢Ä¦ÌìÂÖºÍAoneƽ̨֮Í⣬»¹»áÔÚ±¾µØÊý¾Ý¿â´æ´¢Ò»·Ý¹ØÏµÓ³Éä±í¡£

Õâ¸öͼÖУ¬¿ÉÒÔ¿´µ½Ö÷Òª·Ö³É¼¸¸ö´ó¿é£ºÊý¾Ý²ã¡¢ÒµÎñ²ã¡¢½Ó¿Ú²ãºÍǰ¶ËUI+¿Í»§¶Ë¡£Õû¸öƽ̨ËãÊÇÒ»¸ö´óµÄ¿Í»§¶Ë£¬ËùÒÔÕë¶Ôgitlab»ù´¡·þÎñ¡¢MTL»ù´¡·þÎñ¡¢Aone»ù´¡·þÎñºÍJenkins»ù´¡·þÎñ¶¼×÷Ϊһ¸öÊý¾Ý²ã¡£±¾µØµÄÊý¾Ý¿â£¬Ö÷Òª±£´æÐèÇó
- ´úÂë - ´ò°üµÄÓ³Éä¹ØÏµ£¬±ÈÈç×Ó¿âµÄ´úÂë±ä¸ü£¬ÐèÒª´¥·¢Ä¦ÌìÂÖ¹¤³Ì´ò°ü£¬ÐèÒª·´Ïò²éÕÒ¡£
´Ë·þÎñÔÚÈÕ³£»·¾³µÄһ̨·þÎñÆ÷£¬µ«ÊÇ»áÁíÍâÒ»¸öÎÊÌ⣺ĦÌìÂÖÊÇÔÚÔ¤·¢»·¾³µÄ£¬ÈÕ³£»·¾³ºÍÔ¤·¢»·¾³±¾ÉíÊÇÍøÂç¸ôÀëµÄ£¬Ò²¾ÍÎÞ·¨Ö±½Óµ÷ÓÃĦÌì·ÌṩµÄhsf·þÎñ¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇÔÚÔ¤·¢»·¾³£¬´î½¨ÁËÒ»Ì×ÇŽӷþÎñ£¬Í¨¹ývipserverÀ´ÖÐת·þÎñ¡£
2.2 ʼþÇý¶¯
Õû¸öƽ̨ÊÇÓÉʼþÇý¶¯£¬Ö÷Òª·Ö3²¿·Ö£ºMerge Request¡¢Gitlab
PushºÍ»úе´¥·¢(°üÀ¨ÊÖ¹¤¡¢¶¨Ê±)¡£
GitlabÌṩÁ˺ÜÈËÐÔ»¯µÄ½Ó¿Ú£¬¿ÉÒÔ¼àÌýµ½´úÂëµÄ±ä¸ü£¬ÅäÖ÷½·¨Ò²ºÜ¼òµ¥£¬¼ûÏÂͼ£º

Ö÷Òª´¦ÀíµÄÊÇpush eventºÍmerge request£¬Æ½Ì¨Ìṩһ¸öpostµÄrestfullµÄ½Ó¿Ú£¬È»ºóÅäÖÃÔÚgitlabÏîÄ¿ÀïÃæ£¬¾Í¿ÉÒÔ¼àÌýµ½´úÂë±ä¸ü¡£
/**
¡¡¡¡* ¼à¿Øgitlab webhookµÄÖ÷Èë¿Ú
¡¡¡¡* @param payload
¡¡¡¡*/@RequestMapping(value = "webhook",
method = RequestMethod.POST)public void webhooks(@RequestBody
String payload) {
¡¡¡¡logger.info(payload);
¡¡¡¡GitlabHookEvent event = JSON.parseObject(payload,
GitlabHookEvent.class);
¡¡¡¡eventService.dispatchGitlabEvent(event);
¡¡¡¡} |
×¢£ºgitlabµÄpushºÍmergeʼþ»áÓÐÖØ¸´·¢Ë͵ÄÇé¿ö£¬ËùÒÔÐèÒª×öÒ»ÏÂÈ¥ÖØµÄ´¦Àí
ÔÚÕâ±ß»á½âÎö³öGitlabHookEvent£¬È»ºóÔÙÓÉGitlabEventServiceÈ¥·Ö·¢£¬ÔÙÓɼ¯³ÉÄ£¿éÈ¥´¥·¢´ò°ü£¬ÄǾÍÈÃÎÒÃÇÀ´¿´Ï³ÖÐø´ò°üµÄ½â¾ö·½°¸¡£
2.3 ³ÖÐø´ò°ü
³ÖÐø¹¹½¨£¬ÓÅÏÈÒª½â¾öµÄÊÇbundleÖ®¼äµÄÒÀÀµ£¬ÏÖÔÚÖ»Ö§³Öµ¥ÏîÒÀÀµµÄ´¦Àí£¬Ó³Éä¹ØÏµ»áÔÚÊý¾Ý¿âÖлᱣ´æÒ»·Ý£¬µ±ÐèÒª´¥·¢Ò»¸öĦÌìÂÖÏîÄ¿¹¹½¨£¬¾Í¿ÉÒÔ½âÎö³öËü¶ÔÓ¦µÄÒÀÀµ¿â¡£Ö÷ÌåÁ÷³ÌÈçÏÂͼËùʾ£º

ͨ³£Çé¿öÏ£¬×Óbundle»á¸Ä¶¯¶à¸ö£¬Äõ½ÐèÒª¹¹½¨µÄ×ÓbundleÁбíÖ®ºó£¬Ïȼì²â×ÓbundleÊÇ·ñÐèÒªÖØÐ´ò°ü£¬¼ì²â¹æÔò£º¿ÉÒÔ¸ù¾Ý×îºóÒ»´ÎcommitÐÅÏ¢ºÍÉÏÒ»´Î¼¯³É³É¹¦µÄʱ¼ä²î£¬Èç¹û²îÖµ´óÓÚÒ»¸öãÐÖµ£¬±íÃ÷²»ÐèÒªÖØÐ´ò°ü;·ñÔò¼ÓÈëµ½´ò°ü¶ÓÁÐÀïÃæ¡£
Ö÷¹¤³Ì+×ÓbundleµÄÒ»¸ö¼¯ºÏ×÷Ϊһ¸öÕûÌ弯³ÉÈÎÎñ£¬Ìí¼Óµ½´ò°üÈÎÎñ¶ÓÁÐÀïÃæ£¬ÓÉÓÚû°ì·¨»ñÈ¡µ½Ä¦ÌìÂÖ´ò°ü³É¹¦µÄmetaqÏûÏ¢µÄ»Øµ÷£¬Ö»ÄÜÈ¥ÂÖѯ½á¹û¡£Ïȼì²â×ÓbundleÊÇ·ñÒѾ½áÊø£¬Èç¹ûÒѾ½áÊø£¬Ôò´¥·¢Ö÷¹¤³ÌµÄ´ò°ü;Èç¹ûûÓÐ×ÓbundleÔÚ´ò°ü£¬¾Í¼ì²éÖ÷¹¤³ÌÊÇ·ñ½áÊø¡£
private void
triggerMTLBuildInterval(FMPackageTask task, MTLProduct
product, int mtlProjectId){// ·ÖÎö×ÓÄ£¿é
ArrayList<MTLBuildConfig> modulesConfigs
= gitlabMTLBridge.getModuleBuildConfigList(mtlProjectId);if
(modulesConfigs != null) {for (MTLBuildConfig
moduleConfig : modulesConfigs) {boolean rebuild
= isNeedRebuildForConfig(moduleConfig);if (!rebuild)
{continue;
¡¡¡¡}// ¼ì²âµ±Ç°ÊÇ·ñÔÚ´ò°ü£¬Èç¹ûÔÙ´ò°ü£¬ÐèҪȡÏûµ±Ç°µÄ±àÒë
¡¡¡¡MTLBuildResult latestBuildResult = mtlService.getLatestBuildResult(moduleConfig.id,
null);if (latestBuildResult != null){
¡¡¡¡String status = latestBuildResult.buildStatus;if
(status.equals(MTLBuildStatus.RUNNING.getValue())
||
¡¡¡¡status.equals(MTLBuildStatus.WAITING.getValue())){
¡¡¡¡mtlService.cancelBuildTask(product.rpc_key,
latestBuildResult.id);
¡¡¡¡logger.info("¡¾È¡Ïû´ò°ü¡¿:" + moduleConfig.toString());
¡¡¡¡}
¡¡¡¡}// Ö´Ðдò°ü²Ù×÷
¡¡¡¡int resultId = triggerBuildWithConfig(moduleConfig);if
(resultId != 0) {
¡¡¡¡task.moduleConfigs.add(moduleConfig);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡}// Èç¹ûÓÐ×Ó¹¤³Ì£¬ÐèÒªÏÈ´ò×Ô¹¤³Ì£¬È»ºóÔÙ´òÖ÷¹¤³Ì
¡¡¡¡if (task.moduleConfigs.isEmpty()){
¡¡¡¡triggerBuildWithConfig(task.mainConfig);
¡¡¡¡}
¡¡} |
Òì³£Çé¿öµÄ´¦Àí£¬±ÈÈçÈκÎÒ»¸ö×Óbundleʧ°Ü£¬ÔòÐèҪȡÏûÕû¸ö¹¹½¨ÈÎÎñ¡£µÈ¹¹½¨½áÊø£¬»áͨ¹ýApplicationEvent¹ã²¥Ê¼þ£¬ÐèÒªµÄservice¼àÌýµ½½á¹û£¬ÔÙ×öÏà¹ØµÄ´¦Àí¡£
/**
¡¡¡¡* ¹ã²¥¹¹½¨Ê¼þ ¡¡¡¡* @param task
¡¡¡¡*/private void sendApplicationEvent(FMPackageTask
task){ ¡¡¡¡
ApplicationEventMTLPackage event = new ApplicationEventMTLPackage(context);
¡¡¡¡event.task = task; ¡¡¡¡context.publishEvent(event); ¡¡¡¡} |
½ÓÏÂÀ´Òª¿´ÏµÚ3¸öÎÊÌ⣺×Ô¶¯¼¯³É½áÊø£¬ÔõÑù´¥·¢CI²âÊÔ?
3. ¼¯³É²âÊÔ
ÏÖÔÚÎÒÃÇÒѾµÃµ½Á˹¹½¨½á¹û£¬²»¹Ü³É¹¦»¹ÊÇʧ°Ü£¬¶¼»á´¥·¢Ïà¹ØµÄCI²âÊÔ£¬Ôõôȷ¶¨²âÊÔУÑé¼þµÄ²âÊÔ·¶Î§À´Ìá¸ß²âÊÔЧÂÊ?
Ê×ÏÈÒª½â¾ö2¸öÎÊÌ⣺
Ôõô¶¨Òå²âÊÔ·¶Î§?
¶ÔÓÚ¿Í»§¶ËÀ´Ëµ£¬»ùÓÚÒ³ÃæÀ´»Ø¹éÊDZȽϺÏÊÊ£¬ËùÒÔ¸ú²âÊÔϵͳ¶¨µÄÐÒ飬°´ÕÕÒ³ÃæµÄschemeÀ´»Ø¹é£¬ÕâÑù×ö»¹ÓиöºÃ´¦£¬¾ÍÊÇ¿ÉÒÔ¶¨ÖÆ»¯Ïà¹ØµÄ²ÎÊý£¬¶øÇÒ»¹Ö§³ÖweexºÍflutterÒ³Ãæ¡£
Ôõôȷ¶¨²âÊÔ·¶Î§?
ÔÚÇ°ÃæµÄÎÄÕÂÖУ¬ÎÒÃÇÒ²Ìáµ½ÁË£¬ÏÖÔÚ ÐèÇó - ´úÂë - ¹¹½¨ÏÖÔÚÊǹØÁªµÄ£¬Õë¶Ôÿ´Î¼¯³É£¬¶¼»áÓÐÏà¹ØµÄÇý¶¯Ê¼þ¡£
Merge Request£ºÓÐÏà¹ØµÄmr£¬¾Í¿ÉÒÔÄõ½commitsÁбí
Push£ºÕë¶Ôÿ´Îpush£¬Ò²¿ÉÒÔÄõ½Ïà¹ØµÄcommitsÁбí
»úе´¥·¢£º¿ÉÒÔÄõ½Ò»¶¨Ê±¼ä¼ä¸ôµÄcommitsÁбí
Õë¶ÔÉÏÃæ3¸öʼþÔ´£¬¶¼¿ÉÒÔÄõ½commitsÁÐ±í£¬½ÓמͿÉÒÔÄõ½ÎļþÐÞ¸ÄÁÐ±í¡¢Ð޸ĵÄÈËÔ±¡¢ÒÔ¼°¹ØÁªµÄÐèÇó;Äõ½ÉÏÃæÕâЩÐÅÏ¢£¬¾Í¿ÉÒÔ¿ò¶¨³ö´úÂë±ä¶¯·¶Î§¡£

ÿ´ÎÔÚÅÜCI²âÊÔµÄʱºò£¬¾ÍÄÜÖªµÀÕâÊǸĵÄÄĸöÐèÇó¡£
ʾÀý´úÂëÈçÏ£º
/**
¡¡¡¡* »ñÈ¡Ð޸ķ¶Î§ ¡¡¡¡* @param projectId ¡¡¡¡* @param commits ¡¡¡¡* @return ¡¡¡¡*/public FMCITriggerParam getChangeScope(int
projectId, String branch, ArrayList<GitlabCommit>
commits){// »ñȡƽ̨ÐÅÏ¢ ¡¡¡¡Repo projectRepo = repoMapper.getRepoByProjectId(projectId); ¡¡¡¡String platform = "ios";if (projectRepo
!= null){ ¡¡¡¡platform = projectRepo.platform; ¡¡¡¡}// Ìá½»ÈËÔ± ¡¡¡¡ArrayList<String> authors = getCommitsAuthors(commits);//
Ð޸ĵÄÎļþ ¡¡¡¡ArrayList<String> changeFiles = commitService.getCommitsChangeFiles(projectId,
commits);// Ð޸ķ¶Î§ ¡¡¡¡ArrayList<String> pages = getPagesByFiles(projectId,
changeFiles);// ´¥·¢·½Ê½ ¡¡¡¡ArrayList<String> triggerTypes = new
ArrayList<>(); ¡¡¡¡triggerTypes.add("uiauto"); ¡¡¡¡triggerTypes.add("monkey"); ¡¡¡¡FMCITriggerParam change = new FMCITriggerParam(); ¡¡¡¡change.projectid = projectId; ¡¡¡¡change.platform = platform; ¡¡¡¡change.mergerequestid = 0; ¡¡¡¡change.branchName = branch; ¡¡¡¡change.userlist.addAll(authors); ¡¡¡¡change.pages = String.join(";",
pages); ¡¡¡¡change.triggertype.addAll(triggerTypes);return
change; ¡¡¡¡}
|
»ñÈ¡µ½Ìá½»ÈËÔ±¡¢Ð޸ķ¶Î§µÈÐÅÏ¢ºó£¬²âÊÔ¼þ¿ÉÒÔÌáʾÏà¹ØµÄ´íÎó¡£

4. ½á¹ûͳ¼Æ
ÏÂÃæÊÇÔÚÒ»ÖÜÖ®ÄÚ¼¯³ÉµÄÊýÁ¿£¬ÒÔ7.8 - 7.15ºÅµÄÖÜÆÚΪÀý(iOS¹¤³Ì)£º

´ÓÉÏÃæÊÇÒÑ·Ö֧ά¶Èͳ¼Æ£¬
¼¯³É·ÖÖ§develop£¬Ã¿Ìì¶¼»á¶¨Ê±´¥·¢Ïà¹Ø¼¯³É
ÐèÇó·ÖÖ§£¬ÔÚ¿ª·¢ÖÜÆÚÄÚ£¬»áÓнϸߵĴ¥·¢Á¿

´Óʼþ´¥·¢µÄά¶ÈÉÏ£º
Ö÷Òª»¹ÊÇÒÔ¶¨Ê±´¥·¢ÎªÖ÷
ÔÚ¿ª·¢ÖÜÆÚÄÚ£¬push´¥·¢µÄÊýÁ¿»áÓÐËùÔö³¤
Ŀǰ£¬¼¯³ÉµÄÐèÇó±È½ÏÉÙ£¬ËùÒÔÊýÁ¿Ò²Ïà¶Ô½ÏÉÙ£¬µ«×ÜÌåÀ´ËµÕû¸ö·½°¸ÊÇÎȶ¨µÄ£¬ºóÐø»áÍêÉÆÏà¹ØµÄÊý¾Ýͳ¼Æ£¬±ÈÈç¹¹½¨Ê±³¤¡¢ÐèÇ󿪷¢Ê±³¤µÈ¡£
5. ²È¿Ó¼ÍÒª
ÔÚ¿ª·¢¹ý³ÌÖУ¬²È¹ýһЩ¿ÓÒ²×öһЩ¼Ç¼¡£
5.1 AxiosÍøÂçÇëÇó
ÓÉÓÚ²ÉÓÃǰºó¶Ë·ÖÀëµÄÉè¼Æ£¬ËùÒÔÔÚµ÷ÊÔµÄʱºò»áÓпçÓòµÄÎÊÌ⣬½â¾ö·½°¸¾ÍÊÇÔÚvueµÄconfigÖÐ×öÏà¹ØµÄ´úÀíÉèÖá£
proxyTable:
{'/fishci': {
¡¡¡¡target: 'http://127.0.0.1:8090', //api¶Ë¿Ú ¡¡¡¡// changeOrigin: true, //ÔÊÐí¿çÓò ¡¡¡¡pathRewrite: {'^/fishci': '/' ¡¡¡¡} ¡¡¡¡} ¡¡¡¡} |
¿çÓòµÄÎÊÌâ½â¾öÁË£¬µ«ÊÇÔÚ¶Ô½ÓbucÈÏÖ¤µÄʱºò£¬ÐèÒªÖØ¶¨ÏòÇëÇó£¬Ç°¶ËÓõÄaxios£¬ÎÞ·¨À¹½Øµ½302µÄ·µ»Ø¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬·þÎñ¶ËÒ²×öÁËÏà¹Ø´¦Àí£¬·þÎñ¶Ë½«302µÄ·µ»Ø×ª»¯³É200µÄ·µ»Ø£¬²¢½«Öض¨ÏòµÄÄÚÈÝ·ÅÔÚresponseÀïÃæ£¬È»ºóÔÙÓÐǰ¶ËaxiosÀ¹½Øµ½½øÐд¦Àí¡£
Ê×ÏÈÔÚconfigurationÀïÃæÌí¼ÓÏà¹ØµÄFilter£¬Ìí¼ÓÏà¹ØÅäÖÃ
registration.addInitParameter("HTTP_302_JSON_RESPONSE",
"json");£¬Ç°¶ËÔÚÇëÇóµÄʱºò£¬ÒÔjson½áβµÄÇëÇó£¬Èç¹ûÐèÒªÖØ¶¨Ïò£¬¾ÍÄÜ»ñÈ¡µ½200µÄ·µ»Ø£¬Ö»²»¹ýÖØ¶¨ÏòµÄÄÚÈÝ»áÔÚresponseÀïÃæÒÔÎı¾ÐÎʽ³ÊÏÖ£¬È»ºóÔÙÈ¥×öÀ¹½Ø¡£
xios.interceptors.response.use((response)
=> {if (response.status === 200 &&
response.data.hasError) {return window.location
= "<ÖØ¶¨ÏòµÄÁ´½Ó>";
¡¡¡¡}return response; ¡¡¡¡}, function (error) {return Promise.reject(error); ¡¡¡¡}); |
5.2 ¼¯³ÉÏÞÁ÷
µ¥¸öÐèÇóµÄ´ò°üÒµÎñÂß¼Ïà¶Ô¼òµ¥£¬µ«ÊÇÓÉÓÚpush»òmerge¶¼»á´¥·¢È«Á¿´ò°ü£¬ÆµÂÊ»á±È½Ï¸ß£¬¾ÍÐèÒª×öÏà¹ØµÄÏÞÁ÷Âß¼£¬ÈçÏÂͼËùʾ£º

»áÓÐ2¸ö¶ÓÁб£´æµ±Ç°µÄ´ò°üÈÎÎñ£ºÖ´ÐжÓÁк͵ȴý¶ÓÁÐ
ÐÂÀ´Feature2£¬µ±Ç°ÒѾÓÐÖØ¸´ÈÎÎñÒѾÔÚ¼¯³É£¬»á·ÅÔڵȴý¶ÓÁУ¬Èç¹ûÓÐÖØ¸´µÄÈÎÎñ£¬Ôòɾ³ý
ÐÂÀ´Feature5£¬µ±Ç°Ã»ÓÐÏàͬÈÎÎñÕýÔÚÖ´ÐУ¬Ö±½ÓÌí¼Óµ½Ö´ÐжÓÁÐ
Ö´ÐжÓÁÐÒѾ´ïµ½×î´óÈÝÁ¿5£¬ÐÂÀ´µÄFeature6Ìí¼Óµ½µÈ´ý¶ÓÁÐ
µ±Ö´ÐжÓÁÐÀïÃæÈÎÎñ½áÊø£¬»á´ÓµÈ´ý¶ÓÁÐÀïÃæÑ¡È¡Ò»¸öûÓÐÔÚ´ò°üµÄÈÎÎñ£¬·Åµ½Ö´ÐжÓÁÐÀïÃæ¡£
6. ½áÓï
±¾ÆªÎÄÕÂÖ÷ÒªÊÇÕûÀí£¬ÔÚÓ¾µÀ¿ª·¢Ä£Ê½Ï£¬ÈçºÎÓÐЧµÄÌá¸ß¿Í»§¶Ë¹¤³ÌÄÜЧËù×öµÄʵ¼ù¡£ÏÖÔÚÖ÷ÌåÁ÷³ÌÒѾ´®Í¨£¬½ÓÏÂÀ´¾Í¿ÉÒÔÓÐÕë¶ÔÐÔµÄͳ¼ÆÏà¹ØÊý¾Ý£¬±ÈÈç¹¹½¨µÄʱ¼ä³¤¶Ì¡¢²âÊÔÓÐЧÐԵĶÈÁ¿£¬ÓÐÁËÕâЩÊý¾Ý¾Í¿ÉÒÔ¶Ô¿Í»§¶ËµÄ¼¯³ÉЧÂÊÓÐÕûÌåµÄ¶ÈÁ¿£¬ÔÙ·´ÏòµÄÓÅ»¯¿Í»§¶ËµÄ¼¯³É·½°¸¡£
ÔÚÕûÌ×·½°¸ÖУ¬²âÊÔУÑéºÜÖØÒª£¬ÈçºÎ×öµ½¸ßЧµÄ²âÊÔ?ÔÔòÉϳɱ¾±È½ÏµÍµÄ£¬Åܵįµ´Î¿ÉÒԸߵ㣬ÀýÈ磺´úÂë¼ì²â¡¢µ¥Ôª²âÊÔ;³É±¾±È½Ï¸ßµÄ£¬Æµ´Î¿ÉÒԵ͵㣬ÀýÈ磺UI
Automation¡£×ÜÌåÀ´Ëµ£¬ÏÖÔÚ´ÓÐèÇó - ´úÂë - ¹¹½¨¶¼¹ØÁªÆðÀ´£¬¾Í¿ÉÒÔͳ¼Æ³öÒ»¸öÐèÇóµÄ´úÂëÌá½»Á¿¡¢¹¹½¨ÊýÁ¿ºÍbugÊýÁ¿£¬·´ÏòµÄ¶ÔÐèÇó¾ÍÓÐÁËÒ»¸ö¶ÈÁ¿£¬±ÈÈçÐèÇó²ð·ÖµÄºÃ»µ¡¢¿ª·¢ÖÜÆÚµÄ³¤¶ÌµÈ¡£×îÖÕÄ¿µÄ£¬×÷Ϊһ¸ö¿Í»§¶ËÍŶӣ¬Äܹ»×ö¿ìËٵĵü´úÒµÎñ£¬Ìá¸ß¸÷ÍŶÓÖ®¼äµÄÐͬЧÂÊ£¬´Ó¶øÔÚÕûÌåÉÏÌá¸ßÄÜЧ¡£ |