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

https://circleci.com/blog/publishing-a-python-package/