Pipenv блокируется во время работы с Docker в Gitlab - PullRequest
0 голосов
/ 04 марта 2019

Я создал этот простой проект в Gitlab:

https://gitlab.com/PequeX/deleteme

С Pip-файлом, который устанавливает только пару пакетов :

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
pytest = "*"

[packages]
requests = "*"

[requires]
python_version = "3.7"

И очень простой .gitlab-ci.yml файл :

image: peque/python-devel

before_script:
  - pipenv sync --dev

python36:
  script:
    - pipenv run pytest

Существует также автоматически сгенерированный файл Pipfile.lock .Что я не буду здесь вставлять, так как это не очень интересно.

Теперь проблема в том, что Gitlab блокируется при вызове pipenv sync:

https://gitlab.com/PequeX/deleteme/-/jobs/171273142

В журнале нет выходных данных и ошибок нет.Это просто заблокировано навсегда.А потом, в конце концов, это время ожидания (потому что Gitlab не позволил бы вам запустить конвейер навсегда).

Что не так или как я мог успешно запустить pipenv sync?Обратите внимание, что я хотел бы продолжать использовать тот же peque/python-devel образ из Docker Hub, так как мне нужно иметь несколько версий Python для моих конвейеров.

Обновление

Попытался сбросить переменную CI, как @Hernan Garcia предлагает в своем ответе, но безуспешно:

Я также пытался с pipenv shell, как @Hernan Garcia предлагает в своих комментариях, но не повезло:

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

Как уже упоминалось в другом ответе, определение пустой переменной CI решит проблему зависания при сборке.

Тогда вторая проблема, с которой вы столкнетесь из-за отсутствия pytest, а это потому, что образ докераотсутствует пакет which, и pipenv не может найти pytest.

Окончательный файл gitlab-ci.yml должен быть похож на следующее:

image: peque/python-devel

variables:
  CI: ""

before_script:
  - pipenv sync --dev
  - yum install -y which

python36:
  script:
    - pipenv run pytest

Иокончательный результат будет:

$ pipenv run pytest
============================= test session starts ==============================
platform linux -- Python 3.7.2, pytest-4.3.0, py-1.8.0, pluggy-0.9.0
rootdir: /builds/mostafahussein/deleteme, inifile:
collected 0 items

========================= no tests ran in 0.01 seconds =========================


Относительно этой проблемы:
termios.error: (25, 'Inappropriate ioctl for device')

Это связано с тем, что pipenv shell требуется tty для запуска без возникновения вышеуказанной ошибки, однако GitLabCI не предоставляет tty, поскольку, насколько я знаю, нет пользовательских входов.Так что будет лучше использовать первый метод, который pipenv run.

0 голосов
/ 13 марта 2019

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

0 голосов
/ 04 марта 2019

Я мог бы исправить это, используя этот обходной путь:
https://github.com/pypa/pipenv/issues/3534#issuecomment-464510351

Добавьте следующее к вашему .gitlab-ci.yml файлу в unset CI переменная:

variables:
    CI: ""

Проверьтеэто успешное задание:
https://gitlab.com/hernandanielg/deleteme/-/jobs/171342796

;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...