Выполнение юнит-теста python в облачной сборке с не работающим эмулятором хранилища данных при отправке сборки - PullRequest
1 голос
/ 24 мая 2019

Для моего конвейера CI / CD я хочу запустить мой юнит-тест python при облачной сборке (с триггером github). Для запуска моего теста мне нужен эмулятор хранилища данных, чтобы создать сущность в безопасном окружении (чтобы изолировать мои тестовые сборки после сборок). Моё приложение на python - это классическое приложение Flask, работающее на python 3.7 для стандартного движка приложения env.

Я пытался отправить свою сборку (gcloud beta builds submit --config build.yaml .), но сборка застряла на последних шагах и ничего не выводила (только один журнал: Step #2: Already have image (with digest): gcr.io/cloud-builders/docker).

В локальной среде я запустил эмулятор внутри док-контейнера, затем запустил тестовый контейнер, и он работает. Более того, при работе с облаком-build-local тесты работают, и моя сборка завершается со статусом DONE.

Вот мой облачный билд YAML:

steps:
- name: 'gcr.io/cloud-builders/docker'
  entrypoint: /bin/sh
  args:
  - '-c'
  - |
    docker run -d -p 9225:9225 google/cloud-sdk gcloud beta emulators datastore start --project=test --consistency=1 --host-port 0.0.0.0:9225
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '--rm', '-f', './Dockerfile', '-t', 'gcr.io/$PROJECT_ID/core-test:latest', '.']
- name: 'gcr.io/cloud-builders/docker'
  args: ['run', 'gcr.io/$PROJECT_ID/core-test:latest']

Вот файл Docker:

FROM gcr.io/google-appengine/python

RUN apt-get update

RUN virtualenv /venv -p python3.7

ENV VIRTUAL_ENV /venv
ENV PATH /venv/bin:$PATH

# Copy the application's source code
WORKDIR /app

ADD . /app

RUN pip install -r requirements.txt -r requirements-dev.txt

RUN mkdir ../data

ENV DATASTORE_PROJECT_ID=test
ENV DATASTORE_EMULATOR_HOST=host.docker.internal:9225
ENV PYTHON_ENV=TestConfig

CMD nosetests

Тесты вызывают мои конечные точки API, которые создают сущность в эмуляторе хранилища данных.

Я бы хотел, чтобы мой тест был запущен и моя сборка прошла успешно, но я не понимаю, что я делаю неправильно. Правильно ли используется облачная сборка для целей КИ? Может ли сборка в облаке запускать док-контейнер внутри сборки? Единственная документация по тестированию с облачной сборкой - здесь , но я не могу найти больше информации.

...