如果存储库包含定义CI管道和开发人员(例如可视化代码开发容器)使用的构建环境的C1,则CI管道应满足以下要求:
Dockerfile构建的坞映像上下文中构建存储库的内容(或在适用于拉请求上下文的情况下,将其合并到目标分支的结果)。Dockerfile的更改应自动考虑,不需要手动用户干预(即本地码头构建,然后手动推送)。Dockerfile已经“烘烤”到这样的映像中,则CI管道应该重用已经构建的码头映像。我找不到现成的最佳实践来实现这一点(如果有关系的话,我的CI环境是Azure DevOps管道),所以我附带了以下概念:
Dockerfile's散列。docker_image_name:$hash。docker_image_name:$hash构建Dockerfile并将其推送到停靠器注册表。docker_image_name:$hash (来自注册表/本地缓存)运行CI管道(在我的例子中使用Azure的集装箱作业 )。问题:
发布于 2022-08-02 05:25:56
发布于 2022-08-02 13:12:11
Docker具有内置的功能,您可以以多种方式使用它。
一种方法是为每个构建保留一个“缓存”标记。这是好的,如果你的回购通常没有很多并行工作正在进行。
docker pull ${MY_IMAGE}:cache || true
docker build --cache-from ${MY_IMAGE}:cache -t ${MY_IMAGE}:${VERSION} -t ${MY_IMAGE}:cache .
docker push ${MY_IMAGE}:${VERSION}
docker push ${MY_IMAGE}:cache如果您的回购有许多并行工作正在进行,不要创建缓存标记,而是使用最新版本。
docker pull ${MY_IMAGE}:latest || true
docker build --cache-from ${MY_IMAGE}:latest -t ${MY_IMAGE}:${VERSION} .
docker push ${MY_IMAGE}:${VERSION}这基本上是你在问题中概述的过程,但我们依靠码头来为我们做工作。第一步是在本地拉下图像层。这比构建新映像更快(通常),如果您的CI/CD设置正确,那么缓存的使用应该已经存在了。
然后,--cache-from标志告诉Docker使用该图像作为缓存。这将阻止Docker构建没有更改的任何层。
https://devops.stackexchange.com/questions/16367
复制相似问题