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

[经验分享] jenkins结合ansible用shell实现自动化部署和回滚

[复制链接]

尚未签到

发表于 2018-1-7 06:33:36 | 显示全部楼层 |阅读模式
#!/bin/sh  
#说明
  
show_usage
="args: [-l , -r , -b , -w]\  
[--local-repository=, --repository-url=, --backup-dir=, --webdir=]"
  
#参数
  
# 本地仓库目录
  
opt_localrepo=""
  

  
# git仓库url
  
opt_url=""
  

  
# 备份目录
  
opt_backupdir=""
  

  
# web目录
  
opt_webdir=""
  

  
GETOPT_ARGS=`getopt -o l:r:b:w: -al local-repository:,repository-url:,backup-dir:,webdir: -- "$@"`
  
eval set -- "$GETOPT_ARGS"
  
#获取参数
  
while [ -n "$1" ]
  
do
  
case "$1" in
  
-l|--local-repository) opt_localrepo=$2; shift 2;;
  
-r|--repository-url) opt_url=$2; shift 2;;
  
-b|--backup-dir) opt_backupdir=$2; shift 2;;
  
-w|--webdir) opt_webdir=$2; shift 2;;
  
--) break ;;
  
*) echo $1,$2,$show_usage; break ;;
  
esac
  
done
  

  
if [[ -z $opt_localrepo || -z $opt_url || -z $opt_backupdir || -z $opt_webdir ]]; then
  
echo $show_usage
  
echo "opt_localrepo: $opt_localrepo , opt_url: $opt_url , opt_backupdir: $opt_backupdir , opt_webdir: $opt_webdir"
  
exit 0
  
fi
  

  
# 部署脚本所在目录
  
scriptdir=`pwd`/jenkinsdeploy/
  
mkdir -p $scriptdir
  

  
# 当前部署版本号
  
currversion=$scriptdir/currentversion.txt
  

  
# 上次部署版本
  
lastversion=$scriptdir/lastversion.txt
  
if [ ! -f "$lastversion" ];then
  
echo "" > $lastversion
  
fi
  

  
# git commit日志
  
gitcommitlog=$scriptdir/gitcommitlog.txt
  

  
# 两个版本间差异文件列表
  
difffile=$scriptdir/difffile.txt
  

  
#if [ "$repodif" == "" ];then
  
#        echo "仓库本地目录不能为空,请输入本地仓库目录参数!"
  
#        exit 1
  
#fi
  

  
# 切换到本地版本库目录
  
cd $opt_localrepo
  
# 更新代码
  
git pull $opt_url
  
# 获取commit日志
  
git log --pretty=format:"%H" > $gitcommitlog
  

  
# 获取当前commit版本
  
currentcommit=`head -1 $gitcommitlog`

  
echo "current commit>  


  
# 上一次部署的commit>  
lastdeployid=`head -1 $lastversion`
  
echo "lastdeployid: $lastdeployid"
  

  
if [ "$lastdeployid" = "" ];then
  
lastdeployid=`tail -1 $gitcommitlog`
  
echo "lastdeployid: $lastdeployid"
  
fi
  

  
if [ "$lastdeployid" = "$currentcommit" ];then
  
echo "与上次部署的版本id相同,$currentcommit,不作部署操作。"
  
exit
  
fi
  

  
# 获取两个版本间差异的文件列表
  
echo "pwd: `pwd`"
  
git diff $lastdeployid $currentcommit --name-only > $difffile
  
echo "git diff $lastdeployid $currentcommit --name-only  $difffile">$scriptdir/log.txt
  

  
# 根据当前时间生成备份目录
  
bakversion=`date "+%Y%m%d%H%M"`
  
bakdir=$opt_backupdir/$bakversion
  
echo "bakdir: $bakdir"
  

  
# 创建备份目录
  
mkdir -p $bakdir
  
# 备份文件,要保存相对目录结构必须切换到程序根目录,否则获取的是绝对目录
  
cd $opt_webdir
  
cat $difffile | xargs -i -t cp -rf --parents {} $bakdir/
  

  
# 部署,,要保存相对目录结构必须切换到程序根目录,否则获取的是绝对目录
  
cd $opt_localrepo
  
cat $difffile | xargs -i -t cp -rf --parents {} $opt_webdir/
  

  
# 记录当前部署版本信息
  
echo $currentcommit >$lastversion
  

  
echo "$bakdir">>$scriptdir/backup.txt

运维网声明 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-432433-1-1.html 上篇帖子: jenkins配置源码管理git 下篇帖子: Jenkins的Windows Slave的配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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