【问题标题】:Create a new build rule for DockerHub repository via API calls通过 API 调用为 DockerHub 存储库创建新的构建规则
【发布时间】:2020-08-03 16:31:51
【问题描述】:

我在 DockerHub 上有一个存储库,我已将其配置为直接连接到我的 GitHub 存储库,因此 git 提交将触发 Docker 映像的构建。

我希望为我的产品构建多个 Docker 映像(例如 v1v2 等)。

现在,我可以看到 DockerHub 为您提供了直接从门户配置“构建规则”的选项:

所以现在,当我对/releases/v1/Dockerfile 进行更改时,构建将自动触发。

酷。

然而,展望未来,我希望将/releases/v2/Dockerfile 发布到我的 GitHub 存储库,并且我希望 v2 也能够自动构建,而无需我手动创建“构建规则”。有没有办法以编程方式创建“构建规则”?

我希望调用 DockerHub API 来创建构建规则。 我在这里浏览了 API 的文档 https://docs.docker.com/registry/spec/api/ 但我找不到我想要的东西。

我想结束:

v2 是以编程方式创建的,不是从控制台创建的。

【问题讨论】:

  • 您是否尝试在 Dockerfile 位置字段中使用正则表达式和捕获组?根据documentation,您应该能够在 Docker Tag 字段中使用源的捕获组——也许它也适用于其他人......如果是,您可能希望更改工作流程以在源类型中使用标签并在其他人中捕获组变量。
  • 即使我想这样做,我也想知道如何通过 API 调用设置构建规则

标签: docker api github dockerhub


【解决方案1】:

Docker Hub 遵循 git 约定,您通常不会将不同版本的应用程序放在同一个 git 提交中。相反,您将为不同版本的代码使用单独的分支和标签。如果您遵循该 git 约定,则可以根据分支或标签上的正则表达式标记生成的图像。例如

  • 来源类型:Branch
  • 来源:/^v([0-9.]+)$/
  • Docker 标签:v{\1}

然后您可以在名为 v1.1(或任何其他版本号)的分支中构建,并且 docker 映像将被标记为 v1.1。仅提取标签的第一个数字,如下所示:

  • 来源类型:Tag
  • 来源:/^v([0-9]+)[0-9.]*$/
  • Docker 标签:v{\1}

这会将带有类似v10.1.2 的版本号的标签转换为v10 的docker 标签(只有. 之前的数字在正则表达式的第一部分中匹配)。

有关其构建规则的更多详细信息,请参阅: https://docs.docker.com/docker-hub/builds/#set-up-build-rules

关于 API,虽然注册表本身有一个 documented API,但我不知道 Docker Hub 的管理界面有类似的 API。您可以尝试通过嗅探浏览器流量并将其复制到您的应用程序来捕获调用,但 Docker 可以随时修改这些调用,因为它们不支持 API。

【讨论】:

  • 对,但这并不能解决实际问题。我正在寻找一种通过 API 调用创建构建规则的方法。
  • @Paolo 不确定您是否看到了最后一段。有时“供应商没有实施”是答案,即使它不能解决您的问题。
  • 是的,我看到了最后一段。尽管“供应商尚未实施”,但已经有一个现有的库在过去似乎可以工作 github.com/RyanTheAllmighty/Docker-Hub-API,所以现在也可能有一个解决方案。
  • @Paolo “寻求有关书籍、工具、软件库等的建议”是社区在此处关闭问题的特定原因之一。我专注于如何使用供应商提供的工具。
  • 这是完全合理的。但我想看看其他人是否可以为我提供解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
相关资源
最近更新 更多