由于前一段時間發(fā)布了幾篇關(guān)于web程序基于jenkins部署發(fā)布的博文,由于是基于svn作為版本庫講解的。這段時間有一些朋友問我git作為版本庫的與jenkins結(jié)合實現(xiàn)像選擇svn tag指定程序版本的實現(xiàn)發(fā)布程序的解決方案。
有與時間原因,本篇不在過多贅述細(xì)節(jié),讀者可以動手揣摩!
直接先給大家看一下我目前正在使用的部署到生產(chǎn)環(huán)境下的jenkins截圖!
下面給出配置截圖:
經(jīng)過測試git parameter plugin不能滿足我們的需求,所以我們只能自己在jenkins中創(chuàng)建tag list。添加寫一下如圖步驟:
自己寫一個可擴展下拉菜單,通過程序生成指定git版本下的程序的tags列表
下面是程序的源碼管理,在git repositories url 中添加我們程序的git地址
下圖兩種方式都行:
注意我們這個時候選擇的是master版本,意味著我的程序都是穩(wěn)定版本(在開發(fā)過程中使用git-flow流程來控制版本開發(fā)流程)。
簽出到指定的tag:這一步很重要:
到此我們已經(jīng)實現(xiàn)了jenkins與git的集成結(jié)合!這也是前段時間發(fā)布的部署系列svn與git的不同之處!
jenkins下git的插件安裝網(wǎng)上很多這里不再介紹!
需要注意一點可以根據(jù)自己的需求開發(fā)出git tag list的功能!
下面給出我按照自己的需求實現(xiàn)的一個:
先給出程序結(jié)構(gòu)圖:
git.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?php $giturl = $_REQUEST [ "giturl" ]; $arr = explode ( "/" , $giturl ); $names = $arr [ count ( $arr )-1]; $namearr = explode ( "." , $names ); $name = $namearr [0]; $rebuild =true; $tagpath = "/var/www/tags/list/$name" ; if ( file_exists ( $tagpath )) { $content = file_get_contents ( $tagpath ); $tags = explode ( "\n" , $content ); //unlink($tagpath); unset( $tags [ count ( $tags )-1]); if ( count ( $tags )>0) { $tags = array_reverse ( $tags ); echo "tags=" .implode( "," , $tags ); } else { echo "tags= no tags" ; } $ctime = filectime ( $tagpath ); $now =time(); $ti = $now - $ctime ; if ( $ti <60) { $rebuild =false; } } else { echo "tags= Is loading tags ; please try again later" ; } if ( $rebuild ) { $cmd = "echo $name $giturl > /var/www/tags/info/$name" ; exec ( $cmd , $info , $rebt ); } ?> |
inotify.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash #create by lhb #date 2014-02-08 #monitor file change workplace= /var/www/tags src=$workplace /info/ lists=$workplace /list /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' -- format '%T %w%f %e' -e close_write $src \ | while read file do fn=` echo $ file | awk '{print $3}' ` arr=(` cat $fn | awk '{print $1,$2}' `) pro_name=${arr[0]} pro_url=${arr[1]} #echo $pro_name #echo $pro_url /bin/bash $workplace /get_tags .sh $pro_name $pro_url > $lists/$pro_name chown www-data:www-data $lists/$pro_name echo $? done |
get_tags.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/bash #create by lhb #date 2014-02-08 #get git code tag list codepath= /tmp/ $1 [ -d "$codepath" ] || { cd /tmp/ /usr/bin/git clone $2 &> /dev/null } cd $codepath /usr/bin/git pull &> /dev/null /usr/bin/git tag rm -rf $codepath |
執(zhí)行shell腳本:
如有不明白的地方,可以參考我的部署系列文章或線上交流!
本文出自 “宅鳥樂園” 博客,請務(wù)必保留此出處http://birdinroom.blog.51cto.com/7740375/1404930