±à¼ÍƼö: |
±¾ÎÄÀ´×Ô°¢ÀïÔÆ£¬±¾ÎĽ²µÄÊÇGitLab
×Ô¶¯´¥·¢ Jenkins ¹¹½¨£¬ GitLab Êǵ±Ç°Ó¦Ó÷dz£¹ã·ºµÄ Git
Hosting ¹¤¾ß£¬Ï£Íû¶ÔÄúµÄѧϰÓаïÖú¡£
|
|
GitLab Êǵ±Ç°Ó¦Ó÷dz£¹ã·ºµÄ Git Hosting ¹¤¾ß£¬Jenkins
ÊǷdz£Å£±ÆµÄ³ÖÐø¼¯³É¹¤¾ß¡£¾¡¹Ü GitLab ÓÐÄÚ½¨µÄ GitLab CI£¬µ«ËüԶûÓÐ Jenkins
ÄÇôǿ´óºÃÓá£Jenkins ºÍ GitLab ÔÚÁ½ÕߵĽáºÏÉÏ£¬¶¼ÌṩÁ˷dz£·½±ãµÄ¹¤¾ß¡£ÔÚÎÒÃÇÏò GitLab
push ´úÂ룬»òÖ´ÐÐÆäËüһЩ²Ù×÷ʱ£¬GitLab ¿ÉÒÔ½«ÕâЩʱ¼ä֪ͨ¸ø Jenkins£¬trigger
Jenkins ¹¤³ÌµÄ¹¹½¨×Ô¶¯Ö´ÐС£
ҪʵÏÖÔÚÏò GitLab push ´úÂëʱ£¬×Ô¶¯ trigger Jenkins ¹¤³ÌÖ´Ðй¹½¨¶¯×÷£¬ÐèÒªÔÚ
GitLab ºÍ Jenkins µÄ¶à¸öµØ·½×öÅäÖãº(1)¡¢ÔÚ Jenkins Öа²×°²å¼þ£»(2)¡¢ÅäÖÃ
GitLab Óû§£»(3)¡¢ÅäÖà Jenkins ·þÎñÆ÷£»(4)¡¢ÅäÖà Jenkins ¹¤³Ì£»(5)¡¢ÅäÖÃ
GitLab ¹¤³Ì¡£ ÔÚ Jenkins Öа²×°²å¼þ
Ñ¡Ôñ ϵͳ¹ÜÀí -> ¹ÜÀí²å¼þ ´ò¿ª²å¼þ¹ÜÀíÒ²Ò³Ãæ£¬ÈçÏÂͼ£º

ÔÚ ¿ÉÑ¡²å¼þ ÖÐÑ¡Ôñ Gitlab Hook Plugin ºÍ GitLab Plugin µÈ²å¼þ£¬È»ºóµã»÷Ï·½µÄ
Ö±½Ó°²×° °´Å¥°²×°²å¼þ£º

´´½¨²âÊÔ¹¤³Ì
ΪÁ˱ãÓÚ²âÊÔ£¬ÕâÀï·Ö±ðÏÈÔÚ Jenkins ºÍ GitLab ÉÏ´´½¨²âÊÔ¹¤³Ì¡£ÔÚ Jenkins
Dashboard Ö÷Ò³µã»÷ н¨ÈÎÎñ£¬½øÈëн¨ÈÎÎñÒ³Ãæ£º

ÔÚÊäÈë¿òÖÐÊäÈ빤³ÌÃû£¬Ñ¡Ôñ ¹¹½¨Ò»¸ö×ÔÓÉ·ç¸ñµÄÈí¼þÏîÄ¿£¬È»ºóµã»÷×óÏÂ½ÇµÄ È·¶¨°´Å¥£¬½øÈ빤³ÌÅäÖÃÒ³Ãæ¡£
ÔÚ¹¤³ÌÅäÖÃÒ³ÃæµÄ Ô´Âë¹ÜÀí²¿·Ö£¬ÊäÈë GitLab repo µÄ URL£¬ÈçÏÂͼ£º

Èç¹ûÊÇ https ÐÎʽµÄ URL£¬¼ÇµÃÅäÖõǼ GitLab µÄÓû§ÃûºÍÃÜÂ룬ͨ¹ýµã»÷ Credentials
ÐÐ×îºóÃæµÄ Add -> Jenkins °´Å¥£¬ÔÚµ¯³öµÄÈç϶Ի°¿òÖÐÊäÈëÓû§ÃûºÍÃÜÂ룺

Add Ö®ºó£¬ÔÚ Credentials µÄÏÂÀ¿òÖÐÑ¡ÔñÕâ×éÓû§ÃûºÍÃÜÂ롣ûÓÐÌí¼Ó GitLab
µÄÓû§ÃÜÂëµÄ»°£¬Jenkins ±¨´í ¡ª¡ª ÎÞ·¨·ÃÎÊ repo£¬ÈçÏÂͼ£º

Ëæºóµã»÷×óÏÂ½ÇµÄ ±£´æ °´Å¥£¬Íê³É Jenkins ¹¤³ÌµÄ´´½¨£¬²¢½«ËüÓë GitLab µÄ¹¤³Ì¹ØÁªÆðÀ´¡£
ÅäÖà GitLab Óû§
´´½¨Ò»¸öÓû§»òÑ¡ÔñÒ»¸öÒÑÓÐÓû§£¬ÓÃÀ´Èà Jenkins ºÍ GitLab API ½»»¥¡£Õâ¸öÓû§½«ÐèÒªÊÇÈ«¾ÖµÄ¹ÜÀíÔ±»òÌí¼Ó½øÃ¿¸ö×飯¹¤³Ì£¬²¢×÷Ϊ³ÉÔ±¡£ÐèÒª¿ª·¢ÕßȨÏÞÀ´±¨¸æ¹¹½¨×´Ì¬¡£ÕâÊÇÓÉÓÚ£¬µ±Ê¹ÓÃÁË
¡®Merge when pipeline succeeds¡¯ ¹¦ÄÜʱ£¬³É¹¦µÄ¹¹½¨×´Ì¬¿ÉÒÔ´¥·¢ºÏ²¢¡£GitLab
Plugin µÄһЩ¹¦ÄÜ¿ÉÄÜÐèÒªÆäËüµÄһЩȨÏÞ¡£±ÈÈ磬ÓÐÒ»¸öÑ¡ÏîÓÃÓÚÔÚ¹¹½¨³É¹¦Ê±£¬½ÓÊÜ merge
request¡£Ê¹ÓÃÕâÒ»¹¦ÄÜÐèÒª developer£¬master »ò owner ¼¶µÄȨÏÞ¡£
Ñ¡Ôñ Settings -> Account£º

¿½±´ÆäÖÐµÄ Private token£¬ÉÔºóÔÚÅäÖà Jenkins ·þÎñÆ÷ʱ»áÓõ½¡£ ÅäÖà Jenkins
·þÎñÆ÷
ÐèÒªÅäÖà Jenkins ·þÎñÆ÷À´Óë GitLab ·þÎñÆ÷ͨÐÅ¡£
ÔÚ Jenkins ÖУ¬Ñ¡Ôñ ϵͳ¹ÜÀí -> ϵͳÉèÖã¬ÔÚϵͳÉèÖÃÖÐÕÒµ½ GitLab µÄ²¿·Ö£º

ÔÚ Connection name ºóµÄÊäÈë¿òÖÐÊäÈëÁ¬½ÓÃû³Æ£¬ÔÚ Gitlab host URL
ºóµÄÊäÈë¿òÖÐÊäÈë GitLab ·þÎñÆ÷µÄ URL µØÖ·¡£µã»÷ Credentials ÐÐ×îºóÃæµÄ Add
-> Jenkins °´Å¥£¬µ¯³öÈç϶Ի°¿ò£¬ÔÚ * Kind* ºóµÄÏÂÀÁбíÖÐÑ¡Ôñ GitLab
API token£¬²¢°ÑÉÏÒ»²½¿½±´µÄ Private token Õ³Ìùµ½ API token ºóÃæµÄÊäÈë¿òÖС£ËæºóÔÚ
Credentials µÄÏÂÀ¿òÖÐÑ¡Ôñ GitLab API token¡£ ÅäÖà Jenkins ¹¤³Ì
´ò¿ª Jenkins ¹¤³ÌµÄÅäÖÃÒ³Ãæ£¬ÕÒµ½ ¹¹½¨´¥·¢Æ÷ µÄ²¿·Ö£¬¹´Ñ¡ Build when a change
is pushed to GitLab ÄÇÒ»ÐУº

ÐèÒª¼ÇÏ Build when a change is pushed to GitLab ÄÇÒ»ÐÐÖУ¬GitLab
CI Service URL: ºóÃæµÄ URL£¬ºóÃæÔÚÅäÖà GitLab ¹¤³ÌʱÐèÒªÓõ½¡£
»¹Òªµã¿ªÓÒÏÂ½ÇµÄ ¸ß¼¶£º

Ëæºóµã»÷ÓÒÏÂ½ÇµÄ Generate °´Å¥£¬Éú³É Secret token£¬±£´æÕâÀïÉú³ÉµÄ Secret
token£¬ËüͬÑù½«ÓÃÓÚºóÃæ GitLab µÄÅäÖá£Ëæºóµã»÷×óÏÂ½ÇµÄ ±£´æ °´Å¥£¬±£´æÇ°ÃæËù×öµÄÅäÖá£
ÅäÖà GitLab ¹¤³Ì
´´½¨Ò»¸öеĻòÑ¡ÔñÒ»¸öÒÑÓÐµÄ GitLab ¹¤³Ì¡£È»ºóÑ¡Ôñ Settings -> * Integrations*£¬ÔÚ
URL Ò»À¸ÖÐÊäÈëÇ°Ãæ±£´æµÄ GitLab CI Service URL£¬ÔÚ Secret Token
Ò»À¸ÖÐÊäÈëÇ°Ãæ±£´æµÄ Secret token£¬È»ºóÑ¡ÔñÐèÒª trigger Jenkins ¹¤³ÌÖ´Ðй¹½¨µÄʼþ£º

µã»÷ÂÌÉ«µÄ Add webhook °´Å¥£¬Íê³É webhook µÄ´´½¨¡£
´´½¨ºÃÁË webhook Ö®ºó£¬µã»÷ Test ÏÂÀ¿òÖÐµÄ Push events£¬ÈçÏÂͼ£º

¿ÉÒÔÊÖ¶¯²úÉúʼþ£¬´¥·¢ Jenkins ¹¤³Ì¡£µã»÷ Edit£¬ÔÚ webhook µÄ±à¼Ò³Ã棬Àµ½Ò³Ãæµ×²¿£¬»¹¿ÉÒÔ¿´µ½£¬¸Ã
webhook ×î½üµÄµ÷ÓÃÇé¿ö£¬ÈçÏÂͼ£º

µã¿ªÌض¨µ÷ÓÃµÄ View details£¬»¹¿ÉÒÔ¿´µ½Õâ´Îµ÷ÓõÄÏêϸÇé¿ö£¬ÈçÏÂͼ£º

Óɴ˲»ÄÑÀí½â£¬GitLab trigger Jenkins ¹¤³Ì£¬Ö÷ÒªÊÇͨ¹ýÏò Jenkins ·þÎñÆ÷·¢ËÍÒ»¸ö
POST ÇëÇóʵÏֵġ£ ÑéÖ¤²âÊÔ
ÐÞ¸ÄÎÒÃÇµÄ GitLab ²âÊÔ¹¤³ÌÖеÄÎļþ£¬²¢ push µ½ GitLab ·þÎñÆ÷ÉÏ£º
?
test_for_gerrit git:(master) echo "Hello,
world" >> read2.md
? test_for_gerrit git:(master) ? git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to
update what will be committed)
(use "git checkout -- <file>..."
to discard changes in working directory)
modified: read2.md
no changes added to commit (use "git add"
and/or "git commit -a")
? test_for_gerrit git:(master) ? git add .
? test_for_gerrit git:(master) ? git commit
-m "Add test data."
? test_for_gerrit git:(master) git push
warning: push.default is unset; its implicit
value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch
this message
and maintain the traditional behavior, use:
git config --global push.default matching
To squelch this message and adopt the new behavior
now, use:
git config --global push.default simple
When push.default is set to 'matching', git
will push local branches
to the remote branches that already exist with
the same name.
Since Git 2.0, Git defaults to the more conservative
'simple'
behavior, which only pushes the current branch
to the corresponding
remote branch that 'git pull' uses to update
the current branch.
See 'git help config' and search for 'push.default'
for further information.
(the 'simple' mode was introduced in Git 1.7.11.
Use the similar mode
'current' instead of 'simple' if you sometimes
use older versions of Git)
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 312 bytes | 0 bytes/s,
done.
Total 3 (delta 1), reused 0 (delta 0)
To ssh://git@g.hz.netease.com:22222/cloudgame/test_for_gerrit.git
23660c1..e86152a master -> master
? test_for_gerrit git:(master) |
ËæºóѸËٵؾÍÄÜÔÚ Jenkins ÖУ¬²âÊÔ¹¤³ÌÖ÷Ò³ÃæµÄ×óÏ·½£¬¿´µ½ÓÉ GitLab push Ëù trigger
ÆðÀ´µÄ¹¹½¨ÈÎÎñ£º

ÔÚÓÉ GitLab push Ëù trigger ÆðÀ´µÄ¹¹½¨ÈÎÎñµÄÏ·½£¬»áÏÔʾ¹¹½¨ÈÎÎñÊÇÓÉË push
µÄ´úÂëËù trigger ÆðÀ´µÄ¡£´ò¿ªÌض¨¹¹½¨ÈÎÎñµÄ ¿ØÖÆÌ¨Êä³ö ¿ÉÒÔ¿´µ½¹¹½¨µÄÏêϸ¹ý³Ì£º

|