设为首页 收藏本站
查看: 1165|回复: 0

[经验分享] github快速发送代码与快速回滚脚本实现

[复制链接]

尚未签到

发表于 2017-10-10 09:45:01 | 显示全部楼层 |阅读模式
创建一个commit裤先:1、[iyunv@centos-3 cml]# echo "check github" > index.html
[iyunv@centos-3 cml]# cat index.html
check github


2、[iyunv@centos-3 cml]# git add index.html


3、[iyunv@centos-3 cml]# git commit -m "check github"
[master b357825] check github
1 files changed, 1 insertions(+), 1 deletions(-)


4、[iyunv@centos-3 cml]# git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 263 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To git@github.com:legehappy/cml.git
   1a81b88..b357825  master -> master

添加几个标签(这个标签是完好无事的):[iyunv@centos-3 cml]# git tag
v1.0
v2.0
v3.0
编写一个快速发送代码与快速回滚的shell脚本:
[iyunv@centos-3 github]# cat deploy.sh
#!/bin/bash
#author=cml
#mail=*******@qq.com
#phone=*********
##################################
mail_user="********@qq.com"
git_dir=/github
REPOLY="cml"

send_mail_push(){
echo "push version is $1" | mail -s "deploy push" $mail_user
}
send_mail_roll(){
echo "roll version is $1" | mail -s "deploy roll" $mail_user
}
git_pull(){
if [ ! -d $git_dir ];then
mkdir $git_dir
fi
cd $git_dir
if [ ! -d $REPOLY ];then
git clone git@github.com:legehappy/cml.git >> /dev/null
fi
cd $REPOLY
git pull
}
git_tag_list(){
cd $git_dir/$REPOLY
git_pull
count=`git tag | wc -l`
if [ $count -eq 0 ];then
echo "please take your tag"
else
git tag
fi
}
git_add_deploy(){
cd $git_dir/$REPOLY
git_pull
git_num=$(($(git tag | wc -l)+1))
git_deloy="v$git_num.0"
git tag -a $git_deloy -m "$git_deloy"
git push
git push --tag
}
delopy(){
rsync -vzrtopg --progress $git_dir/$REPOLY/* 192.168.5.128:/data/
cd $git_dir/$REPOLY
tag_status=$(git tag | tail -n 1)
echo "$tag_status"
send_mail_push $tag_status
#ssh 192.168.5.128 ln -s /data/ /web
}
check_web(){
check=`curl -I -m 10 -o /dev/null -s -w %{http_code} 192.168.5.128/index.html`
if [ $check -eq 200 -o $check -eq 301 -o $check -eq 302 -o $check -eq 304];then
echo "the web is up"
else
echo "please check index.html"
fi
}

git_set(){
cd $git_dir/$REPOLY
select x in "git_reset_HEAD" "git_reset_tag";do
  case $x in
  git_reset_HEAD)
cd /github/cml
git reset --hard HEAD^
git push -f
git push --tags
rsync -vzrtopg --progress $git_dir/$REPOLY/* 192.168.5.128:/data/
cd $git_dir/$REPOLY
        tag_status=$i
        echo "$i"
        send_mail_roll $i
;;
  git_reset_tag)
cd $git_dir/$REPOLY
a=`git tag`
worry_tag=$(git tag | tail -n 1)
echo "please select which:"
select i in $a; do
if [ $i == "$worry_tag" ];then
echo "try again"
else
echo "you select $i"
git reset --hard $i
break
fi
done
git push -f
git push --tags
rsync -vzrtopg --progress $git_dir/$REPOLY/* 192.168.5.128:/data/
cd $git_dir/$REPOLY
        tag_status=$i
        echo "$i"
        send_mail_roll $i
;;
esac
break
done
}

main(){
git_add_deploy
delopy
check_web
}

reset_one(){
git_reset_HEAD
check_web
}

reset_second(){
git_reset_tag
check_web
}
$1

测试:发布一个代码使用脚本快速上传和增加标签:
[iyunv@centos-3 github]# cd cml/
[iyunv@centos-3 cml]# ls
cml.txt  index.html  README.md  test.txt
[iyunv@centos-3 cml]# echo "worry index.html" > index.html
[iyunv@centos-3 cml]# cat index.html
worry index.html
[iyunv@centos-3 cml]# git add index.html
[iyunv@centos-3 cml]# git commit -m "worry index.html"
[master 224e010] worry index.html
1 files changed, 1 insertions(+), 1 deletions(-)
[iyunv@centos-3 cml]# git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 272 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To git@github.com:legehappy/cml.git
   b357825..224e010  master -> master
[iyunv@centos-3 github]# bash deploy.sh main
Already up-to-date.
Everything up-to-date
Counting objects: 1, done.
Writing objects: 100% (1/1), 151 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:legehappy/cml.git
* [new tag]         v4.0 -> v4.0
sending incremental file list
README.md
           6 100%    0.00kB/s    0:00:00 (xfer#1, to-check=3/4)
cml.txt
          10 100%    9.77kB/s    0:00:00 (xfer#2, to-check=2/4)
index.html
          17 100%   16.60kB/s    0:00:00 (xfer#3, to-check=1/4)
test.txt
          11 100%   10.74kB/s    0:00:00 (xfer#4, to-check=0/4)

sent 286 bytes  received 88 bytes  748.00 bytes/sec
total size is 44  speedup is 0.12
v4.0
the web is up
在开发者的服务器上已经同步新的代码:
[iyunv@centos-4 data]# ls
cml.txt  index.html  README.md  test.txt
[iyunv@centos-4 data]# cat index.html
worry index.html
而且邮箱收到上传的最新标签:
wKioL1nZ662DsMvOAAEpM8JN3E0194.png


Reset一:此时发现新的代码存在bug,先回退到上一个版本:[iyunv@centos-3 github]# bash deploy.sh reset_one
HEAD is now at b357825 check github
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:legehappy/cml.git
+ 224e010...b357825 master -> master (forced update)
sending incremental file list
index.html
          13 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/4)

sent 135 bytes  received 37 bytes  344.00 bytes/sec
total size is 40  speedup is 0.23
v4.0
the web is up
[iyunv@centos-3 github]# cat cml/index.html
check github
wKioL1nZ69LAEHaOAADQ5gThbhI678.png

这样就实现了git快速上传代码:出现故障时回滚代码的效果:
Reset二:有时候可能会出现最近上传的多个代码都出现bug想要回滚到一个没问题的代码的时候,我们选择第二层回滚:[iyunv@centos-3 github]# bash deploy.sh reset_second
please select which:
1) v1.0
2) v2.0
3) v3.0
4) v4.0
#? 3
you select v3.0
Everything up-to-date
sending incremental file list

sent 82 bytes  received 12 bytes  188.00 bytes/sec
total size is 40  speedup is 0.43
v3.0
the web is up
[iyunv@centos-3 github]# cat cml/index.html
check github

而且邮件收到你回滚到的版本的标签:
wKiom1nZ7DbA4JRQAADP284q8-Q973.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-405266-1-1.html 上篇帖子: centos7上使用git命令把代码放到github上 下篇帖子: Git安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表