如何在 CI 脚本作业之前在推送时重建 docker 图像
How to rebuild docker image on push before CI script jobs
我想在 GitLab CI 脚本中生成 Dockerfile 并构建它。然后在构建作业中使用这个新生成的图像。我怎样才能做到这一点?尝试使用全局 before_script,但它已经在默认容器中启动。我需要从任何容器中执行此操作。
before_script
是每个作业之前的 运行,所以这不是您想要的。但是你可以有第一份工作来构建图像并利用每个 job can use a different Docker image. The build of the image is covered in the manual 的事实。
选项 A(嗯……还行)
有 2 个 运行 人,一个是 shell 执行者(标记为 shell),另一个是 Docker执行者(标记为 docker)。然后,您将在第一阶段完成一项致力于构建 docker 图像的工作。它将使用 shell 运行ner.
image_build:
stage: image_build
script:
- # create dockerfile
- # run docker build
- # push image to a registry
tags:
- shell
然后第二个作业将 运行 使用 运行ner 和 docker 执行器并使用这个创建的图像:
job_1:
stage: test
image: [image you created]
script:
- # your tasks
tags:
- docker
这个问题是 运行ner 需要成为 docker 组的一部分,该组具有 安全隐患.
选项 B(较好)
第二个选项会做同样的事情,但只有一个 运行ner 使用 Docker 执行器。 Docker 图像将构建在 运行ning 容器中(gitlab/dind:最新 图像)=“docker in docker”解决方案。
stages:
- image_build
- test
image_build:
stage: image_build
image: gitlab/dind:latest
script:
- # create dockerfile
- # run docker build
- # push image to a registry
job_1:
stage: test
image: [image you created]
script:
- # your tasks
我想在 GitLab CI 脚本中生成 Dockerfile 并构建它。然后在构建作业中使用这个新生成的图像。我怎样才能做到这一点?尝试使用全局 before_script,但它已经在默认容器中启动。我需要从任何容器中执行此操作。
before_script
是每个作业之前的 运行,所以这不是您想要的。但是你可以有第一份工作来构建图像并利用每个 job can use a different Docker image. The build of the image is covered in the manual 的事实。
选项 A(嗯……还行)
有 2 个 运行 人,一个是 shell 执行者(标记为 shell),另一个是 Docker执行者(标记为 docker)。然后,您将在第一阶段完成一项致力于构建 docker 图像的工作。它将使用 shell 运行ner.
image_build:
stage: image_build
script:
- # create dockerfile
- # run docker build
- # push image to a registry
tags:
- shell
然后第二个作业将 运行 使用 运行ner 和 docker 执行器并使用这个创建的图像:
job_1:
stage: test
image: [image you created]
script:
- # your tasks
tags:
- docker
这个问题是 运行ner 需要成为 docker 组的一部分,该组具有 安全隐患.
选项 B(较好)
第二个选项会做同样的事情,但只有一个 运行ner 使用 Docker 执行器。 Docker 图像将构建在 运行ning 容器中(gitlab/dind:最新 图像)=“docker in docker”解决方案。
stages:
- image_build
- test
image_build:
stage: image_build
image: gitlab/dind:latest
script:
- # create dockerfile
- # run docker build
- # push image to a registry
job_1:
stage: test
image: [image you created]
script:
- # your tasks