Jenkins构建及回滚任务
以golang构建项目为例。
以 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 保证了项目的持续集成与构建,加速了项目构建过程,保证人为干扰。
版本回滚对于线上的业务是必不可少的一个功能,一旦线上异常需要马上回滚版本。容不得任何时间耽搁。
本文由博客群发一文多发等运营工具平台OpenWrite发布
-
上一篇
JenkinsAreaMeetup2018上海沙龙回顾
原标题:JenkinsAreaMeetup2018上海沙龙回顾
-
下一篇
jenkins部署过程中,构建后启动失败的时候,我们能够快速回滚到上一版本,保持程序的稳定性。
步骤
1、选择构建保留版本
1)保留5个构建版本:
2)参数化构建:
2、调整有不一致配置的地方
其他的和之前配置一样,接下来看点不一样的。
3、配置可执行shell 脚本:
case$deploy_environmentindeploy)echo"deploy$deploy_environment"mvn install -Dmaven.test.skip=true-e path="${WORKSPACE}/bak/${BUILD_NUMBER}"创建每次要备份的目录echo "$path"echo "-d $path"if [ -d $path ];thenecho "The files is already exists "else mkdir -p $pathfi \cp -f $WORKSPACE/yuxuntoo-member/target/*.jar $path 将打包好的jar包备份到相应目录,覆盖已存在的目标echo "Completing!" ;; rollback)echo "rollback $deploy_env version=$version" alt="jenkins版本控制及回滚配置">
jenkins版本控制及回滚配置