好的工具和流程能使我們事半功倍,而這個程序是不斷迭代和演進的,關于這一塊的內容,之前寫過幾篇文章:
- 在團隊中使用GitLab中的Merge Request作業模式
- 敏捷下的需求和代碼分支管理
- 不斷進化的分支和需求管理
現在又有了些新的變化和改進,之所以需要改進,肯定是遇到問題了,那么就先從問題來開始今天的文章,
問題
問題分為兩種:
方法論的問題:比如團隊采用主干開發,主干發布的模式,但是質量得不到保證,這時通過分析討論決定采用采用主干開發,分支發布的模式來解決,這屬于從方法論層面解決問題,
落地執行的問題:已經知道應該采用主干開發,分支發布的模式,但在實際操作的時候,難以執行下去,這屬于執行的問題,
在《不斷進化的分支和需求管理》一文的最后提到會引入 release 分支和 tag,實際也這么做了,但效果并不理想,原因是執行的不嚴格,沒有做到位,具體原因如下:
- 發布時是對分支進行構建發布,發布后再在 GitLab 中打上 tag,一忙起來很容易忘記;
- 鏡像的版本也是如此,
解決思路
目的其實很簡單,就是讓代碼的 tag 和鏡像的 tag 能夠一致,靠人工去做這些事情比想象的要更加困難,所以稍微轉換了下思路就能實作自動化,也就可以解決這個問題,
- 之前提到的 release 分支只做最終的集成測驗;
- 需要發布時就從 release 分支創建 tag,對 tag 來做發布,通過腳本自動創建鏡像 tag 進行 push ,
流程圖如下:

實際操作
原來在 jenkins 中對分支進行發布,需要設定特定的分支,現在需要對 tag 進行發布,tag 是不斷進行創建的,就需要用到 jenkisn 的引數化功能,
jenkins 的引數化需要用到 Git Parameter 插件,可以在 jenkins 的插件管理界面中直接安裝,如果安裝失敗,可以在這個地址進行下載:http://mirror.xmission.com/jenkins/plugins/git-parameter/latest/,更多插件的使用說明參考官網:https://plugins.jenkins.io/git-parameter/
具體配置步驟如下:
1、在 General 下面勾選 This project is parameterized ,

- Name:引數名稱,可以隨便填寫,在后面配置分支名稱時會用到;
- Parameter Type:這里我選擇 Tag,你也可以根據需要選擇 Branch 或者其他型別,
2、在 Source Code Management 選擇 git 進行設定 ,

- Branch Specifier:${tag}, tag 為第一步中輸入的引數名稱,
設定完成后,可以看到在構建界面中由原來的 Build Now 變成了 Build with Parameters ,

3、點擊 Build with Parameters 選擇需要構建的 tag 就可以了 ,

按照 tag 進行構建搞定后,剩下就是需要在構建腳本中獲取到最新的 tag 名稱,并作為引數設定到容器的環境變數和鏡像的 tag 中:
- 首先進入到 jenkins 配置的程式目錄,使用
git describe --abbrev=0 --tags獲取 tab 名稱; - 前端容器使用環境變數的方式將 tag 名稱傳入,并最終在界面顯示;
- 容器鏡像使用引數的方式拼接上 tag 名稱,
完整腳本如下:
#!/bin/bash
docker rm -f vue_demo
echo "old container vue_demo del success"
echo "begin docker build"
if [ ! -d web ]; then
mkdir -p web
echo "web dir created"
fi
# "獲取最新tag 名稱"
cd /root/code/vue_demo
tagName=`git describe --abbrev=0 --tags`
echo "tag name is:" $tagName
cd /root/build/vue_demo
cp /root/build/vue_demo/Dockerfile ./web
cp /root/build/vue_demo/init.sh ./web
cp -r /root/code/vue_demo/dist/* ./web
echo "begin docker build"
cd web
docker build -t vue_demo .
echo "build end"
docker run -d -p 9500:80 --name vue_demo -e "tag_name=${tagName}" --restart=always vue_demo
cd ..
rm -rf web
echo "update docker iamges start"
docker tag vue_demo:latest 10.10.10.10:8888/vue_demo:${tagName}
docker push 10.10.10.10:8888/vue_demo:${tagName}
echo "update docker iamges end"
最后
任何時候,如果發現事情做起來別扭,或者流程難以執行,就需要我們停下來進行思考或者和他人討論,往往一個細小的調整或許就能帶來巨大的收益,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/14135.html
標籤:其他
上一篇:求助 vmware HORIZON CLIENT 連接虛擬桌面黑屏
下一篇:Windows7專業版
