当前位置: 代码迷 >> Web前端 >> webistrano 三 task 代码
  详细解决方案

webistrano 三 task 代码

热度:862   发布时间:2012-07-15 20:11:39.0
webistrano 3 task 代码

:agit_up_tag_nocheck, ? ........................................ 不检查
:agit_up_tag_parallel_Maxall_nocheck_rollback .......?多服务器并行(不是一台一台串行执行) ?主要想回滚时快速
:agit_up_tag,
:a_git_up_tag_OR_restart, ?.................................... 部署和重启都有的task (tag 为 ?re ?则 ?重启)
:agit_up_tag_cmdb,.
:gitinit_gettag, ? ....................................................?更新tag 已经合并到了 部署task里面
:z_gitinit_gettag_nocheck, .....................................?更新tag但是不检查
:all_ReStart_java_sc_iis, ? ......................................只是重启 ? (会自动化根据路径重启java或sc 或iis(回收所有应用池))
:z_jbosscmd_gen, .................................................重新生成jboss 脚本
:z_tomcat_nohup,...................................................重新生成tomcat ?nohup ?脚本
:luxstop_serv,
:luxstart_serv,
:zz_luxrestart_serv,
:luxstatus_serv,
:z_custom_test, ...................................................?自定义脚本运行 ??
:z_outip, ?
:backup_gitpath ?................................................... 备份?
:z_mq, ..................................................................?检查mq
:z_dns,?
:zz_iisrecycle_start_Pool,
:z_check_app_version ...........................................?检查版本
:z_git_reset__hard,
:winstartservice,
:winstopservice,
:zz_winServiceRestart,
:y_sc_old_getconfig, .................................................?服务迁移获取已有配置?
:y_sc_new_createsc,................................................. 新服务器上创建服务 ?服务迁移
:z_Git_Ip_Init_Push_ProdToGitServ, ? ..........................新应用初始化时将生产内容推送到git server
:z_Git_Ip_InitGetGitDir_fromGitserver,......................... 新应用初始化时将生产已经推送到git server的内容获取到本地并设置git ?? 详细参考下面以前的说明
:z_iisinfo, ?................................................................ 获取iis 信息

?

?

?






??????? begin
?????????????? puts "#{su_user}"
??????? rescue => error? then
????????????? su_user_real="#{user}";puts "su user is user #{user}"
??????? else
???????????? su_user_real="#{su_user}";puts "su user is su_user #{su_user}"
??????? end







def getsccmd(scnames,stoporstart)

??????? @scstopcmd="";@scstartcmd="";@scquerycmd="";@stoptime="";@starttime="";@scquerycmdstart=""

??????? scnames.each do |scname|
??????????????? @scstopcmd=@scstopcmd+ " echo #{scname} ; sc stop?? #{scname} |grep STATE; "
??????????????? @scstartcmd=@scstartcmd+" echo #{scname} ; sc start? #{scname} |grep STATE; "


??????????????? scok="if [[ `sc query #{scname}|grep STATE|awk \'{print $4}\'` = STOPPED ]] ;then scok=failedstoped;fi;"
??????????????? @scquerycmd=@scquerycmd? +??????? " echo #{scname} ; sc query? #{scname} |grep STATE;? sc qc #{scname} |grep START_TYPE ; "
??????????????? @scquerycmdstart=@scquerycmdstart+" echo #{scname} ; sc query? #{scname} |grep STATE;? sc qc #{scname} |grep START_TYPE ; " +scok


??????????????? @stoptime =@stoptime + "while [[ `sc query #{scname}|grep STATE|awk \'{print $4}\'` = STOP_PENDING ]] ;do ping 127.0.0.1 -n 4? >> /dev/null &&? echo stoping? ;done;"
??????????????? @starttime =@starttime + "while [[ `sc query #{scname}|grep STATE|awk \'{print $4}\'` = START_PENDING ]] ;do ping 127.0.0.1 -n 4 >> /dev/null && echo starting ;done;"
??????? end


??????? detectsc="if [[ $scok == failedstoped ]];then echo -------- sc FAILED!!!!!!!!!!!NO!NO!!!!!!!!!!!!!!!!!!--maybe sc forbid so not start ;else echo -------- sc startok! ---------;fi;"

??????? @scstopall=@scstopcmd+@stoptime+@scquerycmd
??????? @scstartall=@scstartcmd+@starttime+@scquerycmdstart+detectsc


??????? if stoporstart == "start"
??????? then
??????????????? return @scstartall
??????? else
??????????????? return @scstopall
??????? end
end




begin
?????? puts "#{servicename}"
rescue => error? then
????? @scstop="echo there no win service;";
????? @scstart="echo there no win service;";
else
??????? scnames=servicename.split
??????? @scstop=getsccmd(scnames,"stop")
??????? @scstart=getsccmd(scnames,"start")
end







@iisstartpoolcmd00="cscript.exe \"c:\\Inetpub\\AdminScripts\\adsutil.vbs\"?? ENUM /P W3SVC/AppPools|grep W3SVC|cut -d[ -f2|cut -d] -f1|xargs -I {} cscript? \"C:\\Inetpub\\AdminScripts\\adsutil.vbs\"? START_SERVER? {}|grep -v Microsoft;"
@iisrecypoolcmd00="cscript.exe \"c:\\Inetpub\\AdminScripts\\adsutil.vbs\"?? ENUM /P W3SVC/AppPools|grep W3SVC|cut -d/ -f 4|cut -d] -f 1|xargs -I {}? cscript //Nologo \"C:\\windows\\system32\\iisapp.vbs\"? /a? {} /r;"
@recyclepool=@iisrecypoolcmd00+@iisstartpoolcmd00+@iisrecypoolcmd00+@iisstartpoolcmd00






??????? begin
?????????????? puts "#{appserver_cmd}"
??????? rescue => error? then
????????????? @appserverrealcmdrestart="echo there no appserver_cmd;";
??????????????? @appserverrealcmdstop="echo there no appserver_cmd;";
??????? else
??????????????? appserverrealcmdstart="su - #{su_user_real}? -c? \"#{appserver_cmd}??? start\";echo;echo -;"
??????????????? @appserverrealcmdstop="su - #{su_user_real}? -c? \"#{appserver_cmd}??? stop\";echo -;"
??????????????? appserverrealcmdstatus="su - #{su_user_real}? -c? \"#{appserver_cmd}??? status\";"
??????????????? @appserverrealcmdrestart=@appserverrealcmdstop + appserverrealcmdstart + appserverrealcmdstatus
??????? end



begin
?????? puts "#{git_repopath}"
rescue => error? then
????? @git_repopath2="echo no?? git_repopath??? var;exit 1;??? ";
else
??????? @git_repopath2="?? git remote add origin git://#{git_server}#{git_repopath} ;"
end









def getgitcmd(git_path,tag_name)
??????? @ifneedbak="if [[? `git status|wc -l` = 2 ]];then echo -----noUntrackedFile nobak;else echo -----have UntrackedFile baking &&tar -czf? #{git_path}.`date +%Y.%m.%d-%H.%M.%S`.tgz #{git_path}&&ls --full-time -sh #{git_path}.`date +%Y.%m.%d`*;fi;"
??????? gitstatDirls="ls -a;git status;echo ------------------------------;"
??????? git_cmd0="git clean -f -d;git reset --hard;git fetch ;git fetch -t ;git reset --merge #{tag_name};"
??????? ifappdir="if (( `ls -la|wc -l` < 5? ));then echo -----no app dir-----&&echo&&echo&&ls -la&&echo&&echo&&exit 7;else echo appdir ok; fi;"
??????? gitdircheck=" if [[ -d #{git_path}? ]];then echo git_path ok;else???????? if [ ! -d #{git_path} ]; then mkdir -p #{git_path} && ls -lhrt #{git_path}; fi; if [ ! -d #{git_path}/.git ]; then cd #{git_path} && pwd && ls -a && git init ;? #{@git_repopath2}??? git remote -v && ls -a && git status; fi;????????? fi; cd #{git_path};"
??????? git_cmd1= gitdircheck + " beforels=`ls -la |wc -l`; #{@ifneedbak}? #{gitstatDirls}? #{git_cmd0} #{gitstatDirls}? #{git_cmd0} #{gitstatDirls}? afterls=`ls -la |wc -l`;" + ifappdir
??????? return git_cmd1
end





def git_up_tagcmd()
??????????? _git_cmd=getgitcmd(git_path,tag_name)
??????? if webistrano_project !~ /allpreverificationconfirm/? && tag_name =~ /pre_/i
??????????? then capcmd="echo !!pre tag should not to production!!;exit 4;"
??????? else
??????????? if webistrano_stage =~ /gbk/i then
??????????????? gitcmd="pwd;export LANG=zh_CN.GBK;#{_git_cmd}"
??????????? else
??????????????? gitcmd= _git_cmd
??????????? end
??????????? if git_path !~ /\/cygdrive\// then
??????????????? capcmd=gitcmd + @appserverrealcmdrestart
??????????? else
?????????????????? if git_path =~ /website/i? then
?????????????????????? capcmd=" #{gitcmd}?? #{@recyclepool}"
?????????????????? else
?????????????????????? capcmd="#{@scstop}? #{gitcmd}? #{@scstart}"
?????????????????? end
??????????? end
??????? end
??????? return? capcmd
end




def checktagcmd(git_path)
??????? echocmd="cd #{git_path};? echo;echo;echo;echo;"
??????? gettagcmdis="nowtagsha=`git reset --hard|awk \'{print $5}\'`;nowtag=`git show-ref|grep $nowtagsha|grep tags|awk -F/ \'{print $3}\' `;"
??????? contraststatis="echo -? To-? tag is ------: #{tag_name};echo - now tag is ------: $nowtag; echo `date` ; echo update before ls -a line : $beforels;echo update after-? ls -a line : $afterls ; "
??????? detectsuccessorfailed="if? [[ #{tag_name} = $nowtag ]];then echo deploy ok!!! ; else echo --!!!tag ERROR!look for yuzhifu wangdawei!!&&echo&&echo&&exit 5;fi;"
??????? detectsc="if [[ $scok == failedstoped ]];then echo -------- sc failed!! ---------maybe sc forbid so no exit;else echo -------- sc startok! ---------;fi;"
??????? checktagcmdreturn= echocmd +?? gettagcmdis? + contraststatis? +??????? echocmd +??? detectsuccessorfailed + detectsc? + echocmd
??????? return checktagcmdreturn
end





??????? begin
?????????????? puts "#{checkurl}"
??????? rescue => error? then
????????????? checkurlcmd="echo no checkurl var define"
??????? else
????????????? checkurlcmd="httpline=`curl -s --head #{checkurl} | grep HTTP`;echo $httpline;retcode=`echo $httpline|awk \'{print $2}\'`;if [[ $retcode == 200 || $retcode == 302 ]];then echo&&echo !!application initial sucess;else #{@appserverrealcmdstop} #{@scstop} echo&&echo !!application ERROR&&echo result is $httpline&&echo&&exit 1;fi;"
??????? end




??? task :agit_up_tag_nocheck, :max_hosts=>1 do
??????? run git_up_tagcmd()
??? end


??? task :agit_up_tag_parallel_Maxall_nocheck_rollback?? do
??????? run git_up_tagcmd()
??? end


??? task :agit_up_tag, :max_hosts=>1 do
??????? run?? git_up_tagcmd() + checktagcmd(git_path) + checkurlcmd
??? end


??? task :a_git_up_tag_OR_restart, :max_hosts=>1 do
??????? if tag_name != "re"
??????? then? agit_up_tag
??????? else? all_ReStart_java_sc_iis
??????? end
??? end


??? desc "cmdb git up tag"
??? task :agit_up_tag_cmdb, :roles => :single do
????? version = tag_name
????? svrs = find_servers :roles => :app
????? servers = svrs.join(",")
????? deploy_unit_code = ""
????? if version =~ /(zf\d+)/
??????? deploy_unit_code = $1
????? end
????? deploy_to = git_path
????? puts "version=#{version}, servers=#{servers}, deploy_dir=#{deploy_to}"

????? CmdbService.do_deploy_with_server(cse_base, deploy_unit_code, deploy_stage, version.strip, servers, deploy_to) do
??????? agit_up_tag
????? end
??? end



? desc "default cmds : linux init git and git-tag"
??? task :z_gitinit_gettag_nocheck, :max_hosts=>1 do
???????? _git_cmd=getgitcmd(git_path,tag_name)
??????? run "if [ ! -d #{git_path} ]; then mkdir -p #{git_path} && ls -lhrt #{git_path}; fi"
??????? run "if [ ! -d #{git_path}/.git ]; then cd #{git_path} && pwd && ls -a && git init && git remote add origin git://#{git_server}#{git_repopath} &&? git remote -v && ls -a && git status; fi"
??????? run %{
??????????? #{_git_cmd}
???????? }
?? end


@mq="ruby?? /cygdrive/c/tools/NSClient++/scripts/msmq.rb|unix2dos;echo ;sleep 2; ruby?? /cygdrive/c/tools/NSClient++/scripts/msmq.rb|unix2dos;echo ;sleep 2;? ruby?? /cygdrive/c/tools/NSClient++/scripts/msmq.rb|unix2dos;echo ;sleep 2;???? ruby?? /cygdrive/c/tools/NSClient++/scripts/msmq.rb|unix2dos;echo ;sleep 2;? ruby?? /cygdrive/c/tools/NSClient++/scripts/msmq.rb|unix2dos;echo ;sleep 2;? ruby?? /cygdrive/c/tools/NSClient++/scripts/msmq.rb|unix2dos;echo ;sleep 0.2; "



??? task :all_ReStart_java_sc_iis, :max_hosts=>1 do
??????????? if git_path !~ /\/cygdrive\// then
??????????????? reScmd= @appserverrealcmdrestart
??????????? else
?????????????????? if git_path =~ /website/i? then
?????????????????????? reScmd="? #{@recyclepool}"
?????????????????? else?
??????????????????????? reScmd0="#{@scstop}??? #{@scstart}? "
??????????????????????? if webistrano_stage =~ /zf255/
??????????????????????? then reScmd=reScmd0 + @mq
??????????????????????? else
?????????????????????????????? reScmd=reScmd0
??????????????????????? end
?????????????????? end
??????????? end
??????? run reScmd
??? end





??? desc "from appserver_cmd gen jbossrestartcmd"
??? task :z_jbosscmd_gen, :max_hosts=>1 do
??????? if appserver_cmd =~ /^sh/
??????? then cmddir=appserver_cmd.split[1].split("jbossctl-old2.sh")[0];
??????? else cmddir=appserver_cmd.split[0].split("jbossctl-old2.sh")[0];
??????? end
??????? puts cmddir
??????? jbossgencmd="cp /home/jbossoldshgen.sh?? #{cmddir}?? ;cd???? #{cmddir}??? ;? sh jbossoldshgen.sh gen;? echo ok!;pwd;ls;"
??????? run %{
??????????? #{jbossgencmd}
??????? }
??? end
??


??? task :z_tomcat_nohup, :max_hosts=>1 do
??????? if appserver_cmd =~ /^sh/
??????? then cmdpath=appserver_cmd.split[1];
??????? else cmdpath=appserver_cmd.split[0];
??????? end
??????? puts cmdpath
??????? date=`date +%Y%m%d%H%M%S `
??????? run %{
echo;
if ((`grep -E? "nohup .*SCRIPT_TO_RUN.* start"? #{cmdpath} | wc -l ` == 0 ))?? ; then??? sed -i.bak.#{date}? -f /home/tomcatsedfile? #{cmdpath} ; diff #{cmdpath} #{cmdpath}.bak.#{date}; else echo? #{cmdpath} ; grep -n -E? "nohup .*SCRIPT_TO_RUN.* start"? #{cmdpath}; fi;
echo;
??????? }
??? end




??? desc "stop server or service"
??? task :luxstop_serv, :max_hosts=>1 do
??????? run %{
??????????? su - #{su_user_real}? -c? "#{appserver_cmd}? stop" ;??
??????????? su - #{su_user_real}? -c? "#{appserver_cmd}? status";??
??????? }???????
??? end

??? desc "start server or service"
??? task :luxstart_serv, :max_hosts=>1 do
??????? run %{
?????????? su - #{su_user_real}? -c? "#{appserver_cmd}? start"?? ;???
?????????? su - #{su_user_real}? -c? "#{appserver_cmd}? status";??
??????? }????????
??? end

??? desc "restart server or service"
??? task :zz_luxrestart_serv, :max_hosts=>1 do
??????? run %{
??????????? su - #{su_user_real}? -c? "#{appserver_cmd}? restart" ;
??????????? su - #{su_user_real}? -c? "#{appserver_cmd}? status";??
??????? }????????
??? end

??? desc "status server or service"
??? task :luxstatus_serv, :max_hosts=>1 do
??????? run %{
??????????? su - #{su_user_real}? -c? "#{appserver_cmd}? status;ps -efjH|grep java|grep -v grep;"?????
??????? }
??? end

??? desc "custom test cmd"
??? task :z_custom_test, :max_hosts=>1 do
??????? run %{
??????????? #{custom_test_cmd}
??????? }
??? end

??? task :z_outip, :max_hosts=>1 do
??????? run %{
???????????? curl http://uam.corp......com/Service/getip.aspx
??????? }
??? end


??? desc "backup git path "
??? task :backup_gitpath? do
??????? run %{
???????????? tar -czf? #{git_path}.`date +%Y.%m.%d-%H.%M.%S`.tgz? #{git_path};
???????????? ls? --full-time? -sh??? #{git_path}.`date +%Y.%m.%d`*
??????? }
??? end



??? task :z_mq, :max_hosts=>1 do
??????? run @mq
??? end


??? task :z_dns, :max_hosts=>1? do
??????? run %{ echo;? if [[ -f /etc/issue ]]; then ping -c 1? #{tag_name}?? ;cat /etc/resolv.conf? ; else ping -n 1 #{tag_name}? ;ipconfig /all|grep? "DNS Servers" -A4 ;fi; echo;
??????? }
???? end


??? desc "recycle start ApplicationPool"
??? task :zz_iisrecycle_start_Pool, :max_hosts=>1? do
??????? run %{
??????????? #{@recyclepool}
??????? }
??? end


??? task :z_addGzipLogCron, :max_hosts=>1 do
??????? run %{
mkdir? -p? /opt/importdir/crontabdir/;
echo 'gzip -rv? /logs/*/*`date --date="1 day ago" +%F`* ' >>? /opt/importdir/crontabdir/crontablog.sh;
echo '10 13 * * * bash /opt/importdir/crontabdir/crontablog.sh? ' >>?? /var/spool/cron/root;
crontab -l ;cat /opt/importdir/crontabdir/crontablog.sh;echo ???????????? alert log location ?????????????? ;
??????????? }
??? end


??? task :z_check_app_version? do
??????? run %{
??????????? cd #{git_path};?? git log --pretty=oneline -1|unix2dos;
???????? }
??? end

??? task :z_git_reset__hard, :max_hosts=>1? do
??????? run %{
??????????? cd #{git_path};#{@ifneedbak}? git status;?? git reset --hard ;
???????? }
??? end






??? desc "service start"
??? task :winstartservice, :max_hosts=>1 do
??????? run %{
??????????? #{@scstart}
???????? }
??? end

??? desc "service stop"
??? task :winstopservice, :max_hosts=>1 do
??????? run %{
??????????? #{@scstop}
??????? }
??? end



??? desc "service query"
??? task :winserviceStatus, :max_hosts=>1 do
??????? run %{
???????????? #{@scquerycmd}
??????? }
??? end



??? desc "service restart"
??? task :zz_winServiceRestart, :max_hosts=>1 do
???????? run %{
??????????????? #{@scstop}
??????????????? #{@scstart}?????? }
??? end







??? task :y_sc_old_getconfig, :max_hosts=>1? do
??????? run %{?
??????????? cd /tmp/;?? pwd;
??????????? git clone??? gituser@#{git_server}:/opt/gitzf332-382/zfsor1001migrate.git;
??????????? cd zfsor1001migrate; git pull ;?? pwd;??????? mkdir? #{webistrano_stage};??????
??????????? sc qc? #{servicename}|grep BINARY_PATH_NAME|awk '{print $3}'??? >> #{webistrano_stage}/scconfig;
??????????? echo -----? cat begin all config in file; cat? #{webistrano_stage}/scconfig;echo -----? cat end;
??????????? git status;??????????? git add . ;????????? git commit -am " auto `date +%Y.%m.%d-%H.%M.%S`? `pwd` #{webistrano_stage}? sc path ";
??????????? git push? origin master;
??????????? }
???? end


??? task :y_sc_new_createsc, :max_hosts=>1? do
??????????? z_gitinit_gettag_nocheck
??????? run %{?
??????????? cd /tmp/;?? pwd;
??????????? git clone??? git://#{git_server}/opt/gitzf332-382/zfsor1001migrate.git;echo;
??????????? cd zfsor1001migrate;?? git pull;? echo;?? cd? #{webistrano_stage};?????? pwd;echo -----? cat begin;
??????????? cat? scconfig;echo -----? cat end;echo;echo;echo;
??????????? echo?? sc create #{servicename} binpath= `tail -n 1 ./scconfig` start= disabled;echo;echo ----------before create;echo;
??????????? sc create #{servicename} binpath= `tail -n 1 ./scconfig` start= disabled;
??????????? echo;echo;echo;echo;echo --------------after create sc query;echo;
??????????? sc query? #{servicename}? ;echo;? echo sc qc query; echo;echo;echo ;
??????????? sc qc #{servicename} ;echo; echo exefinal;
??????? }
??? end




???? desc "push product to git server"
???? task :z_Git_Init_Push_ProdToGitServ, :max_hosts=>1 do
???????? run %{
??????????????? if [[ -d #{git_path}? ]];then echo git_path ok;else echo no git_path.dir&&echo&&echo&&exit 8;fi;
?????????????? cd #{git_path};
?????????????? pwd;ls -a;
?????????????? git init;
?????????????? git add . ;
?????????????? git commit -am "product webistrano auto `date +%Y.%m.%d-%H.%M.%S`?? `pwd` " ;
?????????????? git remote add origin gituser@#{git_server}:#{git_repopath}? ;
?????????????? git remote -v;
??????????????? echo ;echo;echo;echo;echo;echo;echo -------------------------push !!!!!!!!!!!!!!!!!!!!-------;
?????????????? git push origin master ;echo;echo;echo;
?????????????? ls -a;echo;echo;echo;git status;echo;echo;echo;git log -n 5|unix2dos;
???????? }
???? end
?
?
???? desc "GITgetgitDir_fromGitserver"
???? task :z_Git_InitGetGitDir_fromGitserver, :max_hosts=>1 do
???????? run %{
?????????????? dir=`date +%Y%m%d%H%M%S`;? cd /tmp;pwd;git clone git://#{git_server}#{git_repopath}? $dir;
?????????????? cd #{git_path};pwd;ls -a; cp -r /tmp/$dir/.git??? ./; ls -a;git status;
???????? }
???? end




??? desc "get iis info"
??? task :z_iisinfo, :max_hosts=>1 do
???????? run %{
?????????????????????? cscript.exe "c:\\Inetpub\\AdminScripts\\adsutil.vbs"?? ENUM /P W3SVC/AppPools;
?????????????????????? cscript //Nologo "C:\\windows\\system32\\iisweb.vbs" /query |awk -F")" '{print $1}'|awk -F"(" '{print $2}'|grep W3SVC|grep -vE "W3SVC/1$" |xargs? -I {} cscript.exe "c:\\Inetpub\\AdminScripts\\adsutil.vbs"? ENUM_ALL {}|grep -E "AppPoolId|Path|Comment"
???????? }
??? end

? end

?

  相关解决方案