美文网首页tool for work
在推送GitHub时自动构建Docker镜像

在推送GitHub时自动构建Docker镜像

作者: 开心人开发世界 | 来源:发表于2019-09-23 06:32 被阅读0次

Docker HubGitHub(和Bitbucket集成,允许您在推送新代码时自动构建容器的图像。可以从存储库的标记(或分支)中提取图像的标记,并且可以执行自动测试以确保在图像可供下载之前按预期构建图像。在这篇文章中,我将向您展示如何快速设置这样的工作流程。


创建你的GitHub回购并添加一个 Dockerfile

显然,第一步是在GitHub上设置您的存储库:

接下来,在本地克隆新存储库,添加示例Dockerfile,并将更改推送回存储库:

将缺省值添加Dockerfile到存储库中

正如您所看到的,Dockerfile我们创建的内容非常简单 - 仅使用官方hello-world图像。


在Docker Hub上启用自动构建

要启用自动构建,您需要将Docker Hub帐户与GitHub上的帐户相关联。登录Docker Hub并转到帐户设置>关联帐户。向下滚动以查找GitHub并单击Connect链接。您将完成通常的OAuth流程,登录GitHub(如果尚未登录)并授权Docker访问您的GitHub存储库。如果一切顺利,您应该收到GitHub的通知:

成功将Docker Hub与GitHub连接

现在是时候创建Docker Hub存储库并将其链接到您的GitHub存储库:


使用GitHub访问创建Docker Hub存储库

这里有一些事情,所以让我们分解它们:

  • 命名你的repo
    这里不多说,只是使用一个有意义的名字。我选择与我的GitHub存储库相同的名称。
  • 选择GitHub repo
    在前面的步骤中,您将Docker Hub连接到GitHub,因此您应该在其中看到所有组织和存储库的列表。选择您在上一步中创建的存储库。
  • 设置构建规则
    这是非常有趣的部分。由于可以随时推送代码,因此您应该让Docker Hub了解何时应该构建映像以及哪个标记应该为其分配映像。您可以使用构建规则配置它们。

只需单击“立即创建 ”(不要单击“ 创建和构建”,因为这将触发手动构建)。


构建规则

要让Docker Hub了解如何以及何时自动构建映像,您可以指定构建规则。您可能有多个并行应用的规则,只需一次git-push即可为您的图像分配多个标记:

为基于标记和主分支的自动构建构建规则</figcaption>

在上图中,我们设置了两个不同的规则 - 让我们看看他们做了什么。

标记规则

“标记规则”允许Docker Hub在您的git存储库中发现新标记时开始构建映像。这应该是您为图像的官方版本构建图像的首选方式。

由于git标签可以是任意的并且包含开发人员可能选择的任何内容,因此Docker Hub允许您定义正则表达式,以便识别git标记的哪个部分应该成为Docker镜像的标记的一部分。在上面的示例中,我们选择/^[0-9.]+$/了用于提取图像标记的正则表达式。实际上,这告诉Docker Hub我们的git标签符合自动构建的条件,应该是带点的数字形式,这应该是标签的唯一文本。提取并分配给它的图像标记由Docker Tag{sourceref}下输入的属性表示。

分支规则

“分支规则”允许Docker Hub在特定分支上的活动时开始构建映像。这里的典型用例是根据git存储库的日常活动建立最新映像。要监视的分支在Source下输入,标记将分配给Docker Tag下从其构建的Docker镜像。

建立你的第一个图像

由于我们现在拥有一切,我们只需要标记我们的git存储库的当前状态并将标签推送回GitHub; Docker Hub将为我们创造灵感并为我们构建形象:

推送标签以触发自动构建

实际上,几分钟后Docker Hub自动构建并标记了1.0.0映像:

版本1.0.0的第一个自动构建

要查看我们自动创建的最新图像,我们需要在分支中推送新的更改:


将更改推送到主分支

几分钟后:


从master分支构建的最新图像

Docker Hub为您提供了两个额外的屏幕,您可以在其上监视构建:


构建屏幕


时间线屏幕

翻译自:https://medium.com/better-programming/build-your-docker-images-automatically-when-you-push-on-github-18e80ece76af

相关文章

网友评论

    本文标题:在推送GitHub时自动构建Docker镜像

    本文链接:https://www.haomeiwen.com/subject/ejlructx.html