我有一个 Dockerfile,我可以在 GitLab CI/CD 管道中使用 kaniko 构建它。目前,build
stage既构建了 Container,又将其推送到了远程 Docker 存储库。
我想利用 CI/CD 管道的阶段概念来构建映像,然后执行自动测试并运行容器安全分析工具(Trivy),然后作为最后一步,如果之前的所有步骤都成功,我想将其推送到注册表:
- 构建映像
- 执行自动测试(基于创建的图像)
- 分析创建图像的安全性(使用 Trivy)
- 仅当前面的步骤成功且不重建映像时才将映像推送到注册表
构建和推送镜像的命令是:
build:latest-master:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --cache=true --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:latest
only:
- master
有一个选项/命令行标志不执行推送,--no-push
还有一个标志--tar-path
只生成图像的 tarball。
我将如何结合这些标志和命令来仅创建图像而不将其推送到注册表,因为只有在执行了安全检查时才应该将其推送到那里。然后推送阶段(GitLab CI Job)是什么样子的,尤其是确切的 kaniko 命令行。
如果最后一个推送阶段/作业可以重用先前构建的图像或缓存并且不再重新构建它,那就太好了。 我想 tarball 可以以某种方式使用,但是 kaniko 使用它的标志是什么?还是我只是使用该 tarball 并使用 docker 命令将 tarball 推送到注册表?