【问题标题】:Docker Hub Automated Build - TaggingDocker Hub 自动构建 - 标记
【发布时间】:2014-08-15 14:22:46
【问题描述】:

在 Docker Hub 上指定自动构建时,我可以设置一些设置(Type('Branch' 或 'Tag')、NameDockerfile LocationDocker Tag Name)。但不幸的是,我没有找到任何文档。

我假设,当我选择 Type'Branch' 并输入 Name 时,这是我在 GitHub/BitBucket 上的 git 存储库中使用的分支,Docker Tag Name 导致标签被分配给创建的图像。

我用它玩了一下,发现了一些我不清楚的东西 - 但我希望你能给我解释一下。

  • 添加多个条目会导致仅分配一个标签。我在第一个中使用'Branch'、'master'和'/'和'latest'作为Docker Tag Name,在第二个中使用'v1'。但只有 'v1' 被用作标签。

  • 使用 Type 'Tag' 并没有产生不同的结果。我认为如果 git commit 被标记为这个值,这可能只会构建一个图像。这种类型有什么用?

我一直在寻找将标签“最新”分配给最新版本的能力,并为旧版本使用 v1、v2、v3 等方案,就像我在本地构建图像时一样。

【问题讨论】:

标签: docker dockerhub


【解决方案1】:

dockerhub 上提供了自动 docker 图像标记!我最近摆弄了这个,想分享我的发现,跳到这个线程上(希望没问题!)

所以我在 dockerhub 上有一个带有自动构建链接的公共 GitHub 存储库。我希望每次推送到 master 分支时都更新 :latest 标签。另外,我希望为我在 GitHub 上创建的每个版本创建 :X:X.Y:X.Y.Z 标签(在 GitHub 上标记为 vX.Y.Z)。

以下是构建设置配置的支持方式:

在文本中更容易复制粘贴:

| Type   | Name                              | Dockerfile Location | Docker Tag Name |
|--------|-----------------------------------|---------------------|-----------------|
| Branch | master                            | /                   | latest          |
| Tag    | /^v([0-9]+)\.([0-9]+)\.([0-9]+)$/ | /                   | {\1}            |
| Tag    | /^v([0-9]+)\.([0-9]+)\.([0-9]+)$/ | /                   | {\1}.{\2}       |
| Tag    | /^v([0-9]+)\.([0-9]+)\.([0-9]+)$/ | /                   | {\1}.{\2}.{\3}  |

希望这会有所帮助!

【讨论】:

  • 帮助很大。在过去的 2 个小时里,我一直在尝试用谷歌搜索类似的东西。我找不到可以使用捕获组的任何地方。
  • 请记住,它不会在任何已发布的版本上使用。只有带有新 Git 标签的推送才会触发构建。
【解决方案2】:

这非常简单,只需 2 个步骤 ...

第 1 步 - 点击自动构建链接

第 2 步 - 通过单击蓝色加号按钮(见下图)将多个自动构建添加到同一个 docker 存储库(大多数人不知道您可以添加多个自动构建)

在上图中的示例中,我是...

  • 添加映射到 github master 分支的“最新”docker 标签
  • 添加映射到 github 0.1.0 标签的“0.1.0”docker 标签

注意github标签必须存在!

现在,当我单击保存并触发构建时,会启动 2 个构建,一个用于最新标签,一个用于 0.1.0 标签。

当你知道怎么做时很简单:) 我想我会在这里提供一个完整的答案,因为这没有很好的记录。

【讨论】:

  • 每当一个新标签被推送到仓库时,如果能够告诉 dockerhub 创建一个与 git 中相同标签的新镜像,那就太好了。
  • 同意,可悲的是我不认为这是可能的
  • 如果0.1.0只是master尖端的一个标签呢?有什么方法可以教 Docker Hub 只构建一个镜像,但同时给它 0.1.0latest 标签?在这里提出类似/相同的问题:stackoverflow.com/questions/37650119/…
  • 如果我必须进入并匹配标签并手动触发流程,我认为这个命名法不符合“自动构建”的条件。为此,我可以编写一个实际脚本,在我的开发工作站上自动执行此操作。
  • 我认为版本标记应该是这样的。 IE。手动过程。自动构建将始终将事物标记为:最新。但是,如果您想要自动匹配 github 和 dockerhub 之间的版本标签,那么您可以使用正则表达式作为标签。例如。 /^v[0-9.]+$/,它会自动为您制作这些内容,与 github 存储库中的内容相匹配。也许两全其美?
【解决方案3】:

对于新的 Docker Hub 自动构建,Anton Drukh 的出色答案可以通过一条规则来实现

来源类型:标签

来源:/^v([0-9.])\.([0-9.])\.([0-9.])$/

Docker 标签:release-{\1},release-{\1}.{\2},release-{\1}.{\2}.{\3},latest

请注意,这与 Anton 的回答略有不同,因为我是从标签而不是主提交构建最新的。

【讨论】:

  • 我建议使用 '+' 或 '.'因为我们要确保每个版本级别总是有一个数字。
  • 第二个froblesmartin的评论; git 标签vi.l.e 将生成docker 标签release-irelease-i.lrelease-i.l.e。您应该 (RFC2119) 使用 semver.org 版本控制。来源应该是:/^v([0-9+])\.([0-9+])\.([0-9+])$/ 以避免任何无效的 semver 标签的问题。
【解决方案4】:

几个月前,我联系了 docker 支持,要求明确提供版本号,当时不支持。

您在 docker hub 上指定的是要监视的 git 标签/分支。构建的结果将始终标记为latest

【讨论】:

  • 你在forums.docker.com有这个链接吗,有参考就好了,我也喜欢这个功能。
  • 不幸的是,这是通过 support.docker.com 处理的,我认为它不允许公共链接(它正在运行 zendesk)。如果有帮助,那就是请求 54。 2014 年 4 月 1 日,它关闭了,因为“我们正在进行一些更改,应该在不久的将来可以处理您的情况”,因此从那时起可能会有改进。
【解决方案5】:

Usman 在https://stackoverflow.com/a/26107743/155689 中回答了类似问题的解决方法

基本上

  • 进入自动构建设置,
  • 使用标签添加另一个构建类型
  • 输入一个 git 标签名称
  • 并给它一个版本名称
  • 点击保存并触发构建

如您所见,我已经为this automated build 完成了这项工作

【讨论】:

    【解决方案6】:

    我将标签“最新”分配给最新版本的解决方案是在自动构建中使用以下配置:

    | Type   | Name   | Dockerfile Location | Tag Name |
    | Branch | master |        /            | latest   |
    

    只要在 master 中有提交,就会创建一个带有“latest”标签的新构建。

    前几天有一个问题,自动构建使用分支名称作为标签名称,因此您可能会发现几个带有“master”的构建。这是固定的:https://forums.docker.com/t/automated-builds-not-tagging-latest/683

    【讨论】:

      【解决方案7】:

      我还没有使用此功能,所以我可能是错的,但是今天当我转到build settings 选项卡并选择tag 进行第二种构建时,它自动具有正则表达式/.*/,它将选择所有标签。

      我会在测试后立即更新。

      【讨论】:

        猜你喜欢
        • 2017-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-27
        • 2019-04-12
        相关资源
        最近更新 更多