在多分支项目中标记 Docker 映像的最佳做法是什么?



我有一个c#应用程序,不同的团队并行工作,每个团队可能在功能分支上工作。我正在配置构建管道,构建Docker映像并将它们推送到Azure容器注册表。在我们的日常工作中,在部署期间,我们需要为每个分支/团队解决特定的Docker映像,以便每个团队可以随时部署他们的映像。

我想知道,在多分支项目中是否有任何最佳实践来标记Docker图像?例如:<version>-<commit_hash>-<branch_name>?

既然你提到了。net,我建议你看看GitVersion。GitVersion是一个开源工具,可以根据当前分支的历史生成SemVer版本号。

有一堆规则规定如何计算版本号,你可以配置以适应你的特定工作流程。

例如,使用默认设置在master分支上运行gitversion将产生如下内容:

{
"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支持的不同版本控制模式,找到适合您的分支和部署策略的版本控制模式。

您应该尝试下面我提到的这种docker图像标记,它可以很容易地找到分支名称和该分支的注释。

Branchname-branchcommit

相关内容