CI: Continuous Integration CD: Continuous Deployment/Delivery
Непрерывная интеграция CI:
Проверяйте код почти ежедневно или для каждого небольшого изменения, выполняйте некоторые задачи при каждом коммите, такие как линтинг кода, тестирование
Непрерывное развертывание/доставка CD:
Если все проверки пройдены при каждой фиксации, выполните развертывание в рабочей среде. Выполните шаги развертывания, такие как копирование кода, активация env, запуск основного файла и т. д.
Если вы не хотите использовать какой-либо сервис для развертывания, то после завершения CI вы можете просто скопировать код в рабочую среду и запустить сценарий оболочки, выполнив такие шаги, как создание и активация среды, запуск main.py и т. д. или запуск контейнера Docker.
Есть некоторые сторонние сервисы, такие как Circleci/Jenkins/teamcity/github, где у них есть отдельный сервер для сборки нашего кода и тестирования на наличие проблем и развертывания на сервере, или вы можете опубликовать на PyPI
Python является интерпретируемым, поэтому, когда мы говорим, что нам нужно построить проект Python, мы говорим не о компиляции, а о выполнении тестов и т. д.
Здесь мы увидим пример, мы будем использовать pylint для linting, pytest для модульного тестирования, pytest-cov для покрытия тестами, Circleci для CI/CD.
Как убедиться, что код проверен?
1.Укажите пороговое значение, которое должно быть превышено перед выходом программы с ошибкой в pylintrc.
провал-меньше=10
2. Добавьте проверку pylint в Circleci на ветке «Разработка», сборка завершится ошибкой, если оценка будет меньше порогового значения.
Как убедиться, что все тестовые случаи пройдены?
Добавьте проверку pytest в Circleci, и сборка завершится ошибкой, если не пройдут все тестовые случаи.
Как настроить проверку покрытия кода в Circleci?
Добавьте вывод pytest-cov html в артефакты Circleci.
Образец .circleci/config.yml
version: 2.1 jobs: build_test: docker: - image: continuumio/miniconda3 working_directory: ~/code steps: # Step 1: checkout source code to working directory - checkout # Step 2: create virtual env and install dependencies - run: name: install dependencies command: | conda env create -f environment.yml source activate nlp_text_cleaner # Step 3: run tests - run: name: run tests and linting command: | source activate nlp_text_cleaner pylint src pytest -vv pytest --cov-report html:tests/cov_html --cov=src tests/ - store_artifacts: path: tests/cov_html pypi_publish: docker: - image: continuumio/miniconda3 working_directory: ~/code steps: # Step 1: checkout source code to working directory - checkout # Step 2: create virtual env and install dependencies - run: name: run pypi publish command: | # create whl, install twine and publish to PyPI conda env create -f environment.yml source activate nlp_text_cleaner python -m build python -m twine check dist/* python -m twine upload dist/* workflows: build_test_publish: jobs: - build_test - pypi_publish: requires: - build_test filters: branches: only: - master
Перехватчики предварительной фиксации против CircleCi (CI):
Оба используются для проверки кода. Предварительная фиксация будет проверяться на локальном компьютере перед фиксацией. Circleci проверит код на уровне репо, как только код будет зарегистрирован.
Так что хорошо, если члены команды совместно используют хуки перед фиксацией (создайте папку внутри своего репозитория и попросите команду скопировать хуки в их .git/hooks на локальном компьютере).
Хуки Precommit должны проверять небольшие изменения, такие как линтинг, форматирование кода и т. д. Потому что, как только они будут проверены перед фиксацией, сборка CI не будет терпеть неудачу из-за таких тривиальных вещей, и это сэкономит время команде BUILD.
Вы можете сослаться на пару моих проектов, где я использовал Circleci. code_template, nlp_text_cleaner.
Если вам понравилась статья или у вас есть предложения/комментарии, поделитесь ими ниже!
Давайте свяжемся и обсудим в LinkedIn
Использованная литература:
Непрерывная интеграция с Python: введение — настоящий Python