2017-06-12 70 views
2

我有多個環境。它們是調試,開發和產品。我想通過最新的dev(最新的)或dev(版本1.1)或prod(最新的)來參考圖像。我將如何去標記構建和推送?Docker:爲環境標記圖像時的最佳做法是什麼

我的第一個想法是爲每個環境調試,開發和產品創建單獨的存儲庫。但我開始懷疑我是否可以只用一個存儲庫來做到這一點。如果可能對一個容器做什麼,在構建和推送時語法會是什麼?

回答

6

這是什麼工作最適合我和我的團隊,我建議:

我推薦每個項目單回購所有環境,更容易管理。特別是如果你有微服務,那麼你的項目由多個微服務組成。爲每個項目管理一個回購是一件痛苦的事情。

例如,我有一個用戶api。 碼頭回購是users。此回購使用alpha,devbeta

我們創造我們的CI/CD服務稱爲$DOCKER_TAG的環境變量,並在構建創建時設置它,像這樣:

DOCKER_TAG: $(date +%Y%m%d).$BUILD_NUMBER =>這是在bash。

其中$BUILD_NUMBER先前由觸發CI/CD運行時正在運行的構建設置。例如,當我們合併一個PR時,一個構建被觸發,因爲構建號碼。 1,所以$BUILD_NUMBER: 120171612.1 所以我們的碼頭工人形象是:

生成的標籤使用時看起來像這樣users:20171612.1

爲什麼這種格式?

  • 它允許我們部署在不同環境下使用 運行任務相同的標籤。
  • 它可以幫助我們跟蹤圖像何時被創建以及它構建的屬於哪個 。
  • 通過構建編號,我們可以根據需要找到提交信息並將它們映射到一起,便於排查。
  • 它允許我們爲每個項目使用相同的碼頭回購。
  • 很高興知道我們何時從標籤本身創建圖像。

所以,當我們合併時,我們創建一個單一的構建。然後,根據需要將構建部署到不同的環境中。我們不會爲每個環境創建獨立的構建。我們跟蹤部署在哪裏。

如果在具有特定標籤的環境中存在一個錯誤,我們會在這種情況下拉出這樣的標籤,構建並搜索並重現問題。如果我們發現問題,我們在標籤20171612.1中有內部編號,所以我們知道構建編號。 1有問題。我們檢查我們的CI/CD服務,告訴我們最新的提交是什麼。我們從git中檢出提交散列並調試並解決問題。然後,我們將它作爲修補程序進行部署,例如。

如果您還沒有CI/CD,而且您正在手動執行此操作,只需手動設置該格式的標籤(幾乎完全鍵入完整的字符串),而不是使用內部版本號,請使用提交短git的哈希值(如果您使用的git):

20170612.ed73d4f

所以,你知道什麼是最當前提交這樣你就可以解決問題與特定的圖像,並映射回代碼來創建修正需要。

你也可以爲你的標籤定義任何其他的後綴映射到代碼版本,所以你可以很容易地排除故障(例如,如果你使用的話,映射到git標籤)。

嘗試一下,根據需要進行調整,併爲您和您的團隊做最有效的工作。圍繞標記有很多方法。我們嘗試了很多,這是迄今爲止我們最喜歡的。

希望這有幫助。

1

我認爲「最新」是最後一幅生產性圖片。這是我期待的碼頭樞紐,儘管沒有開發中的圖像。

另一方面,您可以使用標籤,例如0.0.1-dev。當這個圖像完成後,您可以再次執行標記並推送,然後存儲庫會檢測到這些圖層已經存儲在存儲庫中。

現在,當您正在討論一個候選版本以便生產時,儘管不在環境保護之下,您仍然只能擁有語義版本。這就是我會做的。

相關問題