在 docker runner 上构建并运行镜像,无需推送

Cha*_*esB 5 docker gitlab-ci gitlab-ci-runner

我有一个 docker 类型的 Gitlab CI runner,以及一个带有 Dockerfile 的 repo,我将使用它来构建我的工件。

我知道我可以分两个阶段完成,docker一个阶段是使用映像构建映像,然后将其推送到注册表,另一个阶段是使用映像构建工件。

但我不在乎将图像保存在注册表中,我想跳过这一步,只在我的管道中使用 docker 图像而不推送它。

所以我在我的.gitlab-ci.yml, just docker buildand 中尝试了以下内容docker run

build-docs:
  tags:
    - docker
  image: docker:stable
  stage: build-docs
  script:
    - docker build -t $IMAGE_TAG .
    - docker run --rm $IMAGE_TAG source build
  artifacts:
    paths:
      - build
Run Code Online (Sandbox Code Playgroud)

我的 Dockerfile 有一个入口点,它接受一个源和构建目录,当然我的存储库的源目录中填满了文件

但是,docker runstep没有找到repository文件,好像source目录是空的,不过我猜是因为在docker image里面运行docker image有点奇怪。

如何修复我的运行步骤以便找到文件,或者是否有不同的方法来做我想做的事?

Pie*_* B. 2

您必须运行作业中的 Docker 容器,并按照Gitlab DinD 限制文档中的说明安装作业的当前目录。例如你可以这样做:

script:
  - docker build -t $IMAGE_TAG .
  # assuming 'source' folder exists at 'path/to/source' in your Git repo
  - docker run -v "/builds/$CI_PROJECT_PATH/path/to/source:/path/to/source" $IMAGE_TAG /path/to/source build
Run Code Online (Sandbox Code Playgroud)

在 Docker 中使用 Docker,您的$IMAGE_TAG容器应该具有source可用的本地构建文件(包括文件夹)