Jenkins 構建及回滾任務

以 golang 構建項目為例赠制。

cicd

新建任務

  1. 輸入一個任務名稱
  2. 選擇:構建一個自由風格的軟件項目
  3. 可選:也可以復制已創(chuàng)建的任務
  4. 確定提交
image-20210203153829359
image-20210203153954925

配置

再次編輯剛創(chuàng)建的任務

image-20210203154135859

描述

對你的項目進行描述津坑,可以寫如下信息与柑。

  1. 項目名稱
  2. 部署的IP地址
  3. 部署遠程的目錄
  4. 日志路徑
  5. 配置目錄及文件名稱
  6. 啟動服務
  7. 停止服務
  8. 重啟服務
  9. 等等
image-20210203171056828

Job Notifications

參數(shù)化構建過程

構選: 參數(shù)化構建過程

  1. GIT參數(shù)
    1. image-20210203171232726
  2. 選項參數(shù)
    1. 配置“構建” 和 “回滾” 參數(shù)拴疤。供構建時選擇
    2. image-20210203171306056
  3. 字符參數(shù)
    1. 設置填寫構建ID號。
    2. image-20210203171413932
    3. image-20210203171503041

源碼管理

一般使用GIT缭付,在 branches to build 指定分支使用變量 ${GIT_COMMIT},即參數(shù)化構建過程那一步使用的GIT參數(shù)名稱

填寫有效的 GIT 地址干毅。并使用授權的用戶帳號,保證可以訪問倉庫代碼涂圆。

image-20210203171635027

構建

會用到以下二個選項:

  1. 執(zhí)行Shell
  2. Send files or execute commands over SSH
image-20210203171832703

構建項目的SHELL

  1. 定義變量
  2. 刪除或創(chuàng)建目錄
  3. 判斷用戶是“構建”還是“回滾”進行區(qū)別操作
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 


# 備份路徑不存在則創(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 打包好的文件復制到遠程機器上润歉。

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 個版本的數(shù)據(jù)九妈。

image-20210203172414790

源碼:

# 項目備份不可能無限備份反砌。保留 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ā)布操作

構建

  1. 選擇: Build with Parameters
  2. 選擇分支
  3. 選擇 status
image-20210203172706624

回滾

  1. 選擇: Build with Parameters
  2. 選擇 status: rollback
  3. 設置 version 版本號
image-20210203172929159

總結

Jenkins 保證了項目的持續(xù)集成與構建,加速了項目構建過程策菜,保證人為干擾晶疼。

版本回滾對于線上的業(yè)務是必不可少的一個功能,一旦線上異常需要馬上回滾版本又憨。容不得任何時間耽擱翠霍。

空樹之空

本文由博客群發(fā)一文多發(fā)等運營工具平臺 OpenWrite 發(fā)布

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蠢莺,隨后出現(xiàn)的幾起案子寒匙,更是在濱河造成了極大的恐慌,老刑警劉巖躏将,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锄弱,死亡現(xiàn)場離奇詭異,居然都是意外死亡祸憋,警方通過查閱死者的電腦和手機会宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚯窥,“玉大人掸鹅,你說我怎么就攤上這事塞帐。” “怎么了巍沙?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵葵姥,是天一觀的道長。 經(jīng)常有香客問我赎瞎,道長牌里,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任务甥,我火速辦了婚禮牡辽,結果婚禮上,老公的妹妹穿的比我還像新娘敞临。我一直安慰自己态辛,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布挺尿。 她就那樣靜靜地躺著奏黑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪编矾。 梳的紋絲不亂的頭發(fā)上熟史,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音窄俏,去河邊找鬼蹂匹。 笑死,一個胖子當著我的面吹牛凹蜈,可吹牛的內(nèi)容都是我干的限寞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼仰坦,長吁一口氣:“原來是場噩夢啊……” “哼履植!你這毒婦竟也來了?” 一聲冷哼從身側響起悄晃,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤玫霎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后妈橄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庶近,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年眷细,在試婚紗的時候發(fā)現(xiàn)自己被綠了拦盹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡溪椎,死狀恐怖普舆,靈堂內(nèi)的尸體忽然破棺而出恬口,到底是詐尸還是另有隱情,我是刑警寧澤沼侣,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布祖能,位于F島的核電站,受9級特大地震影響蛾洛,放射性物質發(fā)生泄漏养铸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一轧膘、第九天 我趴在偏房一處隱蔽的房頂上張望钞螟。 院中可真熱鬧,春花似錦谎碍、人聲如沸鳞滨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拯啦。三九已至,卻和暖如春熔任,著一層夾襖步出監(jiān)牢的瞬間褒链,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工疑苔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甫匹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓夯巷,卻偏偏與公主長得像赛惩,于是被迫代替她去往敵國和親哀墓。 傳聞我的和親對象是個殘疾皇子趁餐,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容