以 golang 構建專案為例,

新建任務
- 輸入一個任務名稱
- 選擇:構建一個自由風格的軟體專案
- 可選:也可以復制已創建的任務
- 確定提交


配置
再次編輯剛創建的任務

描述
對你的專案進行描述,可以寫如下資訊,
- 專案名稱
- 部署的IP地址
- 部署遠程的目錄
- 日志路徑
- 配置目錄及檔案名稱
- 啟動服務
- 停止服務
- 重啟服務
- 等等

Job Notifications
引數化構建程序
構選: 引數化構建程序
- GIT引數
- 選項引數
- 配置“構建” 和 “回滾” 引數,供構建時選擇

- 字符引數
- 設定填寫構建ID號,


原始碼管理
一般使用GIT,在 branches to build 指定分支使用變數 ${GIT_COMMIT},即引數化構建程序那一步使用的GIT引數名稱
填寫有效的 GIT 地址,并使用授權的用戶帳號,保證可以訪問倉庫代碼,

構建
會用到以下二個選項:
- 執行Shell
- Send files or execute commands over SSH

構建專案的SHELL
- 定義變數
- 洗掉或創建目錄
- 判斷用戶是“構建”還是“回滾”進行區別操作

原始碼:
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
發布操作
構建
- 選擇: Build with Parameters
- 選擇分支
- 選擇 status

回滾
- 選擇: Build with Parameters
- 選擇 status: rollback
- 設定 version 版本號

總結
Jenkins 保證了專案的持續集成與構建,加速了專案構建程序,保證人為干擾,
版本回滾對于線上的業務是必不可少的一個功能,一旦線上例外需要馬上回滾版本,容不得任何時間耽擱,

本文由博客群發一文多發等運營工具平臺 OpenWrite 發布
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/256267.html
標籤:其他
上一篇:MFC應用程式界面美化
下一篇:Hi3559AV100板載開發系列-pthread_create()下V4L2介面MJPEG像素格式的VIDIOC_DQBUF error問題解決-采用阻塞方式下select監聽

