ʹÓÃÒ»¸öÕæÊµµÄ¿Í»§³¡¾°·ÖÎöÃæÁÙµÄÄÑÌâ¼°Æä½â¾ö·½Ê½£¬ÒÔÈ·±£³ÖÐø²¿Êð¡£³ÖÐø½»¸¶ÒѾ³ÉΪÔÚÔÆÆ½Ì¨ÉϽ»¸¶½â¾ö·½°¸Ò»ÖÖ³£¼ûģʽ¡£ÒªÈóÖÐø½»¸¶³ÉΪ¿ÉÄÜ£¬ËùÓй¹½¨¡¢²¿Êð¡¢²âÊÔÓë·¢²¼½×¶Î¶¼ÐèÒª×Ô¶¯Íê³É£¬ÒÔÌṩƵ·±µÄµü´ú£¬ÕâÑù¿ª·¢ÈËÔ±ºÍ²Ù×÷רҵÈËÔ±²ÅÄÜʱ¿ÌÁ˽â´úÂë±ä»¯ÓëȱÏÝÐÞ¸´¡£¹ý³Ì×Ô¶¯»¯³Ì¶ÈµÄÌá¸ßÒ²»áÌá¸ßÔÆ½»¸¶µÄЧÂÊ¡£Ó¦Óñ¾ÎÄÖеݲװÓ벿Êð¼¼Êõ¸Ä½øÁ˽â¾ö·½°¸°²×°³ÌÐò£¬ÈÃËü¸üÊʺÏÓÚ³ÖÐø²¿ÊðºÍ½»¸¶¡£±¾ÎÄÑÝʾÁËÒ»Öָıä½â¾ö·½°¸°²×°ÓëÅäÖÃÀ´Ö§³Ö³ÖÐø²¿ÊðµÄ·½·¨¡£
¼ò½é
Ëæ×ÅÔÆ¼ÆËã¼¼ÊõµÄ·¢Õ¹£¬ÔÆ»·¾³±»ÈÏΪÊÇÏò¿Í»§½»¸¶ÐÐÒµ½â¾ö·½°¸µÄ×îÓÐǰ;µÄ·½Ê½¡£ÎªÁËÈ·±£Èí¼þµÄ³ÖÐø½»¸¶£¬¿ª·¢¡¢²âÊÔÓëÔËÓªÍŶӱØÐëÏ໥Ð×÷£¬ÔÚÒ»Æð¸ßЧ¹¤×÷¡£ÔÆ»·¾³·Ç³£ÊʺÏÕâÖÖÀàÐ͵Ľ»»¥¡£È»¶ø£¬ÒòΪ¿ª·¢½×¶ÎÉæ¼°µ½¸´Ôӵķֲ¼Ê½ÍØÆË£¬ºÜÈÝÒ׳ö´í£¬¶øÇÒͨ³£ÐèÒªÊÖ¶¯Åųý¹ÊÕÏ¡£ÔںܶàÇé¿öÏ£¬²¿ÊðÉè¼ÆÖ§³Öµ¥Ò»²¿Ê𣬲»Ö§³Ö³ÖÐø²¿Êð¡£Ó¦ÓóÖÐø½»¸¶ÔÔòµÄ²úÆ·²¿Êð½×¶Î¾³£³ÉΪƿ¾±£¬Í¬Ê±»¹»á¸ø DevOps ¹ý³ÌµÄЧÂÊ´øÀ´¸ºÃæÓ°Ïì¡£
±¾ÎĽ«Ê¹ÓÃÒ»¸öÕæÊµµÄ¿Í»§³¡¾°À´·ÖÎöÃæÁÙµÄÄÑÌâ¼°Æä½â¾ö·½Ê½£¬ÒÔÈ·±£³ÖÐø²¿Êð¡£
ÖÂÁ¦ÓÚÐÐÒµ²¿Êð×Ô¶¯»¯µÄÈí¼þ¹¤³Ìʦ»á·¢ÏÖ±¾ÎĺÜÓÐÓô¦£¬¿ÉÒÔ°ïÖúËûÃÇʵÏÖÔÆÉϵijÖÐø½»¸¶¡£ÕâЩָµ¼¼Ù¶¨ÄúÓµÓв¿ÊðÐÐÒµ½â¾ö·½°¸ºÍ¿ª·¢½Å±¾·½ÃæµÄ¼¼ÇÉ¡£
³ÖÐø½»¸¶¹ý³Ì
³ÖÐø½»¸¶µÄÄ¿±êÊÇÈ·±£Äܹ»Ê¹ÓÃ×îÓÐЧºÍ°²È«µÄ·½·¨À´¿ª·¢¡¢²âÊÔ¡¢²¿ÊðÈí¼þ²¢½«Æä½»¸¶Éú²ú¡£¶ÔÈí¼þϵͳÈÎÒⲿ·ÖËù×öµÄ¸Ä¶¯£¬´Ó»ù´¡¼Ü¹¹²ã¡¢Ó¦Óò㵽¶¨ÖÆÊý¾Ý²ã£¬Í¨¹ýÒ»ÌõÌØ¶¨µÄ½»¸¶¹ÜµÀ³ÖÐøÓ¦ÓÃÓÚÉú²ú»·¾³¡£ÕâÖÖ·½·¨ÈÃÓû§ÏàÐÅ£¬²úÆ·»·¾³Äܹ»·ÃÎÊ×îз¢²¼µÄ´úÂë¡£
³£ÓõÄÄ£ÐÍÓë¿ò¼Ü
Èçͼ 1 ÖÐËùʾµÄͨÓÃÄ£Ð͹㷺ӦÓÃÓÚ´ó¶àÊý IBM ÐÐÒµ½â¾ö·½°¸µÄ½»¸¶ÖС£
ͼ 1. ³£ÓõijÖÐø½»¸¶Ä£ÐÍ

ͼ 1 ÑÝʾÁËÒ»Ìõ¶Ëµ½¶ËµÄ×Ô¶¯»¯Í¨µÀ£¬Ëü½«½â¾ö·½°¸¿ª·¢ÓëÉú²ú»·¾³ÁªÏµÆðÀ´¡£¸ÃͨµÀʹÓà Jenkins ×÷ΪһÖÖ×Ô¶¯»¯ÒýÇæ£¬¿ÉÒÔ£º
1.¼ì²â´úÂë¸ü¸ÄºÍ´¥·¢³ÖÐø¹¹½¨¡£
2.½«¹¹½¨°æ±¾°²×°µ½ Blue Çø¡£Blue Çø±»ÈÏΪÊÇ DevOps ÍŶÓÔÚ±¾µØ½øÐй¹½¨È·ÈϵIJâÊÔ»·¾³¡£
3.ÔÚ Blue ÇøÉÏ¿ªÊ¼×Ô¶¯»¯²âÊÔ²¢È·ÈϲâÊÔ½á¹û¡£
4.µ± Blue Çø×¼±¸¾ÍÐ÷²¢¾¹ýÈ·ÈϺ󣬴ӲâÊÔ»·¾³Çл»µ½ÔËÐеÄÉú²ú»·¾³£¨Red Çø£©¡£
³ÖÐø½»¸¶ÖеIJ¢·¢ÒòËØ
²½Öè 2 ÊDZ¾ÎĵÄÖ÷ÒªÖØµã¡£ÔÚ³ÖÐø½»¸¶¹ý³ÌÖУ¬×î¾ßÓÐÌôÕ½ÐԵķ½ÃæÊÇÈçºÎ¸ßЧµØÊµÏÖ³ÖÐø²¿Êð¡£²¿Êð½×¶Î±ØÐëÊÊÓ¦¸´Ôӵķֲ¼Ê½ÍØÆË¡¢²»¶Ï±ä»¯µÄ»ù´¡¼Ü¹¹ºÍÅäÖñä¸ü¡£ÕâЩ²¢·¢ÒòËØºÜÈÝÒ×µ¼Ö¿ͻ§Êý¾ÝµÄ¶ªÊ§¡£´«Í³µÄ½â¾ö·½°¸²¿ÊðÉè¼ÆÖ§³Öµ¥Ò»²¿Ê𣬵«²»Ö§³Ö³ÖÐø²¿Êð¡£
ΪÁ˼õÉÙ´íÎó£¬Èùý³Ì±äµÃ¸ü¼Ó¸ßЧ£¬²¢½ÚÊ¡ DevOps ʱ¼äÓ빤×÷Á¿£¬ÐèÒª×î´óÏ޶ȵØÌá¸ß½â¾ö·½°¸²¿ÊðÓëÅųý¹ÊÕϵÄ×Ô¶¯»¯³Ì¶È¡£ÎÒÃÇÒª×öµÄµÚÒ»²½ÊÇÁ˽âÔÚÕæÊµµÄ½â¾ö·½°¸²¿Ê𳡾°ÖпÉÄÜÓöµ½µÄÄÑÌâ¡£
ÐÐÒµ½â¾ö·½°¸²¿Êð°¸Àý
¿¼ÂÇÿÔÂÔÚÔÆÆ½Ì¨ÉϽ»¸¶Ò»¸öÐÐÒµ½â¾ö·½°¸µÄ³¡¾°¡£ÒòΪ DevOps ÍŶӱØÐëÔÚÉú²ú»·¾³Öв¿ÊðÿÔÂÒ»´ÎµÄ¹¹½¨£¬°²×°³ÌÐòÐèÒªÄܹ»ÔÚ²¿Êð¹ý³Ì¿ªÊ¼Ê±ÔËÐÐÔÚÉú²ú»·¾³ÖС£
³ÖÐø½»¸¶¹ý³ÌÖеij£¼ûÎÊÌâ
ÏÂÃæµÄÀý×Ó´Ó°²×°½Ç¶È˵Ã÷ÁËһЩ³£¼ûÎÊÌ⣺
1.ÎļþÌæ»»
2.×ÊÔ´¸üÐÂ
3.Êý¾Ý¿âÅäÖÃ
4.ÎļþÌæ»»
ͨ³£ÐèÒª¸üлòÌæ»»ÅäÖÃÎļþ¡£ÔÚÇåµ¥ 1 ÖУ¬°²×°³ÌÐòÔÚ°²×°Ê±Ìæ»»ÁËµÚ 3 ÐÐÖеÄռλ·û¡£µÚ 4 ÐÐÖÐµÄ URL ÊǸù¾ÝÔËÐÐʱµÄÓû§ÊäÈë½øÐÐÉèÖõġ£
Ò»¸öеÄÒªÇóÈð²×°³ÌÐòÔÚÉÔºóµÄÒ»´Îµü´úÖÐÔÚ°²×°Ê±Ìí¼ÓÒ»¸öÐ嵀 URL someURL¡£´«Í³µÄ½â¾ö·½°¸Êǽ« <someURL>@url@<someURL> ¸½¼Óµ½µÚ 4 Ðв¢ÍêÈ«Ìæ»»Õ¼Î»·û£¬µ«ÕâÖÖ·½·¨»áµ¼Ö´íÎó²¢¶ªÊ§ customizationURL µÄÓû§ÊäÈë¡£
Çåµ¥ 1. ´øÓÐÓÃÓÚÖ÷»úºÍ URL µÄʾÀýռλ·ûµÄ½Å±¾
1 <servers>
2 <server id="appServer">
3 <host>@host@</host>
4 <customizationURL>@cusUrl@</customizationURL>
5 </servers> |
×ÊÔ´¸üÐÂ
¼Ù¶¨ÄúÓÐÒ»¸öʹÓà Java Naming and Directory Interface (JNDI) ´´½¨µÄÓ¦Ó÷þÎñÆ÷µ÷¶È³ÌÐò£¬Ãû½Ð test/schedulerA¡£Ïà¹ØµÄ±íÊÇʹÓÃǰ׺testA_ ½øÐд´½¨µÄ¡£¹ýÒ»¶Îʱ¼ä£¬ÄúÐèÒª½«Õâ¸öµ÷¶È³ÌÐòµÄ±íÇ°×ºÖØÃüÃûΪ testB_¡£Í¨³££¬Äú¿ÉÄÜ»áµ÷Óà WebSphere Application Server API AdminControl À´¸üжÔбíµÄµ÷¶È³ÌÐòÒýÓᣵ«¶Ô³ÖÐø¸üжøÑÔ£¬¾É±íÒѾ´´½¨£¬¼´±ãÊǺÁÎÞÓô¦Ò²²»»áɾ³ý¡£µ±ÁíÒ»µ÷¶È³ÌÐòʹÓà testA_ǰ׺ʱ£¬¾Í»á³öÏÖ´íÎó¡£
Êý¾Ý¿âÅäÖÃ
Êý¾Ý¿âÅäÖñä¸ü½«´øÀ´×î¾ßÓÐÌôÕ½ÐÔµÄÎÊÌâ¡£ÓÉÓÚ½â¾ö·½°¸±»¸üУ¬Êý¾Ý¿â»á×Ðϸ¼ì²é¶Ô±í½á¹¹¡¢Óû§È¨ÏÞ¡¢ÒÑ´æ´¢Êý¾ÝµÄ±ä¸üºÍÆäËû±ä¸ü¡£ÊÊÓ¦±ä»¯µÄÑ¡ÔñÖ®Ò»ÊÇÔÚ SAMPLE.TEST_TAB ±íÖвåÈëÒ»¸öÐ嵀 COL_C ÁС£µ«ÔÚÏÂÒ»´Îµü´úÖУ¬±í½á¹¹½«»á·¢Éú±ä»¯¡£ÀýÈ磬ÐèҪɾ³ý COL_BÁС£Çåµ¥ 2 ÖÐÏÔʾÁËÒ»ÖÖÓ¦¶Ô±ä¸üµÄ´«Í³²¿Êðµ÷Õû£¬¼´ÔÚÊý¾Ý¿â½Å±¾ÖÐÌí¼ÓµÚ 6 ÐС£
Çåµ¥ 2. ʹÓÃÐÂÐÐɾ³ýÊý¾Ý¿âÖÐÒ»ÁеĽű¾
1 CREATE TABLE SAMPLE.TEST_TAB (
2 "COL_A" INTEGER NOT NULL ,
3 "COL_B" VARCHAR(100) )
4 IN "USERSPACE1" ;
5 ALTER TABLE SAMPLE.TEST_TAB 6 DROP COLUMN COL_B 7 ADD COLUMN COL_C INTEGER; |
µ«ÔÚ³ÖÐø½»¸¶ÖУ¬Ìí¼ÓÒ»ÐлᵼÖ´íÎó£¬ÒòΪ£º
1.µ±½Å±¾µÚ¶þ´ÎÔËÐÐʱ£¬SAMPLE.TEST_TAB ÒѾ´æÔÚ¡£
2.ÁÐ COL_B ÒѾ±»É¾³ý¡£Òò´Ë£¬SQL ´¦Àí½«ÔÚûÓÐÌí¼Ó COL_C µÄÇé¿öÏÂÍ£Ö¹¡£
ÊÊÓÃÓÚ½â¾ö³ÖÐø½»¸¶ÎÊÌâµÄÔÔò
ΪÁ˽â¾öÎļþ±ä»¯¡¢×ÊÔ´¸üÐÂÓëÅäÖñä¸üËù´øÀ´µÄÎÊÌ⣬¿ÉʹÓÃÒÔÏÂÔÔò¡£
×îС»¯½â¾ö·½°¸°²×°³ÌÐòËùÐèµÄ¿ª·¢¹¤×÷Á¿¡£ ²»ÒªÎªÃ¿´Î½»¸¶¿ª·¢²»Í¬µÄ°²×°³ÌÐò£¬È·±£¿ª·¢½×¶ÎÖеÄËùÓбä¸ü¶¼Äܱ»¿ìËÙ¶øÓÖ°²È«µØ½»¸¶Éú²ú¡£¿ª·¢Ð²¿Êðʱ£¬¾¡¿ÉÄÜ´Ó¹ýÈ¥µÄµü´ú½øÐм̳С£ÀýÈ磬¼ÙÉèÄúÒѾÔÚǰһ´Îµü´úÖпª·¢ÁË Resource A¡£ÔÚµ±Ç°µü´úÖУ¬Resource A ûÓз¢Éú±ä»¯£¬µ«ÄúÐèÒªÌí¼ÓÒ»¸öÐÂ×ÊÔ´ Resource B¡£Ìí¼Ó½Å±¾ÒÔ´´½¨ Resource B£¬µ«¼´±ã¶ÔÓÚ Resource A ûÓÐеÄÐèÇó£¬Ò²Òª±£³Ö´´½¨ Resource A µÄǰһ¸ö½Å±¾¡£
Õë¶Ô°²×°½×¶ÎʹÓÃ×Ô¶¯µÄ¹ÊÕÏÅųý¡£³ÖÐø½»¸¶µÄЧÂÊÔںܴó³Ì¶ÈÉÏÒÀÀµÓÚ¹ý³ÌµÄ×Ô¶¯»¯³Ì¶È¡£ÒòΪ»·¾³Ö®¼ä´æÔڵIJîÒì¡¢ÊÖ¶¯²Ù×÷ÒýÆðµÄ´íÎóºÍÆäËûÀàËÆµÄÒòËØ£¬Äú±ØÐëÌṩ´¦Àí¹ÊÕϺͰ²×°Ê§°ÜµÄ×Ô¶¯»úÖÆ¡£
Ö§³ÖÖØ¸´²¿Êð½â¾ö·½°¸µÄÄÜÁ¦¡£ ÕâÌõÔÔò×îΪ¹Ø¼ü£¬Ò²×îÄÑʵÏÖ¡£ÎªÁ˾¡¿ÉÄܵشӹýÈ¥µÄµü´ú½øÐм̳У¬±ÈÈçÈ·¶¨ÈçºÎ£º
¹ÜÀíÖØ¸´²¿Êð¡£
1.ʹÓÃÏÖÓеĻù´¡¼Ü¹¹Óë×ÊÔ´À´²¿ÊðдúÂë¡£
2.¸üÐÂÒÔǰµÄÅäÖûòÕßɾ³ý¹ýʱµÄ²¿Êð¡£
½â¾ö·½°¸°²×°³ÌÐòµÄÔªËØ
Ð޸ĵäÐͽâ¾ö·½°¸°²×°³ÌÐòµÄÒÔÏ·½Ã棬ÒÔ±ã¸Ä½ø½â¾ö·½°¸²¿Êð£º
Îļþ¹¹¼þ
ÆóÒµÓ¦ÓóÌÐò ºÍ ÆóÒµÏà¹Ø×ÊÔ´
Êý¾Ý¿â
Îļþ¹¹¼þ
ΪÁ˳ÖÐø½»¸¶£¬°²×°¹ý³Ì±ØÐëÄܹ»£º
1.¸´ÖƺÍÌæ»»¹¹¼þ
2.¼¯³É¹¹¼þ
3.ºÏ²¢¹¹¼þ¡£
ΪÁË·ÀÖ¹³öÏÖ ÎļþÌæ»»µÄÎÊÌâ ÖÐÌá¼°µÄ¿Í»§Êý¾Ý¶ªÊ§£¬½«¿Í»§Êý¾ÝºÏ²¢µ½Ð°汾µÄÎļþÖУ¬¶ø²»ÊǼòµ¥µØ¸´ÖƺÍÌæ»»Îļþ¡£Çåµ¥ 3 ÖÐÏÔʾÁ˹ýÈ¥Ó뵱ǰµü´úµÄÎļþ£ºold.xml ºÍ new.xml¡£
Çåµ¥ 3. old.xml Óë new.xml Ö®¼äµÄ±È½Ï
[root@server diff]# cat old.xml
<servers>
<server id="appServer">
<host>appserver.test.com</host>
<customizationURL>http://abc.com</customizationURL>
</servers> [root@server diff]# cat new.xml
<servers>
<server id="appServer">
<host>appserver.test.com</host>
<customizationURL>@cusUrl@</customizationURL>
<someURL>http://someOtherUrl<someURL>
</servers>
|
ΪÁËͨ¹ý±à³Ì·½Ê½ºÏ²¢Îļþ£¬¸ø°²×°³ÌÐòÌí¼Ó½Å±¾£¨ÓÃÓÚ Linux µÄ Shell ½Å±¾£©À´ÕÒ³ö°æ±¾Ö®¼äµÄ²îÒì¡£½«²îÒì¼Ç¼µ½Ò»¸öÎļþÖУ¬ÒÔ±¸ÈÕºóÒÔ²¹¶¡µÄÐÎʽ´¦ÀíÕâЩ²îÒ졣Ȼºóͨ¹ýËÑË÷²¹¶¡À´»ñÈ¡Àϰ汾ÎļþÖе͍֯ÐÅÏ¢£¬ÔÙ½«ËùÓбä¸üºÏ²¢µ½µ±Ç°ÎļþÖУ¬ÈçÇåµ¥ 4 ÖÐËùʾ¡£
Çåµ¥ 4. ÒÔ±à³Ì·½Ê½ºÏ²¢Îļþ
[root@server diff]# diff old.xml new.xml > patch.txt
[root@server diff]# cat patch.txt
4c4,5
< <customizationURL>http://abc.com</customizationURL>
--- > <customizationURL>@cusUrl@</customizationURL>
> <someURL>http://someOtherUrl<someURL>
[root@server diff]#
|
ÆóÒµÓ¦ÓÃ
ÔÚÕû¸ö³ÖÐø½»¸¶¹ý³ÌÖУ¬ÆóÒµÓ¦ÓóÌÐò¶¼»á·¢Éú¸Ä±ä¡£ÕâÖָıä¿ÉÒÔ³öÏÖÔÚ´úÂë¡¢×ÊÔ´ºÍ EAR ½á¹¹ÖС£ÒòΪ¸ü¸Ä»áÓ°Ïì°²×°½Å±¾£¬Äú±ØÐëÇå³þ¶ÔÄ£Ð͵ÄËùÓиü¸Ä£¬ÒÔ¼°¶Ô EAR Ä£¿éÓëÄ¿±ê²¿Êð·þÎñÆ÷Ö®¼äÓ³ÉäµÄ¸ü¸Ä¡£Òª¹ÜÀí±ä¸ü£¬¿ÉÒÔʹÓÃÒ»¸ö×Ô¶¯³ÌÐòÀ´Éú³É EAR ²¿Êð´úÂë¡£
Ê×ÏÈ£¬ÔÚ¹¹½¨½×¶Î´Ó application.xml ÎļþÖÐÌáÈ¡¶¨ÒåºÃµÄÄ£ÐÍÐÅÏ¢¡£Çåµ¥ 5 ÏÔʾÁËÒ»¸öÄ¿±ê application.xml ÎļþµÄÀý×Ó¡£
Çåµ¥ 5. ʾÀýÓ¦ÓÃÃèÊö·û
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee version="5"
http://java.sun.com/xml/ns/javaee/application_5.xsd">
<display-name>sample_rest_ear</display-name>
<module id="Module_1361859780281">
<web>
<web-uri>sample_test_rest.war</web-uri>
<context-root>/ibm/test/api/services</context-root>
</web>
</module>
<module id="Module_1364467704309">
<ejb>sample_test_ejb.jar</ejb>
</module>
</application>
|
½ÓÏÂÀ´£¬×Ô¶¯Éú³É²¿ÊðÃèÊö·û¡£¸ÃÃèÊö·û»ùÓÚÒÑ»ñÈ¡µ½µÄÄ£ÐÍÐÅÏ¢¡£Çåµ¥ 6 ÏÔʾÁËÒ»¸öʾÀýµÄ²¿ÊðÃèÊö·ûÊôÐÔÎļþ£¬ËüÃèÊöÁËÏÔʾÃû³Æ¡¢EAR ÎļþλÖúÍÒªÓ³Éäµ½ËùÒª²¿ÊðÓ¦ÓõÄÄ£¿é¡£Í¨¹ýʹÓÃÊôÐÔÎļþ£¬¿ÉÒÔÈ·±£Ó¦Óò¿Êð²ÎÊý¸ü¼ÓÁé»î£¬¸üÈÝÒ××Ô¶¯»¯¡£
Çåµ¥ 6. ÃèÊöÓ¦Óò¿ÊðµÄʾÀýÊôÐÔÎļþ
application.0.name=sample_rest_ear
application.0.earfile=content/config/apps/sample_rest_ear.ear
application.0.module.0.name=sample_test_rest
application.0.module.0.moduleFile=sample_test_rest.war
application.0.module.0.deployment=WEB-INF/web.xml
application.0.module.0.cluster.0.name=~{PORTAL_CLUSTER_NAME}
application.0.module.1.name=sample_test_ejb
application.0.module.1.moduleFile=sample_test_ejb.jar
application.0.module.1.deployment=META-INF/ejb-jar.xml
application.0.module.1.cluster.0.name=~{PORTAL_CLUSTER_NAME}
|
ºó¶Ë´úÂë½âÎöÊôÐÔ£¬²¢µ÷ÓÃÒ»¸öÓ¦Ó÷þÎñÆ÷ API À´²¿ÊðËü¡£ÈçÇåµ¥ 7 ÖÐËùʾ£¬²ÎÊý deploymentInstruction_attrs ÊǸù¾ÝÇåµ¥ 6 ÖеÄÊôÐÔÉú³ÉµÄ¡£
Çåµ¥ 7. deploymentInstruction_attrs µÄʾÀýÖµ
[ -operation update -contents
sample_rest_ear.ear -installed.ear.destination
$(APP_INSTALL_ROOT)/cell1 -distributeApp
-MapModulesToServers [[sample_test_rest sample_test_rest.war,WEB-INF/web.xml
WebSphere:cell=cell1,cluster=ClusterA+WebSphere:cell=cell1, node=ihsnode1,server=ihsserver1 ]
[sample_test_ejb sample_test_ejb.jar META-INF/ejb-jar.xml
WebSphere:cell=cell1,cluster=ClusterA]]]
|
Çåµ¥ 8 ÏÔʾÁËÈçºÎµ÷ÓÃÓ¦Ó÷þÎñÆ÷ API À´Ö´ÐÐÒ»´Î¿ÉÖØ¸´µÄ°²×°¡£
Çåµ¥ 8. µ÷ÓÃÓ¦Ó÷þÎñÆ÷ API À´Ö´ÐпÉÖØ¸´°²×°µÄʾÀý½Å±¾
if (exist == "true"):
# ÏÖÓÐÓ¦ÓÃÒѾÕÒµ½ AdminApp.update(appNametrim,
'app',
deploymentInstruction_attrs)
else: # Existing application not found.
AdminApp.install(earFile, deploymentInstruction_attrs)
#endIf
|
AdminApp ÌṩÁ˺¯Êý update()¡¢install() ºÍ uninstall() À´ÅäÖà EAR ²¿Êð¡£Ê¹Óà update º¯Êý¶ø·Ç delete º¯Êý£¬ÒԱ㷴¸´²¿ÊðÓ¦ÓóÌÐò¡£
ÆóÒµÓ¦ÓóÌÐò×ÊÔ´
²¿ÊðÓ¦ÓóÌÐò×ÊÔ´µÄÅäÖÃÀàËÆÓÚ²¿ÊðÓ¦ÓõÄÅäÖá£Ê¹Óà update º¯Êý¶ø·Ç delete ºÍ re-create º¯Êý£¬ÒÔ±ÜÃⶪʧÅäÖÃÖеÄÈÎÒâ×Ô¶¨ÒåÉèÖá£ÒòΪӦÓÃ×ÊÔ´µÄ²¿Êð°üº¬×ÊÔ´Ö®¼äµÄ¹ØÏµ£¬ËùÒÔ¿ÉÒÔʹÓÃÒ»¸öÓë Java ÖÐÀ¬»øÊÕ¼¯·½·¨ÀàËÆµÄ·½·¨À´Î¬»¤ÕâЩ¹ØÏµ¡£
Çåµ¥ 9 ÏÔʾÁËÓ¦Ó÷þÎñÆ÷µ÷¶È³ÌÐò schedulerA µÄʾÀý²¿ÊðÃèÊö·ûÊôÐÔ£¬ÕâÒ»µãÔÚ ×ÊÔ´¸üеÄÎÊÌâ ²¿·ÖÖÐÒѾÌá¼°¡£Ñ¡ÔñÊÇ·ñÒª´´½¨Ïà¹ØµÄÊý¾Ý¿â±í¡£Èç¹ûÑ¡Ôñ´´½¨Ïà¹Ø±í£¬Ó¦Ó÷þÎñÆ÷¾Í»áʹÓÃÊý¾ÝÔ´¶¨ÒåµÄģʽ£¨ÔÚ±¾ÀýÖÐΪ jdbc/ds£©ºÍǰ׺£¨ÔÚ±¾ÀýÖÐΪ testA£©Éú³ÉÊý¾Ý¿â±í¡£
Çåµ¥ 9. ÃèÊöµ÷¶È³ÌÐò²¿ÊðµÄʾÀýÊôÐÔÎļþ
scheduler.0.name=schedulerA
scheduler.0.jndiname=test/schedulerA
scheduler.0.description=Scheduler for Task A
scheduler.0.datasourceJNDIName=jdbc/ds
scheduler.0.datasourceAlias=dbuser
scheduler.0.workManagerInfoJNDIName=wm/default
scheduler.0.tablePrefix=testA_ scheduler.0.createTables=true
scheduler.0.target.cluster=~{PORTAL_CLUSTER_NAME}
|
ʹÓà DBUSR Óëǰ׺ TESTA_ ´´½¨µÄÏà¹Ø±íÈçͼ 2 ÖÐËùʾ¡£
ͼ 2. ÒÑ´´½¨±íµÄÁбí
Ö»Òªµ÷¶È³ÌÐò±íµÄǰ׺»òÊý¾ÝÔ´ÒýÓ÷¢Éú±ä»¯£¬¾ÍÐèÒªÔÚ´´½¨Ð±í֮ǰ»ØÊÕ±»ÒýÓÃµÄ±í¡£Îª´Ë£¬¿ÉÒÔʹÓÃÀàËÆÓÚÇåµ¥ 10 µÄ²¿ÊðÃèÊö·û¡£
Çåµ¥ 10. µ÷ÓÃÓ¦Ó÷þÎñÆ÷ API Ö´ÐпÉÖØ¸´µÄµ÷¶È³ÌÐò°²×°µÄʾÀý½Å±¾
if (existScheduler):
if (createTables):
#drop existing old tables if new tables required
cellNameStr = 'cell=' + getCellName()
nodeNameStr = 'node=' + getNodeName()
Scheduler_Config_Helper_str = AdminControl.completeObjectName
('WebSphere:name=Scheduler_Config_Helper,process=dmgr,platform=dynamicproxy,' + nodeNameStr + ',
type=WASSchedulerCfgHelper,mbeanIdentifier=Scheduler_Config_Helper,' + cellNameStr + ',*')
AdminControl.invoke(Scheduler_Config_Helper_str, 'dropTables', scheduler, '[java.lang.String]')
#endIf
AdminConfig.modify(scheduler, deploymentInstruction_attrs)
#endIf
else:
attrs.append(["name", name])
scheduler = AdminConfig.create("SchedulerConfiguration", schedulerProvider,
deploymentInstruction_attrs)
#endIf
|
Êý¾Ý¿â
Êý¾Ý¿âÅäÖÃÊdzÖÐø½»¸¶ÖÐÐèÒª´¦ÀíµÄ×Ôӵķ½Ã档Ƶ·±µÄÊý¾Ý¿âÅäÖñä¸üºÍ´úÂë¸üлáÈð²×°¹ý³Ì±äµÃÈÝÒ׳ö´í¡£¿¼ÂÇÒÔÏÂÀý×Ó£¬ËüÏÔʾÁ˵±Êý¾Ý¿â±ä¸ü±»´«²¥µ½²âÊÔ»òÉú²ú»·¾³ÖÐʱ³öÏֵĴíÎó¡£
´íÎó 1£º´´½¨±í´íÎó
ÔÚ´«Í³µÄ°²×°³ÌÐòÖУ¬Ã¿Ìõ SQL Ö¸ÁîÖ»»áÔËÐÐÒ»´Î¡£µ«ÔÚ³ÖÐø½»¸¶µÄÇé¿öÏ£¬SQL Ö¸Áî¿ÉÄÜ»áÖØ¸´ÔËÐУ¬ÒÔ±ãÊÊӦÿÔ¡¢Ã¿ÖÜ»òÿÌìµÄ½»¸¶¡£ÔÚÇåµ¥ 11 ÖУ¬ÒòΪ½Å±¾²»ÊÊÓ¦ÖØ¸´ÔËÐжøµ¼ÖÂ±í´´½¨Ê§°Ü¡£Äú¿ÉÒÔºöÂÔÕâÀà´íÎó¡£
Çåµ¥ 11. ±í´´½¨´íÎóʾÀý
CREATE TABLE SAMPLE.TEST_TAB
( COLA INTEGER NOT NULL,
COLB VARCHAR(200) NOT NULL UNIQUE ) ;
SQL failed with: The name of the object to be created is identical to the existing name
"SAMPLE.TEST_TAB" of type "TABLE".. SQLCODE=-601, SQLSTATE=42710, DRIVER=3.64.106
|
´íÎó 2£ºÐ޸ıí´íÎó
Ð޸ıíʱ»áÓöµ½Óë´íÎó 1 ÖÐÀàËÆµÄÇé¿ö¡£Èç¹ûɾ³ý´úÂëÔËÐжà´Î¾Í»áʧ°Ü£¬ÈçÇåµ¥ 12 ÖÐËùʾ¡£µ«Óë´íÎó 1 ²»Í¬£¬Äú²»ÄܺöÂÔÕâÖÖ´íÎó£¬ÒòΪÆäÓàÕë¶Ô COL_C µÄ´úÂ뽫ÎÞ·¨ÔËÐС£
Çåµ¥ 12. Ð޸ıí´íÎóʾÀý
ALTER TABLE SAMPLE.TEST_TAB
DROP COLUMN COL_B
ADD COLUMN COL_C INTEGER;
SQL failed with: Column, attribute, or period "COL_B" is not defined in
"SAMPLE.TEST_TAB"..SQLCODE=-205,SQLSTATE=42703, DRIVER=3.64.106
|
´íÎó 3£ºÊý¾Ý´íÎó
¼ÙÉè COL_A ÒѾ±»ÉèÖÃΪ TEST_TAB ÖеÄÖ÷¼ü¡£Ç°ÃæµÄ SQL ʹÓÃÈçÇåµ¥ 13 ÖÐËùʾµÄ SQL Ö¸ÁîÔÚÊý¾Ý¿âÖвåÈëÁËÊý¾Ý¡£
Çåµ¥ 13. Ç°Ãæ½»¸¶ÖÐÖ´ÐÐµÄ SQL
INSERT INTO SAMPLE.TEST_TAB (COL_A, COL_B) VALUES ('max_number_to_display', '20');
|
µ±ÒµÎñÂß¼±ä¸üʱ£¬ÒªÇó»áËæÖ®±ä»¯£¬¶ø SQL Ö¸ÁîÒ²»á±»¸üУ¬ÈçÇåµ¥ 14 ÖÐËùʾ¡£
Çåµ¥ 14. µ±Ç°½»¸¶ÖÐÒѸüÐ嵀 SQL
INSERT INTO SAMPLE.TEST_TAB (COL_A, COL_B) VALUES ('max_number_to_display', '40');;
DB2 SQL error: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1;SAMPLE.TEST_TAB, DRIVER=4.12.55
|
ÕâÖÖ¸ü¸Ä¶ÔÓÚ´«Í³°²×°³ÌÐòÍêȫûÎÊÌ⣬µ«ÔÚ³ÖÐø½»¸¶ÖÐÊÇÎÞЧµÄ£¬ÒòÎªÇ°ÃæµÄ´úÂëÒѾ²¿ÊðÔÚÇ°ÃæµÄ½»¸¶ÖС£
ÕâЩ´íÎóʾÀýÏÔʾÁËÔÚÕë¶Ô³ÖÐø½»¸¶²¿ÊðµÄÊý¾Ý¿âÅäÖùý³ÌÖÐʵÏÖ°²×°¿ÉÖØ¸´ÐԵıØÒªÐÔ¡£ÓÃÓÚ³ÖÐø½»¸¶²¿ÊðµÄ°²×°³ÌÐò±ØÐëÌṩ¸ü¸ßµÄ¿ÉÖØ¸´ÐÔ¡£Ó¦ÓÃÒÔÏÂģʽÀ´ÊµÏÖÊý¾Ý¿âÅäÖõݲװ¿ÉÖØ¸´ÐÔ¡£
ģʽ A£ºÈà SQL ½Å±¾±äµÃ°²È«ÒÔ±ã¶à´ÎÔËÐÐ
ΪÁË·ÀÖ¹ÀàËÆÓÚ ´íÎó 2 µÄ´íÎ󣬲¢È·±£½Å±¾ÔËÐжà´Îʱ SQL ½Å±¾µÄÕýÈ·ÐÔ£¬½ûÖ¹·ÃÎÊÒѱ»Ö±½Ó¸üеÄÏÖÓÐ SQL Óï¾ä¡£
±ÜÃâÔÚ´úÂ뿪·¢Óë´úÂëÆÀÉóÆÚ¼äÖ±½Ó¸üРSQL ½Å±¾¡£Ïà·´Òª½»¸¶´úÂë±ä¸ü¸øÏÖÓÐÅäÖã¨ÎÞÂÛ±ä¸üÊÇÕë¶ÔÏÖÓбí½á¹¹»¹ÊÇÏÖÓÐÊý¾Ý£©£¬¾ßÌå·½·¨Êǽ«¸ü¸Ä»®·ÖΪ¸üСµÄµ¥Ôª£¬È»ºó½«´úÂëÆ¬¶Î¸½¼Óµ½ÏÖÓнű¾µÄĩβ¡£ÎªÁ˱ÜÃâÀàËÆÓÚ ´íÎó 2 µÄ´íÎó£¬Ê¹ÓÃÇåµ¥ 15 ÖÐµÄ SQL ½Å±¾¡£Õâ¸ö½Å±¾È·±£µ±½Å±¾ÔËÐжà´Îʱ£¬¿É³É¹¦½«´úÂëÌí¼Ó COL_C¡£
Çåµ¥ 15. ¾¹ýÓÅ»¯µÄÐ޸ıí½Å±¾
ALTER TABLE SAMPLE.TEST_TAB
DROP COLUMN COL_B; ALTER TABLE SAMPLE.TEST_TAB
ADD COLUMN COL_C INTEGER;
|
ģʽ B£ºÓ¦ÓÃÑ¡ÔñÐԵݲװÑéÖ¤
ÑéÖ¤´«Í³°²×°Ê±£¬°²×°ÑéÖ¤Æ÷»á¼ì²éÊý¾Ý¿â°²×°ÈÕÖ¾£¬²¢¼Ç¼¼ì²âµ½µÄËùÓÐ SQL ´íÎó¡£µ«ÔÚ³ÖÐø½»¸¶ÖУ¬SQL ½Å±¾¿ÉÒÔÔËÐжà´Î¡£±ÜÃâÿ¸ö SQL ´íÎ󼸺õÊDz»¿ÉÄܵġ£¹ýÂ˳ö²»ÖØÒªµÄ´íÎóºÍ¿ÉÒÔºöÂԵĴíÎ󣬱ÈÈ磺
1.´´½¨Öظ´µÄ±í¡¢ÁС¢Ä£Ê½¡¢¼üµÈ
2.ɾ³ý²»´æÔڵĶÔÏó
3.²åÈëÖØ¸´Êý¾Ý
Ñ¡ÔñÐÔÑéÖ¤¿ÉÒÔÈ·±£ÖØÒª´íÎóÊܵ½×î´óµÄ¹Ø×¢£¬²¢µÃµ½Õï¶ÏÓëÐÞ¸´¡£
ģʽ C£º¼ò»¯Óë¼ÓËÙ SQL ½Å±¾µÄÔËÐÐ
Ëæ×ÅÊý¾Ý¿âÏà¹Ø´úÂëµÄ³ÖÐøÌí¼Ó£¬°²×°³ÌÐò±äµÃÔ½À´Ô½´ó¡£Ó¦ÓÃÒÔϹý³Ì¿ÉÒÔÌá¸ß²¿ÊðµÄ³É¹¦ÂʺÍÐÔÄÜ¡£
- ¶¨ÆÚ¶Ô½Å±¾½øÐд浵¡£ ÀýÈ磬¼ÙÉèÿÔ½«´úÂë½»¸¶Éú²ú¡£½Å±¾¿ÉÒÔÿÔ½øÐд浵£¬Èçͼ 3 ÖÐËùʾ¡£
ͼ 3. ´æµµ½Å±¾µÄÎļþ½á¹¹
³ýÁËÎļþ¼ÐÖ®Í⣬content-spec_<time stamp> ¿ÉÓÃÓÚʶ±ðµ÷Óýű¾µÄÃüÁî¡£ÈçÇåµ¥ 16 ÖÐËùʾ£¬½Å±¾À´×ÔÓÚ content-spec_201311.xml Îļþ£¬Ëüµ÷ÓÃÁË November ´æµµÎļþ¼ÐÖеĽű¾¡£
Çåµ¥ 16. content-spec_201311.xml µÄÄÚÈÝ
<SYS command="db2 connect to DB" />
<SQL file="content/config/script/201311/delta_ update.ddl" />
<SQL file="content/config/script/201311/delta_sample_data_ update.ddl" />
<SYS command="db2 commit work;db2 CONNECT RESET;db2 TERMINATE;" />
|
- ½«Ê±¼ä´ÁÓ³Éäµ½´æµµÎļþ¡£ ½Å±¾´æµµºó£¬½¨Á¢Ò»¸ö×Ô¶¯·½·¨½«Ê±¼ä´ÁÓëÒÑ´æµµ¹¹¼þ½øÐÐÓ³É䣬±ÈÈçÇåµ¥ 17 ÖÐËùʾµÄÓ³ÉäÎļþ¡£ÔÚÇåµ¥ÖУ¬timestamp ²ÎÊý±íʾ½Å±¾´æµµÊ±µÄÌØ¶¨ÈÕÆÚ¡£¶Ô¸ÃÈÕÆÚËù×öµÄ´úÂë±ä¸ü°üº¬ÔÚ´æµµÎļþ¼ÐÄÚ¡£
Çåµ¥ 17. Ó³ÉäÎļþʾÀý
<buildHistory projectName="Sample_Project">
<build timestamp="20131130" folder="201311" />
<build timestamp="20131230" folder="201312" />
<build timestamp="20140130" folder="201401" />
<build timestamp="20140228" folder="201402" />
</buildHistory>
|
- ×Ô¶¯Éú³É½Å±¾¶ÓÁС£½«´æµµÎļþ¼ÐÓëʱ¼ä´ÁÓ³ÉäÖ®ºó£¬°²×°³ÌÐò»áÕûºÏÄ¿±ê½Å±¾²¢×Ô¶¯Éú³É½Å±¾Ö´ÐжÓÁС£Ê×ÏÈËü»á¼ì²âµ±Ç°µÄ¹¹½¨¼¶±ð£¬²¢½«¸Ã¹¹½¨¼¶±ðÓëÇåµ¥ 17 Öж¨ÒåµÄ timestamp ²ÎÊý½øÐбȽϡ£¶ÔÓÚʱ¼ä´Á±Èµ±Ç°¹¹½¨¼¶±ðÍíµÄÿһÏ¶¼»áÔËÐÐÓ³ÉäÎļþ¼ÐÖеĽű¾£¬ÈçÇåµ¥ 18 ÖÐËùʾ¡£
Çåµ¥ 18. ÕûºÏ½Å±¾ÒÔ¹ÜÀí´æµµµÄÊý¾Ý¿â½Å±¾
scriptLocation=$(cd -P -- "$(dirname -- "$0")" && pwd -P)|
# build level get from user's current environment
startVersion=$1
if [[ $startVersion == "" ]];
then $startVersion="00000000"
fi
# mapping file containing relationship between time stamp and archived
fname="$scriptLocation/buildHistory.xml"
exec<$fname while read line
do
if grep -q timestamp <<<$line;
then
timestamp=`echo $line | awk '{print $2}' | sed 's/timestamp=//' | sed 's/.\(.*\)/\1/' | \ sed 's/\(.*\)./\1/'`
if (( "$timestamp" > "$startVersion" ));then
folder=`echo $line | awk '{print $3}' | sed 's/folder=//' | sed 's/.\(.*\)/\1/' | \ sed 's/\(.*\)./\1/'`
FOLDERARRAY[$index]="$folder"
index=$(($index+1))
fi
fi
done
|
ÀýÈ磬Èç¹ûµ±Ç°Óû§»·¾³ÉϵĹ¹½¨¼¶±ðÊÇ 20140205£¬ÄÇôֻ»áµ÷ÓÃÔÚÎļþ¼Ð 201402 Öд浵µÄ½Å±¾£¬ÒòΪÎļþ¼ÐµÄÓ³Éäʱ¼ä´ÁΪ 20140228¡£¶ÔÓÚÆäËûÎļþ¼Ð£¬°²×°³ÌÐò¼ÙÉèËüÃÇÔÚʹÓù¹½¨¼¶±ð 20140205 ½øÐв¿ÊðÖ®ºóÒѾÔËÐС£ÕûºÏºóµÄ cont-spec Îļþ¿´ÆðÀ´ÀàËÆÓÚÇåµ¥ 19¡£Ëü°üº¬×îºóÒ»¸öÔµÄËùÓÐ delta ½Å±¾¡£
Çåµ¥ 19. ÓÉÕûºÏ½Å±¾Éú³ÉµÄ Delta ½Å±¾
<SYS command="db2 connect to DB" />
<SQL file="content/config/script/201311/delta_ update.ddl" />
<SQL file="content/config/script/201311/delta_sample_data_ update.ddl" />
<SQL file="content/config/script/201312/delta_ update.ddl" />
<SQL file="content/config/script/201401/delta_ update.ddl" / <SQL file="content/config/script/201401/delta_sample_data_ update.ddl" />
<SQL file="content/config/script/201402/delta_ update.ddl" />
<SYS command="db2 commit work;db2 CONNECT RESET;db2 TERMINATE;" />
|
|