Я бы рекомендовал использовать исполнителей на основе контейнеров , т.е. Docker или Kubernetes: https://docs.gitlab.com/runner/executors/README.html
Затем в каждой работе вашего конвейера вы выбираете правильный Docker образ для работы.
Это дает вам гибкость в использовании любой python версии или даже любого изображения из миллионов в Docker Hub.
Вы платите цену за установку своих зависимостей или инструментов при каждом запуске задания поверх официального образа - некоторое увеличение времени сборки.
run_script:
image: python:3
script:
- pip3 install pipenv
- pipenv install
- pipenv run ./my_beautiful_script.py
Вы можете создать собственное изображение с указанными вами c tools \ configs \ prerequisites \ dependencies \ environment и использую его, но я предпочитаю не слишком. Как еще одно преимущество такого подхода - вы также тестируете установку тех, что является лучшей практикой в непрерывной доставке.
Что касается python линтеров - я решил использовать несколько в то же время, поскольку они охватывают различные аспекты качества, и я в основном запускаю их через ловушки предварительной фиксации , которые я также выполняю в CI GitLab на случай, если разработчик забудет установить ловушки локально.
Пример урезанного .pre-commit-config.yaml
:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.5.0
hooks:
- id: check-yaml
- repo: https://gitlab.com/pycqa/flake8
rev: 3.7.9
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: v1.5
hooks:
- id: autopep8
args: [--diff]
- repo: https://github.com/asottile/pyupgrade
rev: v2.1.0
hooks:
- id: pyupgrade
и .gitlab-ci.yml
, который запускает предварительную фиксацию, а также другие линтеры python:
python-lint:
image: python:3
script:
- pip3 -q install pre-commit pycodestyle pylint
- pre-commit run -a
- pycodestyle --version
- pycodestyle --verbose --show-source *.py
- pylint --version
- find . -name "*.py" -print0 | xargs -0 pylint
См. полные файлы в шаблонном проекте, который я использовал для всего кода, связанного с python: https://gitlab.com/softmill/template-projects/python