自動(dòng)化部署流程
1 開發(fā)同事在gitlab上打了一個(gè)tag
2 gitlab把tag事件推送到Jenkins
3 Jenkins獲取tag源碼撒穷,編譯蓝纲,打包讶坯,構(gòu)建鏡像
4 通知測(cè)試同事進(jìn)行測(cè)試
5 Jenkins push鏡像到鏡像倉(cāng)庫(kù)
6 Jenkins執(zhí)行遠(yuǎn)程腳本
? ?6.1 遠(yuǎn)程服務(wù)器pull指定鏡像
? ?6.2 停止老版本容器丰辣,啟動(dòng)新版本容器
7 通知部署結(jié)果
準(zhǔn)備工作-新建gitlab項(xiàng)目
在gitlab建立新項(xiàng)目盛杰,idea新建項(xiàng)目焰扳,創(chuàng)建git倉(cāng)庫(kù)倦零,綁定gitlab項(xiàng)目并上傳
1 于gitlab頁(yè)面new project
輸入project name
選擇group
2 idea 新建hello項(xiàng)目
3 idea 為hello項(xiàng)目創(chuàng)建git倉(cāng)庫(kù)
idea -> VCS -> Import into Version Controller -> Create Git Repository
4 上傳至gitlab
add
commit + 綁定gitlab項(xiàng)目
push
主要步驟
主要完成下面三件事情
1 jenkins和gitlab配置事件推送
2 jenkins從gitlab拉取項(xiàng)目至服務(wù)器
3 jenkins執(zhí)行shell部署項(xiàng)目(mavan build & docker)
jenkins從gitlab拉取項(xiàng)目至服務(wù)器
1 jenkins新建項(xiàng)目
2 于項(xiàng)目的confiure -> Source Code Management 配置repositories
gitlab url 和 gitlab憑證()
3 build這里先隨便寫寫,后續(xù)再處理
4 進(jìn)入項(xiàng)目吨悍,點(diǎn)擊Build with Parameters,build
? ?點(diǎn)擊項(xiàng)目下方Build #1? ?(1為順序號(hào)扫茅,后續(xù)會(huì)自動(dòng)增加)
? ?可以在Console Output見到拉去和構(gòu)建過(guò)程
? ?注意,需要于linux 服務(wù)器設(shè)置linux id jenkins 獲得/var/lib/jenkins/workspace的修改權(quán)限
jenkins執(zhí)行shell部署項(xiàng)目(mavan build & docker)
1 因?yàn)橐獔?zhí)行maven命令育瓜,所以要在jenkins配置maven的全局變量
2 因?yàn)橐獔?zhí)行docker命令葫隙,所以將jenkins用戶添加到docker組。注意爆雹,添加后需要重啟jenkins才能生效
3 project configure build寫入對(duì)應(yīng)的shell
echo 開始構(gòu)建
pwd
echo 'mvn clean install'
mvn clean install
echo 'docker build'? ?
docker stop hello||true
docker rm hello||true
docker rmi hello||true
docker build -t hello:0.0.1 .
docker run -it -d -e TZ="Asia/Shanghai" --name hello -p 9998:9998 hello:0.0.1
echo 構(gòu)建完成
4?進(jìn)入項(xiàng)目停蕉,點(diǎn)擊Build with Parameters,build
項(xiàng)目構(gòu)建成功愕鼓,點(diǎn)擊項(xiàng)目連接可以正常訪問(wèn)(http://192.168.1.117:9998/hello)
jenkins和gitlab配置事件推送
發(fā)布一個(gè)版本時(shí),我們通常先在版本庫(kù)中打一個(gè)標(biāo)簽(tag)慧起,這里我們?cè)O(shè)置在打tag的時(shí)候會(huì)自動(dòng)進(jìn)行構(gòu)建菇晃。
1 用戶setting 產(chǎn)生api token,該token使用在gitlab 推送url中用戶登錄
2 project configure Build Triggers選擇Generic Webhook Trigger
Post content parameters增加參數(shù)ref,用作檢驗(yàn)
Token 輸入testwebhooktoken用作后面標(biāo)志項(xiàng)目
Optional filter 中設(shè)置當(dāng)參數(shù)ref 存在dev字符串時(shí)候才執(zhí)行
3 gitlab選擇項(xiàng)目,在項(xiàng)目setting -> Integrations中增加規(guī)則
選擇Tag push events 即添加tag時(shí)候發(fā)動(dòng)
url如下
http://admin:1199955825a908aba7a0eb9c217145dfeb@192.168.1.117:8080/generic-webhook-trigger/invoke?token=testwebhooktoken
1199955825a908aba7a0eb9c217145dfeb 為用戶api token,用作登錄
token=testwebhooktoken 為項(xiàng)目標(biāo)識(shí)
4 現(xiàn)在于gitlab(或idea增加tag后push,記得要勾選push tag)蚓挤,都可以觸發(fā)項(xiàng)目構(gòu)建
完整地進(jìn)行一次測(cè)試
1 idea clone項(xiàng)目
2 idea 修改HelloController 返回的message磺送,并commit
3 idea 新增tag,必須包括dev
4 idea push(勾選pusj tag)
5 gitlab看到tag已經(jīng)新增
6 gitlab 于項(xiàng)目setting -> Integrations,edit規(guī)則灿意,可以看到最新發(fā)送情況估灿,view details可以看到送了什么參數(shù),這里可以看到ref里面有上面新增的tag id
7 jenkins 點(diǎn)擊項(xiàng)目可以見到最新的build history,點(diǎn)擊進(jìn)去可以看到構(gòu)建情況缤剧,Console Output可以看到執(zhí)行時(shí)候的控制臺(tái)信息
8 項(xiàng)目構(gòu)建需要一定時(shí)間馅袁,在jenkins看到構(gòu)建完成后,于http://192.168.1.117:9998/hello可以看到最新的message