使用 Dockerfile 构建自定义镜像以在 Concourse CI 上进行测试

Har*_*hil 6 continuous-integration dockerfile concourse

由于在某些特定测试环境中运行测试的某些要求,我们希望构建一个自定义容器来在 Concourse CI 上运行测试。

我们知道一个工作流程是

Concourse --> Build Image --> Push to Artifactory/Docker Hub --> Pull into pipeline --> run container --> run the tests
Run Code Online (Sandbox Code Playgroud)

但是我们不需要将图像推送到 Hub,而是更喜欢这样的工作流程

Concourse -- Build Image -- run container -- run the tests
Run Code Online (Sandbox Code Playgroud)

我已签出了举足轻重的博客问题却说明了第一个工作流。

我们可以实现第二个工作流程吗?

Jos*_*abi 0

您可以在定义任务时使用图像选项来实现您想要的效果。

不过,此处的选项image需要一个rootfs不是docker 映像,因此您需要提供该映像。

我知道这可能看起来很烦人和违反直觉,但它符合广场抽象。Docker 镜像是资源,因此它们与所有其他大厅资源一样,需要在大厅外的某个存储上存储和版本控制。然而,如果 Concourse 发现已上传较新的图像,它只会下载新图像,因此我认为正确的工作流程有点不同。

我要做的就是有一项工作,可以将您需要的所有内容提供给docker-image-resource put,并在其中一个资源发生变化时触发。然后在需要图像的任务中,从 Docker 存储中提取图像。Concourse 会缓存图像直到它发生变化,因此大多数时候您不需要耗尽网络流量。

作为示例,您可以看到 Concourse 团队是如何做到这一点的...我们有一个使用 docker-image-resource构建图像的管道,然后我们的主管道使用这些图像,并在绝大多数时间使用缓存版本。

  • 嘿,感谢您的努力。我正在寻找一种更轻松的配置,我可以简单地提供 Docker 文件作为源而不是存储库源 (3认同)