4
Jenkins Build Rollback
source link: https://www.sgfoot.com/jenkins-build-rollback.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
以 golang 构建项目为例。
新建任务
- 输入一个任务名称
- 选择:构建一个自由风格的软件项目
- 可选:也可以复制已创建的任务
- 确定提交
配置
再次编辑刚创建的任务
描述
对你的项目进行描述,可以写如下信息。
- 项目名称
- 部署的IP地址
- 部署远程的目录
- 日志路径
- 配置目录及文件名称
- 启动服务
- 停止服务
- 重启服务
- 等等
Job Notifications
参数化构建过程
构选: 参数化构建过程
- GIT参数
- 选项参数
- 配置“构建” 和 “回滚” 参数。供构建时选择
- 字符参数
- 设置填写构建ID号。
源码管理
一般使用GIT,在 branches to build 指定分支使用变量 ${GIT_COMMIT}
,即参数化构建过程那一步使用的GIT参数名称
填写有效的 GIT 地址。并使用授权的用户帐号,保证可以访问仓库代码。
构建
会用到以下二个选项:
- 执行Shell
- Send files or execute commands over SSH
构建项目的SHELL
- 定义变量
- 删除或创建目录
- 判断用户是“构建”还是“回滚”进行区别操作
源码:
set -x # 定义名称 program_name=go_test # 项目压缩名称 program_filename=${program_name}.tar.gz # 项目路径 target_path="${WORKSPACE}/target/" # 备份路径 back_path="${WORKSPACE}/bak/" if [ -f "${back_path}${program_filename}" ];then rm -f ${back_path}${program_filename} fi ls -l $back_path # 当前构建ID的路径 back_path_num="${back_path}${BUILD_NUMBER}" # 删除前必须判断是否存在 if [ -f "${target_path}${program_filename}" ]; then rm -rf "${target_path}${program_filename}" echo "${target_path}${program_filename} 删除成功" fi # 备份路径不存在则创建 if [ ! -d ${back_path_num} ]; then mkdir -p $back_path_num echo "$back_path_num 创建成功" fi # 项目路径不存在则创建 if [ ! -d ${target_path} ]; then mkdir -p $target_path echo "$target_path 创建成功" fi # 配置 Go 环境 set CGO_ENABLED=0 set GOARCH=amd64 set GOOS=linux export GO111MODULE=on export GOPROXY=https://goproxy.cn,direct case $status in deploy) echo "开始构建项目..." # 生成可执行文件 /usr/local/go/bin/go build -mod=vendor -tags=jsoniter -o "${program_name}" . # 压缩打包 tar -zcf ${program_filename} --exclude=docs ${program_name} # 将压缩好的程序复制到备份文件夹里 cp -f ${program_filename} ${back_path_num} # 将压缩好的程序复制到 target 文件里 cp -f ${program_filename} ${target_path} # 将其删除压缩包和二进制文件 rm -f ${program_filename} rm -f ${program_name} echo "构建完成" ;; rollback) echo "版本回滚.回滚至 $version 版本" cd "${back_path}${version}" # 将历史版本的文件复到项目目录里 cp -f * "${target_path}" # 回滚的版本也复制到当前版本的文件夹里,方便下次回滚。 cp -f * "${back_path_num}" ;; esac
复制到远程机器 SHELL
将 jenkins 打包好的文件复制到远程机器上。
源码:
set -x # 项目名称 app_name=go_test.tar.gz # 项目路径 app_path=/data/tmp/ # 复制目标目录 origin_path=/root/target/ # 源文件 origin_filename=${origin_path}${app_name} # 解压文件 sudo tar -zxvf ${origin_filename} -C ${app_path} # 复制完后,删除源始文件 if [ -f "${origin_filename}" ];then rm -f ${origin_filename} echo "${origin_filename} delete success" fi # 写上你启动程序的代码。 echo "completed"
维护备份 SHELL
jenkins 里的备份不可能无限的使用,否则磁盘会无法使用。必须对备份的目录进行维护。
我们可以设置保留 10 个版本的数据。
源码:
# 项目备份不可能无限备份。保留 10 个版本的历史数据。 reserved_num=10 #保留文件数 file_dir=${WORKSPACE}/bak/ date=$(date "+%Y%m%d-%H%M%S") cd $file_dir #进入备份目录 file_num=$(ls -l | grep '^d' | wc -l) #当前有几个文件夹,即几个备份 while(( $file_num > $reserved_num )) do old_file=$(ls -rt | head -1) #获取最旧的那个备份文件夹 echo $date "Delete File:"$old_file rm -rf "${file_dir}$old_file" let "file_num--" done ls -l $file_dir
发布操作
构建
- 选择: Build with Parameters
- 选择分支
- 选择 status
回滚
- 选择: Build with Parameters
- 选择 status: rollback
- 设置 version 版本号
总结
Jenkins 保证了项目的持续集成与构建,加速了项目构建过程,保证人为干扰。
版本回滚对于线上的业务是必不可少的一个功能,一旦线上异常需要马上回滚版本。容不得任何时间耽搁。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK