Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Python: Непрерывная интеграция и доставка

Краткое руководство с примерами
Покупка
Артикул: 748322.01.99
Доступ онлайн
549 ₽
В корзину
Язык Python используется во многих областях - веб-разработке, науке о данных и машинном обучении, интернете вещей (IoT), автоматизации систем. Морис Ленц, блогер, архитектор программного обеспечения с большим опытом работы, досконально рассматривает возможности Python, упрощающие и повышающие эффективность разработки ПО. В книге представлены различные виды тестирования; показано, как настроить автоматизированные системы, которые выполняют эти тесты, и устанавливать приложения в различных средах контролируемым способом. Представленный материал позволит разработчику успешно решать технические проблемы, которые обычно скрываются в программном коде. Издание предназначено для технических специалистов, занимающихся доставкой программного обеспечения: разработчиков, архитекторов, инженеров по релизу и DevOps-специалистов.
Ленд, М. Python: Непрерывная интеграция и доставка : практическое руководство / М. Ленд ; пер. с англ. А. Е. Мамонова, Д. А. Беликова. - Москва : ДМК Пресс, 2020. - 168 с. - ISBN 978-5-97060-797-8. - Текст : электронный. - URL: https://znanium.com/catalog/product/1210637 (дата обращения: 25.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Мориц Ленц

Python 
Непрерывная интеграция и доставка 

Moritz Lenz

Python 
Continuous Integration  
and Delivery

A Concise Guide  
with Examples

Мориц Ленц

Москва, 2020

Python
Непрерывная интеграция  
и доставка

Краткое руководство  
с примерами

УДК 004.438Python
ББК 32.973.22
Л33

Ленц М.
Л33 
Python: Непрерывная интеграция и доставка / пер. с анг. 
А. Е. Мамонова, Д. А. Беликова. – М.: ДМК Пресс, 2020. – 168 с.: 
ил. 

ISBN 978-5-97060-797-8

Язык Python используется во многих областях – веб-разработке, науке 
о данных и машинном обучении, интернете вещей (IoT), автоматизации 
систем. Морис Ленц, блогер, архитектор программного обеспечения 
с большим опытом работы, досконально рассматривает возможности 
Python, упрощающие и повышающие эффективность разработки ПО. 
В книге представлены различные виды тестирования; показано, как 
настроить автоматизированные системы, которые выполняют эти тесты, и устанавливать приложения в различных средах контролируемым 
способом. Представленный материал позволит разработчику успешно 
решать технические проблемы, которые обычно скрываются в программном коде.
Издание предназначено для технических специалистов, занимающихся доставкой программного обеспечения: разработчиков, архитекторов, 
инженеров по релизу и DevOps-специалистов.

УДК 004.438Python
ББК 32.973.22

Authorized Russian translation of the English edition of Python Continuous 
Integration and Delivery: A Concise Guide with Examples ISBN 978-1-48424280-3 © 2019 by Moritz Lenz.
This translation is published and sold by permission of Packt Publishing, 
which owns or controls all rights to publish and sell the same.

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами 
без письменного разрешения владельцев авторских прав.

ISBN 978-1-4842-4280-3 (анг.) 
© 2019 by Moritz Lenz
ISBN 978-5-97060-797-8 (рус.) 
©  Оформление, издание, перевод,  
ДМК Пресс, 2020

Содержание

Об авторе ..................................................................................................10

О техническом рецензенте ...............................................................11

Благодарность ........................................................................................12

Введение ...................................................................................................13

Глава 1. Автоматическое тестирование .......................................17
1.1. Что же мы хотим от тестов ....................................................................17
Быстрая обратная связь ...........................................................................17
Уверенность ..............................................................................................18
Помощь в отладке ....................................................................................19
Справка по проектированию ..................................................................19
Спецификация продукта .........................................................................20
1.2. Недостатки тестов ..................................................................................20
Усилия .......................................................................................................20
Дополнительный код для поддержки .....................................................21
Хрупкость ..................................................................................................21
Ложное чувство безопасности .................................................................22
1.3. Характеристики хорошего теста ...........................................................22
1.4. Виды тестов ............................................................................................22
Модульные тесты (Unit Tests) ..................................................................23
Интеграционные тесты (Integration Tests) .............................................24
Системные тесты (System Tests) ..............................................................24
Дымовые тесты (Smoke Test) ...................................................................25
Тесты производительности .....................................................................26
1.5. Резюме ....................................................................................................27

Глава 2. Модульное тестирование в Python ..............................28
2.1. Отступление: виртуальное окружение .................................................29
2.2. Начало работы с модульными тестами ................................................29
Первый тест ..............................................................................................30
Пишем больше тестов ..............................................................................32
Тестируем неудачный случай ..................................................................33
2.3. Работа с зависимостями ........................................................................34
Отделение логики от внешних зависимостей ........................................34
Внедрение зависимостей для тестирования ..........................................37
Поддельные объекты (Мок-объекты)......................................................39

 Содержание

Исправление .............................................................................................41
2.4. Разделение кода и тестов ......................................................................42
Настройка Python Path .............................................................................42
2.5. Подробнее о модульном тестировании и Pytest ..................................43
2.6. Запуск юнит-тестов в чистой среде ......................................................44
2.7. Другой пример проекта: matheval ........................................................45
Логика приложения .................................................................................46
2.8. Резюме ....................................................................................................48

Глава 3. Непрерывная интеграция с Jenkins .............................49
3.1. Серверы непрерывной интеграции ......................................................50
3.2. Начало работы с Jenkins .........................................................................51
Запуск Jenkins в Docker ............................................................................51
Настройка исходного кода репозитория ................................................52
Создание первого задания Jenkins ..........................................................53
3.3. Экспорт дополнительных сведений о тесте в Jenkins ..........................56
3.4. Шаблоны для работы с Jenkins ..............................................................57
Ответственности ......................................................................................58
Уведомления .............................................................................................58
Ветви функций и пул-запросы (pull requests) ........................................59
3.5. Другие показатели в Jenkins ..................................................................59
Покрытие кода..........................................................................................59
Сложность .................................................................................................60
Стиль кода .................................................................................................60
Проверка архитектурных ограничений .................................................60
3.6. Резюме ....................................................................................................61

Глава 4. Непрерывная доставка......................................................62
4.1. Причины для CD и автоматизированных развертываний ..................63
Экономия времени ...................................................................................63
Сокращение цикла релиза .......................................................................63
Сокращение цикла обратной связи ........................................................64
Надежность релизов .................................................................................65
Меньшие приращения облегчают торговлю ..........................................65
Больше архитектурной свободы .............................................................66
Передовые методы обеспечения качества .............................................66
4.2. План для CD ............................................................................................67
Архитектура конвейера ...........................................................................67
Антишаблон: отдельные сборки для каждой среды ..............................69
Все зависит от формата упаковки ...........................................................70
Технология управления репозиториями Debian ...................................71
Инструменты для установки пакетов .....................................................72
Управление конвейером ..........................................................................73
4.3. Резюме ....................................................................................................74

Содержание  7

Глава 5. Сборка пакетов......................................................................75
5.1. Создание tar-архива с исходным кодом ...............................................75
5.2. Упаковка с помощью dh-virtualenv .......................................................76
Начало работы с упаковкой .....................................................................77
5.3 Файл debian/control .................................................................................77
Направление процесса сборки ................................................................78
Объявление зависимостей Python ..........................................................78
Сборка пакета ...........................................................................................79
Создание пакета python-matheval ..........................................................79
Компромиссы dh-virtualenv.....................................................................80
5.4. Резюме ....................................................................................................81

Глава 6. Распространение пакетов Debian .................................82
6.1. Сигнатуры ...............................................................................................82
6.2. Подготовка репозитория .......................................................................83
6.3. Автоматизация создания репозитория и добавления пакета ............84
6.4. Обслуживание репозиториев ................................................................86
Настройка компьютера для использования репозитория ....................87
6.5. Резюме ....................................................................................................87

Глава 7. Развертывание пакетов  ....................................................89
7.1. Ansible: основы .......................................................................................89
Соединения и файл инвентаризации .....................................................90
Модули ......................................................................................................91
Модуль shell ..............................................................................................92
Модуль copy ..............................................................................................92
Модуль template .......................................................................................93
Модуль file .................................................................................................94
Модуль apt.................................................................................................94
Модули yum и zypper ................................................................................95
Модуль package .........................................................................................95
Специализированные модули .................................................................95
Плейбуки ...................................................................................................95
Переменные..............................................................................................98
Роли .........................................................................................................100
7.2. Развертывание с помощью Ansible .....................................................102
7.3. Резюме ...................................................................................................103

Глава 8. Виртуальная площадка  
для автоматизации развертываний ...........................................104
8.1. Требования и использование ресурсов ..............................................104
8.2. Знакомство с Vagrant ...........................................................................105
Настройка сети и Vagrant .......................................................................106

 Содержание

8.3. Настройка машин .................................................................................109
8.4. Резюме ..................................................................................................114

Глава 9. Сборка в конвейере с помощью  
Go Continuous Delivery ......................................................................115
9.1. О Go Continuous Delivery .....................................................................115
Устройство конвейера ............................................................................116
Соответствие заданий агентам .............................................................116
Одно слово по поводу среды .................................................................117
Материалы ..............................................................................................118
Артефакты ..............................................................................................118
9.2. Установка ..............................................................................................119
Установка сервера GoCD в Debian .........................................................119
Установка агента GoCD в Debian ...........................................................120
Первый контакт с XML-конфигурацией GoCD .....................................121
Создание SSH-ключа ..............................................................................122
9.3. Сборка в конвейере ..............................................................................123
Макет каталога .......................................................................................124
Этапы, задания, задачи и артефакты ....................................................124
Конвейер в действии ..............................................................................126
Старый номер версии – это не полезно ................................................126
Создание уникальных номеров версий ................................................127
Еще кое-что по поводу сборки ..............................................................128
Подключение к GoCD .............................................................................129
9.4. Резюме ..................................................................................................130

Глава 10. Распространение и развертывание  
пакетов в конвейере ..........................................................................131
10.1. Загрузка в конвейер ...........................................................................131
Учетные записи пользователей и безопасность ..................................132
10.2. Развертывание в конвейере ..............................................................134
10.3. Результаты ..........................................................................................135
10.4. Проходя весь путь до реальных условий эксплуатации ..................136
10.5. Достижение разблокировано: базовая непрерывная доставка ......138

Глава 11. Улучшаем конвейер ........................................................139
11.1. Откаты и установка определенных версий ......................................139
Реализация .............................................................................................140
Давайте попробуем! ...............................................................................141
11.2. Проведение дымовых тестов в конвейере .......................................142
Когда проводить такой тест? .................................................................142
Тестирование белого ящика ..................................................................143
Образец дымового теста черного ящика ..............................................144

Содержание  9

Добавление дымовых тестов в конвейер и роллинг-релизы ..............144
11.3. Шаблоны конфигурации ....................................................................146
11.4. Как избежать шквала повторных сборок..........................................148
11.5. Резюме ................................................................................................149

Глава 12. Безопасность .....................................................................150
12.1. Опасности централизации ................................................................150
12.2. Время до выхода на рынок для исправлений безопасности ...........151
12.3. Аудит и спецификация ПО ................................................................152
12.4. Резюме ................................................................................................153

Глава 13. Управление состояниями .............................................154
13.1. Синхронизация кода и версий базы данных ...................................155
13.2. Разделение версий приложения и базы данных ..............................155
Пример изменения схемы .....................................................................156
Создание нового столбца, допускающего значение NULL ..................157
Миграция данных ..................................................................................159
Применение ограничений и очистка ...................................................159
Предварительные условия .....................................................................160
Инструментарий ....................................................................................161
Структура ................................................................................................161
Единого решения не существует ...........................................................162
13.3. Резюме ................................................................................................162

Глава 14. Выводы и перспективы ................................................163
14.1. Что дальше? ........................................................................................163
Улучшенное обеспечение качества .......................................................163
Метрики ..................................................................................................164
Автоматизация инфраструктуры ..........................................................165
14.2. Заключение .........................................................................................167

Об авторе

Мориц Ленц (Moritz Lenz) – плодовитый блогер, 
автор и участник проектов с открытым исходным 
кодом. Он работает архитектором программного 
обеспечения и главным инженером-программистом для ИТ среднего бизнеса аутсорсинговой 
компании, где создал систему непрерывной интеграции и доставки для более пятидесяти программных библиотек и приложений.

О техническом 
рецензенте

Майкл Томас (Michael Thomas) более 
20 лет трудился в области разработки программного обеспечения в качестве индивидуального участника, руководителя группы, 
менеджера программ и вице-президента по 
проектированию. Майкл имеет более 10 лет 
опыта работы с мобильными устройствами. 
В настоящее время он работает в медицинском секторе, используя мобильные устройства для ускорения обмена информацией между пациентами и поставщиками медицинских услуг.

Благодарность

Написание книги не является одиночным начинанием и возможно только с помощью многих людей и организаций. Я хотел бы 
поблагодарить всех моих бета-читателей (beta reader), которые 
предоставили обратную связь. К ним относятся, в произвольном 
порядке, Карл Фогель (Karl Vogel), Михаил Иткин (Mikhail Itkin), 
Карл Мясак (Carl Mäsak), Мартин Турн (Martin Thurn), Шломи Фиш 
(Shlomi Fish), Ричард Липпманн (Richard Lippmann), Ричард Фоли 
(Richard Foley) и Роман Филиппов (Roman Filippov). Пол Кокрейн 
(Paul Cochrane) заслуживает особой благодарности за рецензирование и предоставление обратной связи по сообщениям в блоге 
и рукописи, а также за доступность для обсуждения контента, идей 
и организационных вопросов.
Я также хочу поблагодарить мою издательскую команду 
в Apress: Стив Англин (Steve Anglin), Марк Пауэрс (Mark Powers) 
и Мэттью Муди (Matthew Moodie), – а также всех, кто делает потрясающую работу на заднем плане, например дизайн обложки, 
набор текста и маркетинг.
Наконец, спасибо моим родителям за то, что они разожгли мою 
любовь к книгам и технике. И самое главное, моей семье: Сигне 
(Signe) – моей жене, за постоянную поддержку; и моим дочерям – 
Иде (Ida) и Ронье (Ronja), за то, что они поддерживали меня в реальном мире и приносили радость в мою жизнь.

Введение

Одним из ключей к успешной разработке программного обеспечения является получение быстрой обратной связи. Это помогает разработчикам избежать тупиков, и в случае ошибки, которая 
быстро обнаруживается, ее можно исправить, пока код еще свеж 
в памяти разработчика.
С точки зрения бизнеса быстрая обратная связь также помогает 
заинтересованным сторонам и продуктовому менеджеру не создавать функциональность, которая оказывается бесполезной, что 
позволяет избежать напрасных усилий. Достижение взаимопонимания о желаемом продукте является очень сложной задачей в любом программном проекте. Показ работающего (хотя и частично) 
продукта на ранней стадии часто помогает устранить недопонимание между заинтересованными сторонами и разработчиками.
Существует множество способов добавления обратной связи 
на разных уровнях, от добавления компоновки (linting) и других 
проверок кода в IDE до гибких процессов (agile processes), которые подчеркивают повышенную стоимость доставки. Первая часть 
этой книги посвящена тестам программного обеспечения и их автоматическому выполнению, практике, известной как непрерывная интеграция (Continuous Integration – CI).
При реализации CI вы настраиваете сервер, который автоматически проверяет каждое изменение исходного кода, возможно, 
в нескольких средах, например в комбинациях версий операционной системы и языка программирования.
Следующим логическим шагом и темой второй части этой книги является непрерывная доставка (Continuous Delivery – CD). Пос ле 
создания и тестирования кода вы добавляете больше шагов к автоматизированному процессу: автоматическое развертывание 
в одной или нескольких тестовых средах, дополнительные тесты 
в установленном состоянии и, наконец, развертывание в производственной среде. Последний шаг обычно охраняется воротами 
ручного одобрения.
CD расширяет автоматизацию и таким образом предоставляет 
возможность быстрых итерационных циклов вплоть до производственной среды, где программное обеспечение может принести 

 Введение

пользу. С помощью такого механизма вы можете быстро получить 
обратную связь или данные об использовании от реальных клиентов и оценить, полезно ли расширять функциональность или обнаруживать баги, пока разработчики все еще помнят код, который 
они написали.
Примеры кода в этой книге используют Python. Благодаря своей динамической природе Python хорошо подходит для небольших экспериментов и быст рой обратной связи. Хорошо укомплектованная стандартная библио тека и обширная экосистема 
доступных библиотек и фреймворков, а также чистый синтаксис 
Python делают его хорошим выбором даже для более крупных 
приложений. Python обычно используется во многих областях, 
например в веб-разработке, науке о данных и машинном обучении, интернете вещей (IoT) и автоматизации систем. Это становится лингва франка профессиональных программистов и тех, 
кто просто коснулся автоматизировать какую-то часть своей работы или хобби.
Python поставляется в двух основных языковых версиях, 2 и 3. 
Поскольку поддержку Python 2 планируется завершить в 2020 году, 
и почти все основные библиотеки теперь поддерживают Python 3, 
новые проекты следует начинать в Python 3, а устаревшие приложения нужно перенести на эту языковую версию, если это возможно. Следовательно, в этой книге предполагается, что Python 
относится к Python 3, если явно не указано иное. Если вы знаете 
только Python 2, будьте уверены, что вы легко поймете исходный 
код, содержащийся в этой книге, и с легкостью перенесете знания 
в Python 3.

Целевая аудитория

Эта книга предназначена для технических специалистов, вовлеченных в процесс доставки программного обеспечения: разработчиков программного обеспечения, архитекторов, инженеров по 
релизу и инженеров DevOps.
Главы, в которых используются примеры исходного кода, предполагают базовое знакомство с языком программирования Python. 
Если вы знакомы с другими языками программирования, потратьте несколько часов на чтение вводного материала по Python. Вы, 
вероятно, достигнете уровня, на котором сможете легко следовать 
примерам кода в книге.

Скачивание исходного кода примеров  15

В примере инфраструктуры используется Debian GNU/Linux, поэтому знакомство с этой операционной системой полезно, хотя 
и не обязательно.

Примеры кода

Примеры кода, используемые в этой книге, доступны на GitHub 
под организацией python-ci-cd по адресу https://github.com/pythonci-cd или по ссылке Download Source Code, расположенной по 
адресу www.apress.com/9781484242803.
Поскольку некоторые примеры основаны на автоматическом 
извлечении кода из определенных репозиториев Git, необходимо 
разделить их на несколько репозиториев. Несколько глав ссылаются на отдельные репозитории в этом пространстве имен.

  Так будут оформляться предупреждения и важные примечания.

 Так будут оформляться советы или рекомендации.

отзывы и Пожелания

Мы всегда рады отзывам наших читателей. Расскажите нам, что 
вы думаете об этой книге – что понравилось или, может быть, не 
понравилось. Отзывы важны для нас, чтобы выпус кать книги, которые будут для вас максимально полезны.
Вы можете написать отзыв на нашем сайте www.dmkpress.com, 
зайдя на страницу книги и оставив комментарий в разделе «Отзывы и рецензии». Также можно послать письмо главному редактору 
по адресу dmkpress@gmail.com; при этом укажите название книги 
в теме письма. 
Если вы являетесь экспертом в какой-либо области и заинтересованы в написании новой книги, заполните форму на нашем 
сайте по адресу http://dmk press.com/authors/publish_book/ или напишите в издательство по адресу dmkpress@gmail.com.

Скачивание иСходного кода Примеров

Скачать файлы с дополнительной информацией для книг издательства «ДМК Пресс» можно на сайте www.dmkpress.com на странице с описанием соответствующей книги. 

Доступ онлайн
549 ₽
В корзину