基于jenkins結(jié)合git實(shí)現(xiàn)web程序的多服務(wù)器批量發(fā)布
由于前一段時(shí)間發(fā)布了幾篇關(guān)于web程序基于jenkins部署發(fā)布的博文,由于是基于svn作為版本庫講解的。這段時(shí)間有一些朋友問我git作為版本庫的與jenkins結(jié)合實(shí)現(xiàn)像選擇svn tag指定程序版本的實(shí)現(xiàn)發(fā)布程序的解決方案。
有與時(shí)間原因,本篇不在過多贅述細(xì)節(jié),讀者可以動手揣摩!
直接先給大家看一下我目前正在使用的部署到生產(chǎn)環(huán)境下的jenkins截圖!
下面給出配置截圖:
經(jīng)過測試git parameter plugin不能滿足我們的需求,所以我們只能自己在jenkins中創(chuàng)建tag list。添加寫一下如圖步驟:
自己寫一個可擴(kuò)展下拉菜單,通過程序生成指定git版本下的程序的tags列表
下面是程序的源碼管理,在git repositories url 中添加我們程序的git地址
下圖兩種方式都行:
注意我們這個時(shí)候選擇的是master版本,意味著我的程序都是穩(wěn)定版本(在開發(fā)過程中使用git-flow流程來控制版本開發(fā)流程)。
簽出到指定的tag:這一步很重要:
到此我們已經(jīng)實(shí)現(xiàn)了jenkins與git的集成結(jié)合!這也是前段時(shí)間發(fā)布的部署系列svn與git的不同之處!
jenkins下git的插件安裝網(wǎng)上很多這里不再介紹!
需要注意一點(diǎn)可以根據(jù)自己的需求開發(fā)出git tag list的功能!
下面給出我按照自己的需求實(shí)現(xiàn)的一個:
先給出程序結(jié)構(gòu)圖:
git.php
- 2345678910111213141516171819202122232425262728293031323334353637383940 <?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
- #!/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
- #!/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腳本:
如有不明白的地方,可以參考我的部署系列文章或線上交流!