一千萬個為什麽

搜索

碼頭標簽版本控制的最佳實踐是什麽?



我最近迷上了我們的CI服務器,在git commit上構建docker鏡像。

我們有大約8個不同的容器被構建,每個容器都有自己的語言/框架。一些是節點並且有一個package.json,另一些是不包含語義版本信息的python服務。

我的問題不是關於如何創建標簽,而是關於如何創建標簽的值。

如何確保每個標簽具有特定圖像的唯一語義版本號?誰應該成為跟蹤/遞增構建版本的權威?

轉載註明原文: 碼頭標簽版本控制的最佳實踐是什麽?

一共有 3 個回答:

我會引導你到我的帖子耦合碼頭註冊表和源代碼控制,dmaze從官方論壇回答.docker.com 。提交散列和分支名稱或標簽就足夠了。

在您的Dockerfile中,使用LABEL來記錄構建的源代碼。這可能包括來自分布式源代碼控制(git,Mercurial)的提交散列,相關的分支名稱,任何發布標簽(如果存在)以及可能的細節(如最後一次提交的時間戳)。碼頭歷史和碼頭檢查應該能夠顯示這些。     當docker推送你的圖像時,至少推兩次,使用提交散列並將分支名稱作為“版本”部分(quay.io/mycorp/imagename:123abc7,quay.io/mycorp/imagename: dmaze檢驗)。如果釋放標簽可用,則CI系統也應該使用這些標簽來推送圖像。

我們目前正在使用分支名稱/提交哈希的組合。對我們來說,這似乎夠了。時間戳,而他們是有用的國際海事組織只是增加混亂,因為他們不提供任何提交哈希沒有。

我同意 030

誰應該是追蹤/遞增構建版本的權威

100%是CI的責任,通過其他團隊之間的適當溝通來維護此類事情。

如何確保每個標簽具有唯一的語義版本號   具體的圖像?

可以創建由多個元素組成的標簽,例如,時間戳,git commit hash和語義版本的組合。後者必須手動設置,而前兩個可以自動化。這樣的標簽可能如下所示:

20171015141729-58617f500f7efe236c7ba6a1dfdf37a478b4c878-0.1.4

這個標簽包含構建日期,提交和語義版本。如果Docker鏡像在生產環境中運行,並且發現了一個bug,那麽就知道該產品的版本,內部的代碼以及何時生成鏡像以及在什麽情況下。

誰應該是追蹤/遞增構建的權威   版本

在我看來,這應該是CI的責任,因為這可以使流程自動化,並且標簽的創建可以自動化,因此這種工具是適合工作的正確工具。

我想你使用Jenkins的CI/CD的DevOps工具之一,我建議采用以下方法,

如果你使用類似詹金斯的東西,

  • 您可以配置作業,以便您可以使用Jenkins環境變量“BUILD_ID”,該作業可在檢測作業的構建標識時將其標記到圖像上。這樣你可以版本控制你的碼頭圖像。請檢查下面的例子。

ex:- sudo docker build -t :

因此,如果您的SCM有類似於標記的機制,則可以在基於作業的構建中或在JENKINS HOME_FOLDER中的構建ID的config.xml中檢查相應構建標識中的標記。