阅读目录

  • 1、环境准备
  • 2、脚本内容

前言

前面我们介绍了Jenkins来发布项目通过nginx来展示流程,那里只是提供了一个简单的测试脚本,接下来呢介绍一下一个比较完善的发布脚本,该脚本可实现从gitlab服务器获取代码,打包,部署到WEB服务器,回滚到任意版本,一键回滚到上一版本。脚本可以当做模板来套用,屡试不爽,enjoy吧!!

详细内容

回到顶部
1、环境准备
首先,脚本发布一定是用普通用户www来发布。脚本放在www的用户家目录,每个WEB都创建www用户并且UID相同,web目录和权限一致,其次需要创建一些必须的文件目录。

--------------------------------------------------------------------
注:如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
--------------------------------------------------------------------
# mkdir -p /deploy/code/web-demo -p
# mkdir -p /deploy/config/web-demo/base
# mkdir -p /deploy/config/web-demo/other
# mkdir -p /deploy/tar
# mkdir -p /deploy/tmp
# mkdir -p /opt/webroot
# mkdir /webroot
# chown -R www:www /deploy
# chown -R www:www /opt/webroot
# chown -R www:www /webroot

2、脚本内容

#!/bin/bash
# Description:本脚本主要完成的动作是部署、回滚,首先从我们私有的gitlab仓库拉下web-demo项目(http://192.168.56.11/web/web-demo.git),然后打包、压缩、scp到192.168.56.12:/webroot/、解压、然后最后通过nginx访问http://192.168.56.12/,查看结果。
# Dir List   需要创建的目录
# mkdir -p /deploy/code/web-demo -p
# mkdir -p /deploy/config/web-demo/base
# mkdir -p /deploy/config/web-demo/other
# mkdir -p /deploy/tar
# mkdir -p /deploy/tmp
# mkdir -p /opt/webroot
# mkdir /webroot
# chown -R www:www /deploy
# chown -R www:www /opt/webroot
# chown -R www:www /webroot#服务器节点:
# Node List
PRE_LIST="192.168.56.11"      #gitlab地址
GROUP1_LIST="192.168.56.12"   #WEB服务IP地址#回滚服务器列表
ROLLBACK_LIST="192.168.56.11 192.168.56.12"#日期和时间变量(时间不固定)
# Date/Time Veriables
LOG_DATE='date "+%Y-%m-%d"'
LOG_TIME='date "+%H-%M-%S"'#代码打包时间变量(固定时间)
CDATE=$(date "+%Y-%m-%d")
CTIME=$(date "+%H-%M-%S")#变量
# Shell Env
#脚本名称
SHELL_NAME="deploy_all.sh"  #脚本路径
SHELL_DIR="/home/www/"#脚本执行日志文件路径
SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"   #代码变量
# Code Env#项目名称,此名称是从gitlab服务器clone下来的代码目录
PRO_NAME="web-demo"#从gitlab服务器更新代码的目录
CODE_DIR="/deploy/code/web-demo" #项目配置文件
CONFIG_DIR="/deploy/config/web-demo"  配置目录#代码临时目录,从git 服务器获取到的代码放在这里打包在部署到WEB服务器
TMP_DIR="/deploy/tmp"  #打包目录
TAR_DIR="/deploy/tar"     #锁文件
LOCK_FILE="/tmp/deploy.lock"   # 用法
usage(){    echo $"Usage: $0 {deploy | rollback [ list | version ]"
}#写日志
writelog(){    LOGINFO=$1   #将参数作为日志输入echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO} "  >> ${SHELL_LOG}
}#创建锁
shell_lock(){touch ${LOCK_FILE}
}#判断
url_test(){URL=$1curl -s --head $URL | grep '200 OK'if [ $? -ne 0 ];thenshell_unlock;echo "test error" && exit;fi
}
#删除锁
shell_unlock(){rm -f ${LOCK_FILE}
}
#拉取代码
code_get(){writelog "code_get";cd $CODE_DIR && git pullcp -r ${CODE_DIR} ${TMP_DIR}/API_VERL=$(git show | grep commit | cut -d ' ' -f2)API_VER=$(echo ${API_VERL:0:6})
}
#代码构建
code_build(){echo code_guild
}
code_config(){writelog "code_config"/bin/cp -r ${CONFIG_DIR}/base/* ${TMP_DIR}/"${PRO_NAME}"PKG_NAME="${PRO_NAME}"_"$API_VER"_"${CDATE}-${CTIME}"cd ${TMP_DIR} && mv ${PRO_NAME} ${PKG_NAME}
}
code_tar(){writelog "code_tar"cd ${TMP_DIR} && tar czf ${PKG_NAME}.tar.gz ${PKG_NAME}writelog "${PKG_NAME}.tar.gz"
}
code_scp(){writelog "code_scp"for node in $PRE_LIST;doscp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/donefor node in $GROUP1_LIST;doscp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/done
}
pre_deploy(){writelog "remove from cluster"ssh $PRE_LIST "cd /opt/webroot && tar zxf ${PKG_NAME}.tar.gz"ssh $PRE_LIST "rm -f /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
}
pre_test(){url_test "http://${PRE_LIST}/index.html"echo "d to cluster"
}
group1_deploy(){writelog "remove from cluster"for node in $GROUP1_LIST;dossh $node "cd /opt/webroot && tar zxf ${PKG_NAME}.tar.gz"ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"donescp ${CONFIG_DIR}/other/192.168.56.12.crontab.xml 192.168.56.12:/webroot/web-demo/crontab.xml
}
group1_test(){url_test "http://192.168.56.12/index.html"    echo "add to cluster"
}
rollback_fun(){for node in $ROLLBACK_LIST;dossh $node "rm -f /webroot/web-demo && ln -s /opt/webroot/$1 /webroot/web-demo"done
}
rollback(){if [ -z $1 ];thenshell_unlock;echo "Please input rollback version" && exit;
ficase $1 inlist)ls -l /opt/webroot/*.tar.gz;;*)rollback_fun $1esac
}
main(){if [ -f $LOCK_FILE ];thenecho "Deploy is running" && exit;fiDEPLOY_METHOD=$1ROLLBACK_VER=$2case $DEPLOY_METHOD indeploy)shell_lock;code_get;code_build;code_config;code_tar;code_scp;
#        pre_deploy;
#        pre_test;group1_deploy;group1_test;shell_unlock;;;rollback)shell_lock;rollback $ROLLBACK_VER;shell_unlock;;;*)usage;esac
}
main $1 $2

CI持续集成系列之(九)代码发布脚本模板书写相关推荐

  1. ci持续集成工程师前景_不要忽视持续集成(CI)/持续交付(CD)的13个优势

    原标题:不要忽视持续集成(CI)/持续交付(CD)的13个优势 持续集成(CI)/持续交付(CD)是现代软件开发周期的基础,人们需要了解持续集成(CI)/持续交付(CD)和其管道实施的所有好处. 在传 ...

  2. CI -持续集成及相关概念

    Continuous Integration, Continuous delivery, Continuous Delopment CI - 持续集成(Continuous Integration)是 ...

  3. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...

  4. [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...

  5. CI持续集成系统环境---部署gerrit环境完整记录

    转载自: http://www.cnblogs.com/kevingrace/p/5624122.html 开发同事提议在线上部署一套gerrit代码审核环境,废话不多说,部署gerrit的操作记录如 ...

  6. CI持续集成、持续交付、持续部署

    互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI). 一.概念 持续集成(Continuous Integratio ...

  7. CI持续集成系统环境---部署Jenkins完整记录

    最近在看CI/CD集成的相关部分,发现几篇好文,转载分享一波. 来源网络:[原创]CI持续集成系统环境---部署Jenkins完整记录 - 散尽浮华 - 博客园 Jenkins通过脚本任务触发,实现代 ...

  8. 在CentOS7上安装Drone搭建CI持续集成环境

    文章目录 在CentOS7上安装Drone搭建CI持续集成环境 前言 安装前规划 安装过程 配置域名解析 安装Docker 拉取Drone Server镜像 添加GitHub OAuth Applic ...

  9. 万物皆可集成系列:低代码对接Web Service接口

    我们知道活字格支持不写代码实现双向API绑定,那么没那么主流的Web Service接口(SOAP协议+XML交互格式)呢?其实对接的思路没有那么复杂,得用C#编码来对接的. 作为一款企业级低代码开发 ...

最新文章

  1. MOS管好坏的判别方法
  2. 布道微服务_05RPC远程服务调用的实现
  3. 【152】C# 操作 Excel 杂记
  4. 1个价值80亿美元的iPod
  5. 静态路由默认路由的配置
  6. MAD huashi
  7. 瑞立视:厚积薄发且具有“工匠精神”的中国品牌
  8. java如何实现开机启动,怎样实现开机启动holer
  9. 信息学奥赛C++语言:时间转换
  10. 周末ROS学习沙龙第二期——自定义消息通信、视频传输、人脸检测、小车动手编程
  11. Java连接Redis (key-value存储系统)
  12. DxO PhotoLab 3 for Mac(照片后期处理软件)
  13. PDF编辑器(PDF Editor)中文版
  14. 使用SourceOffSite时出现的问题及解决办法
  15. 一个北京妞儿写的经典的话,太现实了!
  16. MongoDB的一些基本使用
  17. 关于LVDS的硬件总结
  18. 《霍乱时期的爱情》读后感
  19. 炫我科技渲染集群管理软件
  20. 职场管理(3)——提取公积金需要满足哪些条件?你还不知道吧

热门文章

  1. API性能优化之异步
  2. C#——《C#语言程序设计》实验报告——面向对象程序设计——自动出题判分小程序
  3. C#——实现IComparableT 接口,ArrayLIst调用ArrayLIst.Sort()抛出System.InvalidOperationException异常解决方案
  4. 设计模式(Design Pattern)
  5. 【剪枝算法】通过网络瘦身学习高效的卷积网络Learning Efficient Convolutional Networks through Network Slimming论文翻译
  6. ubuntu18.04(修改环境变量
  7. 软件工程概论 课堂练习【用例图——客户提出申请要求贷款...】
  8. SwipeBackActivity 的使用
  9. android读写文件
  10. esp32 rtc 时钟设置不对_「STM32」实时时钟(RTC)实验