Gitlab CI, как запускать тесты перед сборкой образа докера - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть репозиторий на основе Python, и я пытаюсь настроить Gitlab CI для создания образа Docker с использованием Dockerfile и отправки изображения в реестр 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

Я проверяю некоторые шаблоны с сайта 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

Однако, оба из них не работают для меня, потому что мне нужен Python для тестирования и докер для построения образа. Есть ли способ сделать это с помощью Gitlab CI без создания собственного образа Docker, на котором установлены и Python, и Docker?

1 Ответ

0 голосов
/ 08 ноября 2018

Я обнаружил, что могу создавать несколько заданий, каждое со своими изображениями:

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
...