Jenkins 构建及回滚任务

时间:2021-02-04 12:03:58   收藏:0   阅读:0

以 golang 构建项目为例。

技术图片

新建任务

  1. 输入一个任务名称
  2. 选择:构建一个自由风格的软件项目
  3. 可选:也可以复制已创建的任务
  4. 确定提交

技术图片

技术图片

配置

再次编辑刚创建的任务

技术图片

描述

对你的项目进行描述,可以写如下信息。

  1. 项目名称
  2. 部署的IP地址
  3. 部署远程的目录
  4. 日志路径
  5. 配置目录及文件名称
  6. 启动服务
  7. 停止服务
  8. 重启服务
  9. 等等

技术图片

Job Notifications

参数化构建过程

构选: 参数化构建过程

  1. GIT参数
    1. 技术图片
  2. 选项参数
    1. 配置“构建” 和 “回滚” 参数。供构建时选择
    2. 技术图片
  3. 字符参数
    1. 设置填写构建ID号。
    2. 技术图片
    3. 技术图片

源码管理

一般使用GIT,在 branches to build 指定分支使用变量 ${GIT_COMMIT},即参数化构建过程那一步使用的GIT参数名称

填写有效的 GIT 地址。并使用授权的用户帐号,保证可以访问仓库代码。

技术图片

构建

会用到以下二个选项:

  1. 执行Shell
  2. Send files or execute commands over SSH

技术图片

构建项目的SHELL

  1. 定义变量
  2. 删除或创建目录
  3. 判断用户是“构建”还是“回滚”进行区别操作

技术图片

源码:

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

发布操作

构建

  1. 选择: Build with Parameters
  2. 选择分支
  3. 选择 status

技术图片

回滚

  1. 选择: Build with Parameters
  2. 选择 status: rollback
  3. 设置 version 版本号

技术图片

总结

Jenkins 保证了项目的持续集成与构建,加速了项目构建过程,保证人为干扰。

版本回滚对于线上的业务是必不可少的一个功能,一旦线上异常需要马上回滚版本。容不得任何时间耽搁。

技术图片

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!