Docker 在多分支项目中标记图像的最佳做法是什么?
What's the best practice for Docker images tagging in a multibranch project?
我有一个 C# 应用程序,不同的团队在该应用程序上并行工作,每个团队可能在功能分支上工作。我正在配置构建 Docker 图像并将它们推送到 Azure 容器注册表的构建管道。
在我们的日常工作中,在部署期间,我们需要为每个 branch/team 处理特定的 Docker 图像,以便每个团队可以随时部署他们的图像。
我想知道,在多分支项目中是否有任何最佳实践来标记 Docker 图像?例如,<version>-<commit_hash>-<branch_name>
?
既然您提到了 .NET,我建议您根据当前分支的历史查看 GitVersion. GitVersion is an open source tool that generates a 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 不支持 tag name:
中的 +
个字符
A tag name must be valid ASCII and may contain lowercase and uppercase letters, digits, underscores, periods and dashes. A tag name may not start with a period or a dash and may contain a maximum of 128 characters.
为了解决这个问题,您必须配置 GitVersion 以在不使用 +
字符的情况下生成唯一的版本号。查看 GitVersion 支持的不同 versioning modes 以找到适合您的分支和部署策略的版本。
你应该试试我下面提到的这种docker图像标签,它可以很容易地找到该分支的分支名称和注释。
分支名-branchcommit
我有一个 C# 应用程序,不同的团队在该应用程序上并行工作,每个团队可能在功能分支上工作。我正在配置构建 Docker 图像并将它们推送到 Azure 容器注册表的构建管道。 在我们的日常工作中,在部署期间,我们需要为每个 branch/team 处理特定的 Docker 图像,以便每个团队可以随时部署他们的图像。
我想知道,在多分支项目中是否有任何最佳实践来标记 Docker 图像?例如,<version>-<commit_hash>-<branch_name>
?
既然您提到了 .NET,我建议您根据当前分支的历史查看 GitVersion. GitVersion is an open source tool that generates a 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 不支持 tag name:
+
个字符
A tag name must be valid ASCII and may contain lowercase and uppercase letters, digits, underscores, periods and dashes. A tag name may not start with a period or a dash and may contain a maximum of 128 characters.
为了解决这个问题,您必须配置 GitVersion 以在不使用 +
字符的情况下生成唯一的版本号。查看 GitVersion 支持的不同 versioning modes 以找到适合您的分支和部署策略的版本。
你应该试试我下面提到的这种docker图像标签,它可以很容易地找到该分支的分支名称和注释。
分支名-branchcommit