Gitlab CI 如何在构建 docker 镜像之前运行测试

Gas*_*sim 3 gitlab docker gitlab-ci

我有一个基于 Python 的存储库,我正在尝试设置 Gitlab CI 以使用 Dockerfile 构建 Docker 映像并将该映像推送到 Gitlab 的注册表。

在构建 Docker 映像并将其部署到注册表之前,我想使用 Python 运行单元测试。这是我当前仅进行测试的 gitlab-ci.yml 文件:

image: python:3.7-slim
before_script:
  - pip3 install -r requirements.txt

test:
  variables:
    DJANGO_SECRET_KEY: some-key-here
  script:
  - python manage.py test

build:
  DO NOT KNOW HOW TO DO IT
Run Code Online (Sandbox Code Playgroud)

我正在检查 Gitlab 网站上的一些模板,并找到了一个适用于 Docker 的模板:

# This file is a template, and might need editing before it works on your project.
# Official docker image.
image: docker:latest

services:
  - docker:dind

before_script:
  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY

build-master:
  stage: build
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
    - docker push "$CI_REGISTRY_IMAGE"
  only:
    - master

build:
  stage: build
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
  except:
    - master
Run Code Online (Sandbox Code Playgroud)

然而,这两个对我来说都不起作用,因为我需要用 python 来测试,用 docker 来构建图像。有没有办法使用 Gitlab CI 来完成此操作,而无需创建同时安装了 python 和 Docker 的自定义 Docker 映像?

Gas*_*sim 6

我发现我可以创建多个作业,每个作业都有自己的图像:

stages:
  - test
  - build

test:
  stage: test
  image: python:3.7-slim
  variables:
    DJANGO_SECRET_KEY: key
  before_script:
    - pip3 install -r requirements.txt
  script:
    - python manage.py test
  only:
    - master

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
    - docker push "$CI_REGISTRY_IMAGE"
  only:
    - master
Run Code Online (Sandbox Code Playgroud)