2021-02-03

Jenkins 构建及回滚任务

以 golang 构建项目为例。

cicd

新建任务

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

image-20210203153829359

image-20210203153954925

配置

再次编辑刚创建的任务

image-20210203154135859

描述

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

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

image-20210203171056828

Job Notifications

参数化构建过程

构选: 参数化构建过程

  1. GIT参数
    1. image-20210203171232726
  2. 选项参数
    1. 配置"构建" 和 "回滚" 参数。供构建时选择
    2. image-20210203171306056
  3. 字符参数
    1. 设置填写构建ID号。
    2. image-20210203171413932
    3. image-20210203171503041

源码管理

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

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

image-20210203171635027

构建

会用到以下二个选项:

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

image-20210203171832703

构建项目的SHELL

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

image-20210203172045718

源码:

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=0set GOARCH=amd64set GOOS=linuxexport GO111MODULE=onexport GOPROXY=https://goproxy.cn,directcase $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 打包好的文件复制到远程机器上。

image-20210203172124561

源码:

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 个版本的数据。

image-20210203172414790

源码:

# 项目备份不可能无限备份。保留 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

image-20210203172706624

回滚

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

image-20210203172929159

总结

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

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

空树之空

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









原文转载:http://www.shaoqun.com/a/524566.html

跨境电商:https://www.ikjzd.com/

modcloth:https://www.ikjzd.com/w/1271

亿恩:https://www.ikjzd.com/w/1461


以golang构建项目为例。新建任务输入一个任务名称选择:构建一个自由风格的软件项目可选:也可以复制已创建的任务确定提交配置再次编辑刚创建的任务描述对你的项目进行描述,可以写如下信息。项目名称部署的IP地址部署远程的目录日志路径配置目录及文件名称启动服务停止服务重启服务等等JobNotifications参数化构建过程构选:参数化构建过程GIT参数选项参数配置"构建"和"回滚"参数。供构建时选择字
sgshop:sgshop
insider:insider
11个You Tube数字营销渠道清单来袭,卖家了解一下!:11个You Tube数字营销渠道清单来袭,卖家了解一下!
收下这份亚马逊A+优化攻略,助力旺季销量提升20%!:收下这份亚马逊A+优化攻略,助力旺季销量提升20%!
亚马逊Q&A里还有多少你不知道的事:亚马逊Q&A里还有多少你不知道的事

No comments:

Post a Comment