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=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 打包好的文件復制到遠程機器上。

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 發布


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM