以 golang 構建項目為例赠制。
新建任務
- 輸入一個任務名稱
- 選擇:構建一個自由風格的軟件項目
- 可選:也可以復制已創(chuàng)建的任務
- 確定提交
配置
再次編輯剛創(chuàng)建的任務
描述
對你的項目進行描述津坑,可以寫如下信息与柑。
- 項目名稱
- 部署的IP地址
- 部署遠程的目錄
- 日志路徑
- 配置目錄及文件名稱
- 啟動服務
- 停止服務
- 重啟服務
- 等等
Job Notifications
參數(shù)化構建過程
構選: 參數(shù)化構建過程
- GIT參數(shù)
- 選項參數(shù)
- 配置“構建” 和 “回滾” 參數(shù)拴疤。供構建時選擇
- 字符參數(shù)
- 設置填寫構建ID號。
源碼管理
一般使用GIT缭付,在 branches to build 指定分支使用變量 ${GIT_COMMIT}
,即參數(shù)化構建過程那一步使用的GIT參數(shù)名稱
填寫有效的 GIT 地址干毅。并使用授權的用戶帳號,保證可以訪問倉庫代碼涂圆。
構建
會用到以下二個選項:
- 執(zhí)行Shell
- Send files or execute commands over SSH
構建項目的SHELL
- 定義變量
- 刪除或創(chuàng)建目錄
- 判斷用戶是“構建”還是“回滾”進行區(qū)別操作
源碼:
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
# 備份路徑不存在則創(chuàng)建
if [ ! -d ${back_path_num} ]; then
mkdir -p $back_path_num
echo "$back_path_num 創(chuàng)建成功"
fi
# 項目路徑不存在則創(chuàng)建
if [ ! -d ${target_path} ]; then
mkdir -p $target_path
echo "$target_path 創(chuàng)建成功"
fi
# 配置 Go 環(huán)境
set CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct
case $status in
deploy)
echo "開始構建項目..."
# 生成可執(zhí)行文件
/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 個版本的數(shù)據(jù)九妈。
源碼:
# 項目備份不可能無限備份反砌。保留 10 個版本的歷史數(shù)據(jù)雾鬼。
reserved_num=10 #保留文件數(shù)
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
發(fā)布操作
構建
- 選擇: Build with Parameters
- 選擇分支
- 選擇 status
回滾
- 選擇: Build with Parameters
- 選擇 status: rollback
- 設置 version 版本號
總結
Jenkins 保證了項目的持續(xù)集成與構建,加速了項目構建過程策菜,保證人為干擾晶疼。
版本回滾對于線上的業(yè)務是必不可少的一個功能,一旦線上異常需要馬上回滾版本又憨。容不得任何時間耽擱翠霍。
本文由博客群發(fā)一文多發(fā)等運營工具平臺 OpenWrite 發(fā)布