以 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=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 打包好的文件复制到近程机器上。

源码:

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

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