日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jenkins 中以构建 Tag 来实现版本管理

發布時間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jenkins 中以构建 Tag 来实现版本管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

好的工具和流程能使我們事半功倍,而這個過程是不斷迭代和演進的。關于這一塊的內容,之前寫過幾篇文章:

  • 在團隊中使用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/bashdocker?rm?-f?vue_demo echo?"old?container?vue_demo?del?success"echo?"begin?docker?build" if?[?!?-d?web?];?thenmkdir?-p?webecho?"web?dir?created" fi#?"獲取最新tag?名稱" cd?/root/code/vue_demo tagName=`git?describe?--abbrev=0?--tags` echo?"tag name is:"?$tagNamecd?/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/*?./webecho?"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_democd?.. rm?-rf?webecho?"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"??????????????????????

最后

任何時候,如果發現事情做起來別扭,或者流程難以執行,就需要我們停下來進行思考或者和他人討論,往往一個細小的調整或許就能帶來巨大的收益。

總結

以上是生活随笔為你收集整理的Jenkins 中以构建 Tag 来实现版本管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。