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