标签:maven 回滚 jenkins 发布系统 buildid
新建jenkins项目
登入jenkins后选择最上角的新建
输出项目名后选择下面的项目风格。当你无法确定的时候选择自由风格即可。
配置jenkisn项目
项目配置一共有6步操作
General,源码管理,构建触发器,构建环境,构建,构建后操作
一、General综合
这步主要是定义项目名,项目的权限管理,构建项目数的保存天数或个数以及局部参数定义。
A、项目权限管理
勾选“启动项目安全”,添加需要授权的用户名。然后给用户设置项目访问权限。这个权限设置的级别是低于“系统管理”中的权限设置。
B、构建项目数
这块是用户保存项目构建的保存时间。当构建最大个数为10 的时候,构建历史中将会保存10个历史版本,方便后面的回滚操作。
C、参数定义
勾选参数化构建,定义你需要的参数,方面后的脚本需要。(本文中使用的源码库是git)
Git分支参数:Branch,回滚参数:Rollback,项目参数:ProjectName等等,可以根据需要自己定义参数。此参数自在此项目中有效。
D、JDK版本选择
此项目是java项目,需要用到maven编译。Jdk的版本一定要选择正确。Jenkins服务器可以安装多个版本的jdk。在“系统管理”-“Global Tool Configuration”中选择jdk安装
设置JDK的安装目录。
在此处要选择开始使用的jdk版本,版本不同可能导致很多奇怪的问题。
三、源码管理
这里采用的源码是git
此处选择项目的git代码路径及登入账号密码,也可以使用ssh免密方式。分支选项使用上面定义的参数“Branch”。
其他无需配置
四、构建环境
因为构建触发器没有使用到,这里不做介绍。
勾选“Delete workspace before build starts”,每次构建删除jenkins数据目录下本项目上次的构建workspace。
五、构建
为了让回滚更加方便快捷,此处不单独使用maven编译选项,而是把maven编译命令放在execute shell中执行。
首先判断RollBack这个参数是否传值。默认是为空。如果RollBack不为空则跳过编译步骤直接下一步。RoolBack参数在构建项目的时候传值的
在Execute shell脚本中定义了一个参数buildName,这个参数是为了更改构建历史中buildID的名称是设定的
只显示buildID,反馈的信息很少。适当的时候我们需要添加点额外的信息。
脚本中我们把buildName放到一个文件中,在这个配置中我们从这个文件中获取数据更新buildID
执行完脚本,java代码就编译好了,之后就是传输工作。我们采用的数据传输是SSH
SSH Server需要在“系统管理”-“系统配置”下配置
Name:定义名称,最好按照一定格式命名。如果SSH Server比较多的时候不至于混乱
Hostname:主机IP
Username:运行容器的用户名
Remote Directory:目标服务器的数据存储路径
选择好SSH Server后配置“Transfers”,这个根据你的实际情况自己配置,传输完成后执行“Exec command”,里面的脚本是存放在目标服务器上,根据自己的需求定义。在deploy.sh脚本中设置获取“RollBack”参数作为回滚操作。
下面是deploy.sh脚本
#!/bin/bash # ProjectName="cloudfactory" # TomcatName="tomcat_cloudfactory_8080" # BasePath="/data/websrv" # $1 $2 $3 $4 $5 # sh deploy.sh ${ProjectName} ${TomcatName} ${BUILD_ID} ${BasePath} ${rollbackNo} ProjectPath="$4/builds/$1" TomcatPath="$4/$2" LogFile="upgrade.log" TomLog="tomcat.log" if [ "$5" != "" ] && [[ "$5" =~ ^[[:digit:]]*$ ]]; then if [ ! -d $ProjectPath/$5 ]; then echo "rollback to $5 failed" exit 1 else echo "本次构建发布 执行了回滚操作 回滚编号为:$5" echo "rollback to $5 edition" ln -snf $ProjectPath/$5/$1 $TomcatPath/webapps/ROOT fi else if [ -L $ProjectPath/successful ]; then LastSuccess=$(tail -1 $ProjectPath/$LogFile) rm -rf $ProjectPath/successful && ln -snf $ProjectPath/$3/$1 $ProjectPath/successful else ln -snf $ProjectPath/$3/$1 $ProjectPath/successful fi echo $3 >> $ProjectPath/$LogFile [ -d $TomcatPath/webapps/ROOT -o -L $TomcatPath/webapps/ROOT ] && rm -rf $TomcatPath/webapps/ROOT if [ -d $TomcatPath ]; then [ -L $TomcatPath/webapps/ROOT ] || ln -snf $ProjectPath/successful $TomcatPath/webapps/ROOT else echo "ERROR" $1 $(date) >> $ProjectPath/$TomLog && exit 1 fi fi cd $ProjectPath ls -dt * | grep ‘^[0-9]\{1,\}$‘ | awk ‘{if(NR>10){print $0}}‘ | xargs rm -rf
运行完deploy.sh脚本后运行容器重启脚本,这个根据自己实际情况编写
Restart.sh脚本
#!/bin/bash BASE_DIR=$(pwd) rm -rf $BASE_DIR/work/* rm -rf $BASE_DIR/temp/* STATE=$(ps -ef | grep $BASE_DIR | grep -v grep | wc -l) if [ $STATE != 0 ]; then ps -ef | grep $BASE_DIR | grep -v grep | awk ‘{print $2}‘ | xargs kill -9 echo "$BASE_DIR kill success!" else echo "$BASE_DIR pid not exsit!" fi mv $BASE_DIR/logs/catalina.out $BASE_DIR/logs/catalina.last sh $BASE_DIR/bin/startup.sh STATE=$(ps -ef | grep $BASE_DIR | grep -v grep | wc -l) if [ $STATE != 0 ]; then echo "$BASE_DIR startup success!" else echo "$BASE_DIR startup failed, please check you config!" fi echo "[INFO] ------------------------------------------------------------------------" echo "Show $BASE_DIR process status!" ps -ef | grep -v grep | grep --color=auto $BASE_DIR echo "[INFO] ------------------------------------------------------------------------"
本文出自 “宁静致远” 博客,请务必保留此出处http://irow10.blog.51cto.com/2425361/1941935
标签:maven 回滚 jenkins 发布系统 buildid
原文地址:http://irow10.blog.51cto.com/2425361/1941935