我有一個 C# 應用程式,不同的團隊在該應用程式上并行作業,每個團隊都可以在功能分支上作業。我正在配置構建 Docker 映像并將它們推送到 Azure 容器注冊表的構建管道。在我們的日常作業中,在部署程序中,我們需要為每個分支/團隊處理特定的 Docker 鏡像,以便每個團隊可以隨時部署他們的鏡像。
我想知道,在多分支專案中是否有任何最佳實踐來標記 Docker 鏡像?例如,<version>-<commit_hash>-<branch_name>?
uj5u.com熱心網友回復:
既然你提到了 .NET,我建議看看GitVersion。GitVersion 是一個開源工具,它根據當前分支的歷史記錄生成SemVer版本號。
有很多規則決定了版本號的計算方式,您可以對其進行配置以適應您的特定作業流程。
例如,gitversion在master具有默認設定的分支上運行將產生如下結果:
{
"Major":0,
"Minor":1,
"Patch":0,
"PreReleaseTag":"",
"PreReleaseTagWithDash":"",
"PreReleaseLabel":"",
"PreReleaseNumber":"",
"WeightedPreReleaseNumber":60000,
"BuildMetaData":45,
"BuildMetaDataPadded":"0045",
"FullBuildMetaData":"45.Branch.master.Sha.66042002fd0ddeb167932a2726de8f35364b1352",
"MajorMinorPatch":"0.1.0",
"SemVer":"0.1.0",
"LegacySemVer":"0.1.0",
"LegacySemVerPadded":"0.1.0",
"AssemblySemVer":"0.1.0.0",
"AssemblySemFileVer":"0.1.0.0",
"FullSemVer":"0.1.0 45",
"InformationalVersion":"0.1.0 45.Branch.master.Sha.66042002fd0ddeb167932a2726de8f35364b1352",
"BranchName":"master",
"EscapedBranchName":"master",
"Sha":"66042002fd0ddeb167932a2726de8f35364b1352",
"ShortSha":6604200,
"NuGetVersionV2":"0.1.0",
"NuGetVersion":"0.1.0",
"NuGetPreReleaseTagV2":"",
"NuGetPreReleaseTag":"",
"VersionSourceSha":"835cac8f9c24a5f7d980f1ccc26af4eab399bbf0",
"CommitsSinceVersionSource":45,
"CommitsSinceVersionSourcePadded":"0045",
"UncommittedChanges":1,
"CommitDate":"2021-07-06"
}
您可以使用 的值FullSemVer作為特定分支生成的 Docker 鏡像的標簽。但是,有一個問題:Docker 不支持標簽名稱中的 字符:
標簽名稱必須是有效的 ASCII,并且可以包含小寫和大寫字母、數字、下劃線、句點和破折號。標記名稱不能以句點或破折號開頭,最多可包含 128 個字符。
為了解決這個問題,您必須配置 GitVersion 以生成唯一的版本號而不使用該 字符。查看GitVersion 支持的不同版本控制模式,以找到適合您的分支和部署策略的模式。
uj5u.com熱心網友回復:
您應該嘗試我在下面提到的這種 docker 鏡像標簽,它可以輕松找到該分支的分支名稱和注釋。
分支名稱-分支提交
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/329479.html
標籤:混帐 天蓝色 码头工人 git-flow 天蓝色容器注册表
