*系列匯總*
文章匯總地址如右:Jenkins入門教程。
如果相中哪個,點擊進去便是。希望正在讀這段話的你能夠在這個小系列中獲得自信以及喜悅!
1,緣起。
許多公司在做安卓的構建或者其他項目構建的同時,會有打tag到Gitlab的需求,這個需求的存在有其實在的價值意義,不僅僅讓每一次我們發布過的代碼有記錄存留,也能夠方便一些其他的功能(比如回滾),因此,今天就來說說這個事兒。
這個功能的實現依賴於Jenkins的git插件,不過一般都默認有安裝。
先准備一個測試項目,內容如下:
然后來到Jenkins處,做一些簡單的功能,能夠用於測試驗證即可。
執行shell處加一些簡單的操作:
- git pull origin master
- echo "**********************************************"
- cat README.md
- echo "**********************************************"
進入正式配置之前需要先安裝本文的主角Git Parameter插件,插件詳情,可以點我查看。
在構建后的操作中添加Git Publisher,然后如圖中所示配置:
在構建后操作當中選擇Git Publisher,然后如圖配置:
- 配置一:定義tag名稱,release-$BUILD_NUMBER這里取用了一個Jenkins的環境變量,用於每次的tag自增問題。
- 配置二:選中,以表示創建一個新的tag。
- 配置三:要推送的項目。
接着我們構建一下看看效果:
看樣子tag已經打好並且推送到遠程服務器去了。
現在去git里邊看看是否有了。
圖中圈起來的地方可以看到,正好與我們構建此時對應的,創建了三個標簽。
現在我們模擬開發,更改一下項目文件內容,然后再構建一下看看情況。
來波操作:
- Administrator@liqilong MINGW64 ~/Desktop/gittest/eryajf (master)
- $ echo "第二次添加內容用於測試">> README.md
- Administrator@liqilong MINGW64 ~/Desktop/gittest/eryajf (master)
- $ git commit -a -m "add two"
- warning: LF will be replaced by CRLF in README.md.
- The file will have its original line endings in your working directory.
- [master 822b2f3] add two
- 1 file changed,1 insertion(+),1 deletion(-)
- Administrator@liqilong MINGW64 ~/Desktop/gittest/eryajf (master)
- $ git push
- Enumerating objects:5,done.
- Counting objects:100%(5/5),done.
- Delta compression using up to 4 threads.
- Compressing objects:100%(2/2),done.
- Writing objects:100%(3/3),307 bytes |76.00KiB/s,done.
- Total3(delta 0), reused 0(delta 0)
- To192.168.106.70:linux/eryajf.git
- 635b61c..822b2f3 master -> master
然后再去構建一下:
第四次構建,已經看到剛剛模擬開發所添加的內容了。
那么現在,就可以引出這個自動打tag的功能所帶來的另外一個大方便了,那就是方便回滾。
2,回滾功能。
我們可以在參數化構建當中進行參數的定義,依賴於Git版本控制的特性,當用戶選擇的是構建時,可以選擇對應的分支進行構建,當用戶選擇的是回滾是,那么可以選擇對應的tag進行回滾。事實上與分支的構建回滾是一個道理,不過這里直接選擇tag,也非常方便。
那么在驗證之前,我們需要對Jenkins進行一些小小的調整,通過添加剛剛表述的參數,以及執行的shell的配合,來完成這樣一個構建回滾各有分工的一個事情。
1,添加mode選項。
在參數化構建過程中先添加一個選項參數,從而讓構建以及回滾兩種情況存在。具體配置如圖:
2,再添加branch選項。
然后添加一個用於構建不同代碼分支的字符參數,這個是一個很常規的配置,就不做過多介紹,具體如圖:
3,添加Git Parameter選項。
然后添加一個用於回滾不同tag的選項,這里的tag是我們項目自動生成的,隨后會做一下總結,具體如圖:
4,修改shell內容。
修改一下shell的執行內容,做一個簡單判斷,腳本如下:
- cd $WORKSPACE
- if[ $mode =="deploy"];then
- git checkout $branch
- git pull
- echo "**********************************************"
- cat README.md
- echo "**********************************************"
- else
- git reset --hard $tagbak
- echo "**********************************************"
- cat README.md
- echo "**********************************************"
- fi
如果你對Jenkins熟悉的話,那么看到這個地方,估計就已經能夠知道,上邊的功能是什么了。
我們的開發進行日常開發,然后進行日常構建,一切就走分支這一條了,沒tag這邊啥事兒,只不過在每次構建的時候,都創建一個與構建歷史數一致的tag,為了不讓這個tag浪費,那么我們就廢物利用,通過這個自動生成的tag,實現了回滾的功能。
開發同學專注開發(branch),運維同學專注部署(deploy),一旦需要回滾(rollback),利用程序自動生成的tag(tag)來進行回滾咯。這,就是各有分工。
ok,最后是驗證的時刻了。
3,驗證。
驗證也非常簡單,通過三次構建即可驗證:
- 構建一:初始內容,正常構建。
- 構建二:添加內容,正常構建。
- 構建三;直接回滾,驗證結果。
1,構建一。
為了更清晰的看實驗效果,我將剛剛的歷史清空,重打鼓另開張,新建一個項目進行測試。
現在准備出測試文件,內容如下:
進行常規構建:
2,構建二。
模擬開發,添加內容:
進行常規構建:
3,構建三。
直接通過tag進行回滾。
然后查看構建結果:














