УСКОРЕНИЕ НЕПРЕРЫВНОЙ ИНТЕГРАЦИИ И РАЗВЕРТЫВАНИЯ PYTHON-ПРИЛОЖЕНИЙ

УДК 004

Шляпников Валерий Михайлович Shlyapnikov Valeriy Mihailovich

Студент Student

Ярославский Государственный Университет им. П.Г. Демидова

P.G. Demidov Yaroslavl State University

УСКОРЕНИЕ НЕПРЕРЫВНОЙ ИНТЕГРАЦИИ И РАЗВЕРТЫВАНИЯ

PYTHON-ПРИЛОЖЕНИЙ

ACCELERATE CONTINUOUS INTEGRATION AND DEPLOYMENT OF

PYTHON APPLICATIONS

Аннотация: в работе описана концепция непрерывной интеграции и развертывания python-приложений, а также рассмотрена задача ускорения процесса интеграции и развертывания с помощью технологии Docker в системе Gitlab CI/CD

Annotation: the paper describes the concept of continuous integration and deployment of python applications, and also considers the problem of accelerating the integration and deployment process using Docker technology in the Gitlab CI/CD system.

Ключевые слова: непрерывная интеграция, непрерывное развертывание, python, docker, gitlab, devops.

Key words: continuous integration, continuous deployment, python, docker, gitlab, devops.

Введение

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

Процесс такой автоматизации описывает методология CI/CD - концепция «непрерывной интеграции и развертывания (доставки)» (англ. Continuous Integration & Continuous Delivery). В этой статье описана эта концепция, а также

VМеждународная научно-практическая конференция рассмотрен процесс ускорения непрерывной интеграции и развертывания для python-приложений.

Постановка задачи Необходимо рассмотреть ключевые аспекты концепции CI/CD, проанализировать конкретный CI/CD процесс - сборка и доставка python-приложения и ускорить его выполнение.

Концепция CI/CD В методологии CI/CD в различных сочетаниях в зависимости от задачи используются следующие подходы:

Непрерывная интеграция (Continious integration) - предусматривает запуск скриптов для сборки и тестирования автоматически для каждого внесенного изменения в кодовую базу продукта [1, с. 135-137].

Непрерывная доставка (Continious delivery) - следующий за непрерывной интеграцией шаг. Помимо процессов интеграции, при каждом изменении внесений кода приложение может быть так же непрерывно развернуто для использования. Однако, при непрерывной доставке развертывание запускается вручную.

Непрерывное развертывание (Continious deployment) - представляет собой непрерывную доставку, которая всегда запускается автоматически и не требует участия человека.

В данной работе рассмотрен вариант реализации концепции CI/CD с помощью системы Gitlab CI/CD.

Gitlab CI/CD

Система позволяет интегрировать процессы CI/CD в обычные процессы разработки с помощью репозитория. Программист ведет разработку в отдельной ветке репозитория и вносит изменения.

Каждое изменение запускает автоматизированные настраиваемые скрипты, такие как:

Сборка и тестирование приложения Предпросмотр изменений в специальном приложении

В случае успешного прохождения всех этапов скрипта Gitlab CI/CD может автоматически развернуть изменения в продукте.

Описанная схема работы представлена на рис. 1.

Рис. 1 Схема работы Gitlab CI/CD

Пример и анализ конфигурации Gitlab CI/CD для Python-приложения

Рассматривается конфигурация Gitlab CI/CD, состоящая из нескольких этапов (рис. 2). В терминологии Gitlab CI/CD эти этапы называются стадиями (stages) и состоят из работ (jobs), в которых и описаны автоматически запускаемые скрипты. Данная конфигурация состоит из следующий стадий:

Quality tests - оценка качества написанного кода с помощью инструментов Flake8 и Cyclomatic Complexity, для каждого из которых создана своя job.

Test - тестирование кода с помощью unit-тестов.

Build docs - автоматическая генерация документации к коду.

Deploy docs - автоматическое разворачивание сгенерированной документации на специальном сервисе.

Build dist - сборка кода в python-пакет

Deploy dist - публикация сгенерированного python-пакета в специальном сервисе.

Рис. 2 Пример конфигурации Gitlab CI/CD

Необходимо проанализировать процесс выполнения данных операций. Приведем пример выполнения всех стадий (рис. 3):

ф 7 jobs for !1 with 1.0 .0/feature/initial-cofflmit in 23 minutes and 4 seconds (queued for 2 seconds}

Рис. 3 Пример выполнения стадий Gitlab CI/CD

В данном случае время выполнения составило 23 минуты и 4 секунды. Проанализировав данные по отдельным стадиям, был сделан вывод, что наиболее продолжительными стадиями являются Quality tests и Tests - 7 минут 16 секунд и 6 минут 32 секунды соответственно (рис.4).

Status Job ID Name

© Quality Tests

#11104 <5 й 00:07:1 6 3 weeks ago

0 passed Cyclomat ¡[Complexity

#11103 ô a 00:06:32 3 weeks ago

© passed FlakeS

© Tests

#11105 ô Q 00:00:36 3 weeks ago

© passed Tests

© Build Docs

#11106 6 и 00:02:06 3 weeks ago

© passed Build documentatiorvstaging

© Deploy Docs

#11108 <5 Й 00:00:07 3 weeks ago

© passed Deploy docs to serverstaging

© Build Dist

#11109 ô a 00:06:17 3 weeks ago

© passed Build dististaging

Рис. 4 Данные по стадиям Gitlab CI/CD

Полученное время выполнения может варьироваться - на это влияет множество параметров (скорость сетевого соединения, загруженность машины, которая выполняет скрипты и т.д), но для выявления проблемы долгого выполнения тестов, полученных данных о времени оказалось достаточно.

При анализе стадий Quality Tests и Tests было выявлено, что в них используется Docker-образ с установленным Python версии 3.7 и каждый раз устанавливаются зависимости проекта

Е) linter-stage.yml fg 469 Bytes

1 ül-irvt-apg-hlnrlr

image : registry.gitlab.smt.team/interna1/conmon-devops/linters-python : 3.7 JlU0L! J.uIiL.. LL.L.-

J

tags:

- docker

- office only :

тег?; reçue

before_script:

- pip3 install -qr requirements.txt | | true

Flake8:

«: *linters-block script:

- python3 -m flake8 --statistics --count .

CyclomaticComplexity: <<: *linters-block script :

- radon cc -as .

- radon mi -ms .

- xenon -b C -m A -a A .

Рис. 5 Конфигурация стадии quality tests

[?| test-stage.yml f^ 571 Bytes

С

Tests:

image : registry.gitlab.ori.team/internal/common-devops/linters-python : 3.7

J

- docker only:

- merge_requests

- master

before_script:

- pip3 install -qr requirements.txt || true

- pip3 install -qr tests/requirements.txt || true

- export FY I HUrjHíi I H= iKY I MUrjKAl h : ,

- python -c "import sys;print(sys.path)" script:

- pytest --junitxml=report.xml --cov=.

- coverage xml

coverage: "/TOTAL.+ ([0-9]{l,3}%)/" artifacts: when: always reports:

junit: report.xml cobertura: coverage.xml

Рис. 6 Конфигурация стадии tests

76

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

Ускорение стадий quality tests и tests.

Для ускорения данных стадий был создан Docker-образ, который помимо python версии 3.7 содержит в себе необходимые установленные зависимости.

Для его сборки была добавлена отдельная стадия - «Build base image» (рис.7), которая запускается каждый раз, когда меняются зависимости проекта. Во время этой стадии собирается новый Docker-образ и публикуется в специальном пространстве Container Registry. Остальные стадии могут его использовать и запускать на его основе скрипты.

Конфигурация quality tests и tests была переписана с использованием полученного образа.

Рис. 7 Добавленная стадия build base image

Полученные результаты С помощью новой стадии удалось ускорить процесс CI/CD, на рис. 8 представлен пример выполнения всех стадий (вместе со сборкой образа при изменении зависимостей), на рис.9 - пример выполнения стадий, когда пересборка образа не требуется. В первом случае время выполнения составило 6 минут 22 секунды, во втором - 2 минуты 39 секунд.

Рис. 8 Данные выполнения стадий с пересборкой образа для тестирования

Q 7jobs for !28 with 1.0.©/feature/moving_sender_and_renderer_in_deino_application in 2 minutes and 39 seconds (queued for 3 seconds) ft 1 related merge request: !28 move sender stage executor and is image Tenderer stage executor in demo application

Рис. 9 Данные выполнения стадий без пересборки образа для тестирования

Стадии тестов качества при этом занимают 5 секунд, стадии юнит-тестов

- 22 секунды

S-talus Job ID Name Coverage

© Quality Tests

[ @ passed ] #11747 CydornaticComplexity ф 00:00:05 Я 2 weeks ago

[ @ passed ] #11746 Flake8 ф 00:00:04 Я 2 weeks ago

© Tests

[ @ passed ] #11743 ДНЯИ1 Tests Ô 00:00:22 Я 2 weeks ago 73.0%

Рис. 10 Данные выполнения стадий Quality tests и tests

Заключение

В результате работы была рассмотрена концепция CI/CD, представлен реальный пример реализации такой концепции с помощью инструмента Gitlab CI/CD. Пример был оптимизирован и ускорен с помощью добавления новой стадии CI/CD и сборки базового Docker-образа для тестирования.

Библиографический список:

1. Вольф Эберхард. Continuous delivery. Практика непрерывных апдейтов // Питер. Спб, 2018. С. 135-137

УДК 629.78

Пилипченко Инна Андреевна Pilipchenko Inna Andreevna

Студент Student

Иркутский Государственный Университет Irkutsk State University Федорова Татьяна Владимировна Fedorova Tatyana Vladimirovna

Кандидат исторических наук, доцент кафедры востоковедения и регионоведения АТР Candidate of Historical Sciences, Associate Professor of the Department of Oriental and

Regional Studies of the APR Иркутский Государственный университет Irkutsk State University

ЭВОЛЮЦИЯ КОСМИЧЕСКОЙ ПРОГРАММЫ КНР КАК СРЕДСТВО ОБЕСПЕЧЕНИЯ НАЦИОНАЛЬНОЙ БЕЗОПАСНОСТИ СТРАНЫ В XXI ВЕКЕ (НА МАТЕРИАЛЕ КИТАЕЯЗЫЧНЫХ И АНГЛОЯЗЫЧНЫХ

ИСТОЧНИКОВ)

THE EVOLUTION OF THE SPACE PROGRAM OF THE PEOPLE'S REPUBLIC OF CHINA AS A MEANS OF ENSURING THE NATIONAL SECURITY OF THE COUNTRY IN THE XXI CENTURY

Аннотация. На фоне активного изучения космического пространства и борьбы за лидерство на мировой арене, важной проблемой для Китайской Народной республики (КНР) в XXI в. является обеспечение национальной безопасности страны. В статье рассмотрены основные этапы истории развития и ключевые цели космической программы КНР на