设为首页 收藏本站
云服务器等爆品抢先购,低至4.2元/月
查看: 1573|回复: 0

[经验分享] Jenkins与gitlib实现自动化部署2-myblog

[复制链接]

尚未签到

发表于 2018-9-16 09:00:53 | 显示全部楼层 |阅读模式
vim /etc/sudoers    授权  #Defaults   requiretty  不能开启tty端
  www     ALL=(ALL)       ALL
  jenkins ALL=(ALL)       NOPASSWD: /usr/bin/ssh
  su - www        切换用户
  ssh-copy-id www@192.168.62.63   设置web和jenkins的基于key的认证
  ssh-copy-id www@192.168.62.62
  cat .ssh/id_rsa.pub     查看www用户的公钥
  cat /home/www/.ssh/id_rsa.pub
  vim /home/www/.ssh/authorized_keys  基于key的认证,保证自己可以无密码连接特定
  机器,防止有时脚本不在本机的情况;
  ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUNGt15DFFW7fqbI7vn2z6G289GQE2TJhrgrZe4qQna4VQhRKoVsdc/vdbqcmSKn41cwcGFt0w14eiALD5OBH/NvP9zOvHj1KAhJ6Z8SySWWD26WONOSWmFLpCCwZy9WeET1teNKC+N6Gf4BtKQeR543Keh4TtCJF+ThumxJpSxn3NG9mzaMS8XeJcJX5ZvKdQgPxFRpx4OcPsfRXUTY+FhfxBkvjdUBGC+BSr/WhDhCEI86CBl9Rp0vCfyup8cPNGovKklyrpPVkVW6Bh6SBCr3gp8diSd6KRyfKmMdxbYaRdUVjCkzcDMITXKWd4jlpMln9tA37klE8BAip6vXuj www@jenkins-server
  exit    回到root用户
  cat /root/.ssh/id_rsa.pub       查看root公钥
  vim /home/www/.ssh/authorized_keys
  ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFgBrdYH5bxp+WURV/gbLRkwbIzI5a1yj1Vuss5xf5noImDQ+aOll/9PIZIZYukIBhCM4le5aZK8cXI1fImMTx8OQv3vFaDwhgRkSZe4bDzhzmpg2MfXrnR4AfXP6eQGjWumqLI8MrgI4dUdiv2KMQp2eNwq6zMaEoInCfiMXuxYwWKI7KBcEIBG2H1ZvxDJ4VotYC7ZvLMzudmI7c7EXU3d5O7fDJVGksG14b4UINUlWImHETGEs/lC1v0CaoOxwrLkBBK1X7yJlbLBni6VYVfe0QY6eceozAnXrtKvY3mAR8uMW2wzPyVLh2GviQv+eYK2pVW55CvNOY83CgwJrP root@jenkins-server
  vim deploy1.sh  修改脚本
  #!/bin/bash
  #文件与目录变量
  MOBILE_FILE=SmaMobile.war.zip
  MOBILE_NAME=SmaMobile
  PC_FILE=CustomerApp.war.zip
  PC_NAME=CustomerApp
  S_DIRETORY=/data/ftpsite/xiaoguan
  D_DIRETORY=/apps/tomcat_appdir
  #日志日期和时间变量
  LOG_CDATE=`date "+%Y-%m-%d"` #如果执行的话后面执行的时间都一样,因此此时间是不固定的,这是用于记录日志生成的>时间
  LOG_CTIME=`date  "+%H-%M-%S"`
  #代码打包时间变量
  CDATE=$(date "+%Y-%m-%d")
  CTIME=$(date "+%H-%M-%S")
  echo ${CDATE}_${CTIME}
  #获取Jenkins传递的参数
  METHOD=$1   #方法是部署还是回滚
  GROUP_LIST=$2   #后端服务器列表
  VERSION=$3  #控制版本
  #通过jenkins传递参数定义PC端服务器列表
  if [[ ${GROUP_LIST} == "1" ]];then
  PC_LIST="172.18.62.62"
  echo "第一次上线,上线服务器为${PC_LIST},线上HA负载在线服务器为${PC_LIST}"
  sleep 2
  elif [[ ${GROUP_LIST} == "2" ]];then
  PC_LIST="172.18.62.63"
  echo "第二次上线,上线服务器为${PC_LIST},线上HA负载在线服务器为${PC_LIST}"
  elif [[ ${GROUP_LIST} == "3" ]];then
  PC_LIST="172.18.62.63 172.18.62.62"
  echo "第二次上线,上线服务器为${PC_LIST},线上HA负载在线服务器为${PC_LIST}"
  sleep 2
  else
  echo "参数 error"
  #exit 3
  fi
  copy_file(){
  if test -f /data/ftpsite/xiaoguan/CustomerApp.war.zip;then
  PKG_NAME="${PC_NAME}"_"${CDATE}"_"${CTIME}"
  echo "开始复制销管系统上线文件......"
  mv ${S_DIRETORY}/${PC_FILE}  ${S_DIRETORY}/${PKG_NAME}.war.zip
  for node in ${PC_LIST};do #循环服务器节点列表
  scp ${S_DIRETORY}/${PKG_NAME}.war.zip  www@$node:/apps/tomcat_appdir  #将压缩后的代码包复制到web>服务器的/opt/webroot
  ssh ${node} "cd /apps/tomcat_appdir && unzip  ${PKG_NAME}.war.zip -d /apps/tomcat_webdir/${PKG_NAME} && rm -rf  /apps/tomcat/webapps/CustomerApp && ln -sv /apps/tomcat_webdir/${PKG_NAME}  /apps/tomcat/webapps/CustomerApp"
  if [ $? -eq 0 ];then
  echo "销管项目移动端端服务器${node}上线文件复制完成"
  echo "发送邮件中。。。"
  echo "销管项目移动端端服务器${node}文件复制并发部署完成" |  mail -s "复制文件完成" 127540092@qq.com
  else
  echo "销管项目移动端端服务器${node} 部署失败" |  mail -s "部署失败" 127540092@qq.com
  fi
  done
  else
  echo "上线文件CustomerApp.war.zip不存在"
  exit 3
  fi
  }
  stop_service(){
  if [ ${METHOD} == "deploy" ];then #假如是上线部署
  if test -f /data/ftpsite/xiaoguan/CustomerApp.war.zip;then #先判断上线文件是不是存在
  for node in ${PC_LIST};do #循环服务器节点列表
  ssh www@${node} "/etc/init.d/tomcat stop"
  done
  else
  echo "CustomerApp.war.zip文件不存在"
  exit 4
  fi
  else
  for node in ${PC_LIST};do #假如不是上线,即是回滚和任意版本的回滚,就先循环服务器节点列表停服务
  ssh www@${node} "/etc/init.d/tomcat stop"
  done
  fi
  }
  start_service(){
  for node in ${PC_LIST};do #循环服务器节点列表
  ssh www@${node} "/etc/init.d/tomcat start"
  done
  }
  #回滚到指定版本
  rollback_designated(){
  for node in ${PC_LIST};do
  ssh www@${node} "rm -rf /apps/tomcat/webapps/CustomerApp  && ln -sv /apps/tomcat_webdir/${VERSION} /apps/tomcat/webapps/CustomerApp  && echo "${node} 回滚到指定版本成功!""
  done
  }
  #一键回滚到上一版本
  rollback_last_version(){
  for node in ${PC_LIST};do
  NAME=`ssh www@${node}  ""/bin/ls -l  -rt /apps/tomcat_webdir | awk '{print $9}' | tail -n 2 | head -n1""`
  ssh www@${node}  "rm -rf /apps/tomcat/webapps/CustomerApp && ln -sv /apps/tomcat_webdir/${NAME} /apps/tomcat/webapps/CustomerApp && echo "${node} 一键回滚到上一版本成功""
  done
  }
  main(){
  DEPLOY_METHOD=$1
  ROLLBACK_VER=$3
  case ${DEPLOY_METHOD}  in
  deploy)
  stop_service;
  copy_file;
  start_service;
  ;;
  rollback_designated)
  stop_service;
  rollback_designated;
  start_service;
  ;;
  rollback_lastversion)
  stop_service;
  rollback_last_version;
  start_service;
  ;;
  *)
  usage;
  esac;
  }
  main $1 $2 $3
  ./deploy1.sh deploy 2   传参测试脚本的可用性
  yum install mailx -y   脚本中用到了mail命令发邮件,故而需要安装包,root用户才能安装
  ./deploy1.sh deploy 2   测试脚本
  su  - www   切换www用户
  mkdir /data/ftpsite/xiaoguan -pv    保证属组和属主为www
  chown www.www ftpsite/ -R       如果不是www用户创建的此目录,就使用此命令保证权限
  vim index.html
  I love you!
  I love you!
  I love you!
  I love you!
  I love you!
  I love you!
  I love you!
  I love you!
  yum install zip
  zip CustomerAp.war.zip index.html   压缩为脚本指定格式的代码文件
  ./deploy1.sh deploy 1   测试
  su - www        记得切换www用户
  mkdir tomcat_webdir 在/apps下创建目录,web1和web2上,存放解压后的文件
  mkdir tomcat_appdir 存放复制过来的压缩文件,注意属主和属组
  yum install unzip -y        安装unzip包,web1和web2上,以将复制到达的压缩包解压
  测试脚本没问题后,进行jenkins的项目部署:


运维网声明 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-584374-1-1.html 上篇帖子: gitlab+jenkins+tomcat实现代码自动部署 下篇帖子: Gitlab利用Webhook实现Push代码后的jenkins自动构建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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