Комбинезоны не передаются в приложении Django с Docker - PullRequest
0 голосов
/ 23 октября 2019

Я работаю над проектом Django, используя Docker. Я настроил Travis-Ci и хочу отправить тестовое покрытие на комбинезон. Тем не менее, это не работает, как ожидалось. любая помощь будет высоко оценена.

Вот ошибка, которую я получаю

Submitting coverage to coveralls.io...
No source for /mwibutsa/mwibutsa/settings.py
No source for /mwibutsa/mwibutsa/urls.py
No source for /mwibutsa/user/admin.py
No source for /mwibutsa/user/migrations/0001_initial.py
No source for /mwibutsa/user/models.py
No source for /mwibutsa/user/tests/test_user_api.py
No source for /mwibutsa/user/tests/test_user_model.py
Could not submit coverage: 422 Client Error: Unprocessable Entity for url: https://coveralls.io/api/v1/jobs
Traceback (most recent call last):
  File "/home/travis/virtualenv/python3.7.1/lib/python3.7/site-packages/coveralls/api.py", line 177, in wear
    response.raise_for_status()
  File "/home/travis/virtualenv/python3.7.1/lib/python3.7/site-packages/requests/models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 422 Client Error: Unprocessable Entity for url: https://coveralls.io/api/v1/jobs
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/travis/virtualenv/python3.7.1/lib/python3.7/site-packages/coveralls/cli.py", line 77, in main
    result = coverallz.wear()
  File "/home/travis/virtualenv/python3.7.1/lib/python3.7/site-packages/coveralls/api.py", line 180, in wear
    raise CoverallsException('Could not submit coverage: {}'.format(e))
coveralls.exception.CoverallsException: Could not submit coverage: 422 Client Error: Unprocessable Entity for url: https://coveralls.io/api/v1/jobs

**Here is my Travis.yml file**

язык: python python: - "3.7" services: docker before_script:pip install сценарий docker-compose: - docker-compose run web sh -c "охват запустить run.py тест && flake8 && отчет о покрытии" after_success: - комбинезоны

language: python
python:
  - "3.7"
services: docker
before_script: pip install docker-compose
script:
  - docker-compose run web sh -c "coverage run manage.py test && flake8 && coverage report"
after_success:
  - coveralls

Мой Dockerfile

FROM python:3.7-alpine
LABEL description="Mwibutsa Floribert"

ENV PYTHONUNBUFFERED 1

RUN mkdir /mwibutsa
WORKDIR /mwibutsa

COPY requirements.txt /mwibutsa/
RUN apk add --update --no-cache postgresql-client jpeg-dev
RUN apk add --update --no-cache --virtual  .tmp-build-deps gcc libc-dev linux-headers postgresql-dev musl-dev zlib zlib-dev

RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN apk del .tmp-build-deps


COPY . /mwibutsa/

Мой docker-compose.yml

version: '3.7'
services:
  web:
    build: .
    command: >
      sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
    environment:
      - DB_HOST=db
      - DB_NAME=postgres
      - DB_PASSWORD=password
      - DB_USER=postgres
      - DB_PORT=5432
    volumes:
      - .:/mwibutsa
    ports:
        - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:12-alpine
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_PORT=5432

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Чтобы понять, почему покрытие не отправляется, вы должны понять, как работают докер-контейнеры.

Контейнер создан для имитации отдельного и независимого блока. Это означает, что команды, запускаемые в глобальном контексте, отличаются от команд, запускаемых в контексте контейнера.

В вашем случае вы запускаете тесты и генерируете отчет о покрытии в контексте контейнера, а затем пытаетесь отправить отчет на комбинезон из глобального контекста.

Поскольку файл находится в контейнере,команда coveralls не может найти отчет и, следовательно, ничего не отправлено.

Вы можете обратиться к ответу, приведенному здесь, чтобы решить эту проблему: Комбинезоны: ошибка - в моем приложении нет источника, использующего контейнер Docker

Или ознакомьтесь с документацией, предоставленнойТрэвис о том, как отправлять комбинезоны из Трэвиса с помощью Docker: https://docs.travis -ci.com / user / coveralls / # using-coveralls-with-docker-builds

0 голосов
/ 15 ноября 2019

Вы должны запустить комбинезон внутри контейнера, чтобы он мог отправить файл данных, сгенерированный покрытием, в coveralls.io. Вы также должны передать маркер репозитория комбинезонов в качестве переменной среды, которую вы задали в travis https://docs.travis -ci.com / user / environment-variable # defining-variable-in-repository-settings .

.travis.yml

language: python
python:
  - "3.7"

services: docker

before_script: pip install docker-compose

script:
  - docker-compose run web sh -c "coverage run manage.py test && flake8 && coverage report"
after_success:
  - docker-compose run web sh -c "TRAVIS_JOB_ID=$TRAVIS_JOB_ID TRAVIS_BRANCH=$TRAVIS_BRANCH COVERALLS_REPO_TOKEN=$COVERALLS_REPO_TOKEN coveralls"
...