Jenkins自动部署与回滚
Deploy发布的思路:
用户无需填写 Version 直接选择对应的项目和 Deploy 发布即可,会自动生成一个 项目名+构建时间 的备份文件
多人使用Jenkins构建的时候会不知道 Version 要填什么 而且本人不喜欢使用 Version 这个变量
Rollback回退的思路:
选择Rollback 选择对应的回退版本即可
安装 Active Choices Plug-in 插 件
我这是安装好的 如果没安装 会有安装选项 安装完启用即可
配置参数化构建
配置 Active Choices Parameter
填写名字 和参数选项 我配置的是多项目实例的
return [ "projectName1", #注意这里有个逗号 "projectName2", "projectName3" ]
再添加一个 Active Choices Parameter 配置发布和回滚参数
return [ "Deploy", "Rollback" ]
配置Active Choices Reactive Parameter
填写名字和指定备份脚本的存放的路径
备份是放在Jenkins服务器上的
# 指定当前job的备份文件夹 注意这里不能使用${WORKSPACE}参数 但是可以使用Active Choices Parameter定义的参数如上面的${projectName} path="/var/jenkins_home/workspace/project/${projectName}/backup/" tags=['bash','-c',"ls -t1 ${path}"].execute().text.readLines() if (Status.equals("Rollback")) { if (projectName.equals("projectName1")){ return tags } if (projectName.equals("projectName2")){ return tags } if (projectName.equals("projectName3")){ return tags } }
指定上面Active Choices Parameter 定义的参数 多个参数中间用逗号分隔
编辑shell 实现发布和回滚
我的项目是java 脚本如下 并保留3个备份 超过3个会自动删除最旧的
echo "回滚" path="${WORKSPACE}/${projectName}/back_up/${projectName}-${BUILD_TIMESTAMP}" case $Status in Deploy) echo "Status:$Status" mkdir -p $path cp -r ${WORKSPACE}/${projectName}/target/xjar $path/ cp -r ${WORKSPACE}/${projectName}/target/lib $path/ cp -r ${WORKSPACE}/${projectName}/target/${projectName}*.jar $path/ echo "开始删除超过3个的旧文件" backup_path="${WORKSPACE}/${projectName}/back_up" backup_copies=3 FILENUM=`ls -lrt ${WORKSPACE}/${projectName}/back_up/ | grep ${projectName}*| wc -l` if [ ${FILENUM} -gt ${backup_copies} ]; then OLDEST_File=`ls -lrt ${backup_path}| grep ${projectName}* |awk '{print $9}' | head -1` echo "最旧的文件夹: ${OLDEST_File}" rm -rf ${backup_path}/${OLDEST_File} echo "文件夹: ${OLDEST_File}已删除" fi ;; Rollback) echo "Status:$Status" cp -rf ${WORKSPACE}/${projectName}/back_up/${RollbackVersion}/* ${WORKSPACE}/${projectName}/target/ ;; esac