我正在尝试使用 kaniko 执行器的 --cache-repo 选项,但我发现它不使用我在 ECR/AWS 中保存的缓存,并且 gitlab 日志返回此信息;
Checking for cached layer [MASKED]/dev-cache:627d56ef7c151b98c02c0de3d3d0d9a5bc8d538b1b1d58632ef977f4501b48f4...
INFO[0521] No cached layer found for cmd COPY --from=build /../../../../..............
我已经使用相同的标签重建了图像,代码没有改变,但仍然需要相同的时间...
我使用的kaniko版本是以下gcr.io/kaniko-project/executor:v1.9.1
这些是我在 kaniko 中使用的标志:
/kaniko/executor --cache=true \
--cache-repo "${URL_ECR}/dev-cache" \
--cache-copy-layers \
--single-snapshot \
--context "${CI_PROJECT_DIR}" ${BUILD_IMAGE_EXTRA_ARGS} \
--dockerfile "${CI_PROJECT_DIR}/Dockerfile" \
--destination "${IMAGE_NAME}:${IMAGE_TAG}" \
--destination "${IMAGE_NAME}:latest" \
--skip-unused-stages \
--snapshotMode=redo \
--use-new-run
你有什么想法吗?
通过删除标志:--cache-copy-layers 和 --single-snapshot,并添加标志:--cleanup,成功解决了问题
当我们将 --cache-repo 设置为 ECR repo url 时,kaniko 将所有层推送到 ecr repo 作为缓存,如果 dockerfile 有太多/多步指令,这会增加 ECR repo 存储大小。对于每个构建,它都会将缓存推送到 ecr 存储库。 我们是否可以选择如果 ECR 存储库中存在层缓存,则不再推送它?
@汤姆·萨利巴@安德烈斯·卡布雷拉