乐趣区

关于golang:Jenkins-构建及回滚任务

以 golang 构建我的项目为例。

新建工作

  1. 输出一个工作名称
  2. 抉择:构建一个自在格调的软件我的项目
  3. 可选:也能够复制已创立的工作
  4. 确定提交

配置

再次编辑刚创立的工作

形容

对你的我的项目进行形容,能够写如下信息。

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

Job Notifications

参数化构建过程

构选:参数化构建过程

  1. GIT 参数

  2. 选项参数

    1. 配置“构建”和“回滚”参数。供构建时抉择
  3. 字符参数

    1. 设置填写构建 ID 号。

源码治理

个别应用 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 保障了我的项目的继续集成与构建,减速了我的项目构建过程,保障人为烦扰。

版本回滚对于线上的业务是必不可少的一个性能,一旦线上异样须要马上回滚版本。容不得任何工夫耽误。

退出移动版