如何在 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