- PVSM.RU - https://www.pvsm.ru -
Сегодня мы обратимся к истории термина, обсудим сложности внедрения CI и приведем несколько популярных инструментов, которые помогут с ним работать.
[1]
/ Flickr / Altug Karakoc [2] / CC BY [3] / Фото изменено
Continuous Integration (непрерывная интеграция) — подход к разработке приложений, подразумевающий частое проведение сборок проекта и тестирование кода.
Цель — сделать процесс интеграции предсказуемым и обнаружить потенциальные баги и ошибки на ранней стадии, чтобы было больше времени на их исправление.
Впервые термин Continuous Integration появился в 1991 году. Его ввел в употребление создатель языка UML Гради Буч [4] (Grady Booch). Инженер представил концепцию CI как часть собственной практики разработки — метода Буча [5]. Он подразумевал инкрементальное уточнение архитектуры при проектировании объектно-ориентированных систем. Гради не описал каких-то требований к непрерывной интеграции. Но позже в своей книге "Object-Oriented Analysis and Design with Applications [6]" он сказал, что задача методики — ускорить выпуск «внутренних релизов».
В 1996 году CI переняли создатели методологии экстремального программирования [7] (XP) — Кент Бек [8] (Kent Beck) и Рон Джеффрис [9] (Ron Jeffries). Непрерывная интеграция стала одним из двенадцати ключевых принципов их подхода. Основатели XP уточнили требования к методологии CI и отметили необходимость проводить сборку проекта несколько раз в день.
В начале 2000-х методологию непрерывной интеграции стал продвигать один из основателей Agile Alliance Мартин Фаулер [10] (Martin Fowler). Его эксперименты с CI привели к появлению первого программного инструмента в этой сфере — CruiseControl. Утилиту создал коллега Мартина — Мэттью Фоммель (Matthew Foemmel).
Цикл сборки в инструменте реализован в виде демона, периодически проверяющего систему управления версиями на изменения в кодовой базе. Решение можно скачать и сегодня — оно распространяется [11] под BSD-подобной лицензией.
С появлением софта для CI практику начали перенимать всё больше компаний. Согласно исследованию Forrester [стр.5 отчёта [12]], в 2009 году 86% из пятидесяти опрошенных технологических компаний использовали или внедряли CI-методы.
Сегодня практика Continuous Integration применяется организациями из самых разных индустрий. В 2018 году крупный облачный провайдер провёл опрос среди ИТ-специалистов компаний из сферы услуг, образования и финансов. Из шести тысяч респондентов 58% ответили, что используют в работе инструменты и принципы CI.
Основу непрерывной интеграции составляют два инструмента — система контроля версий и CI-сервер. Последний может быть как физическим устройством, так и виртуальной машиной в облачной среде. Разработчики один или несколько раз в день загружают новый код. CI-сервер автоматически копирует его со всеми зависимости и выполняет сборку. После — запускает интеграционные и юнит-тесты. Если тесты проходят успешно, то CI-система разворачивает код.
Общую схему процесса можно представить следующим образом:
Методология CI предъявляет ряд требований к разработчикам:
Первая проблема — высокие операционные расходы. Даже если компания использует открытые CI-инструменты (о которых мы поговорим дальше), то ей все равно придется потратить деньги на поддержку инфраструктуры. Однако решением могут стать облачные технологии.
Они упрощают сборку разномасштабных компьютерных конфигураций. Плюс компании платят [14] только за используемые ресурсы, что помогает сэкономить на инфраструктуре.
Согласно опросам [стр.14 статьи [15]], непрерывная интеграция повышает нагрузку на сотрудников компании (по крайней мере первое время). Им приходится осваивать новые инструменты, а коллеги не всегда помогают с обучением. Поэтому приходится разбираться с новыми фреймворками и сервисами «на ходу».
Третья сложность — проблемы с автоматизацией. С ней сталкиваются организации с большим объёмом legacy-кода, который не покрыт автоматизированными тестами. Это приводит к тому, что код просто переписывают перед полноценным внедрением CI.
/ Flickr / theilr [16] / CC BY-SA [17]
Одними из первых преимущества методики оценили ИТ-гиганты. Google использует [18] непрерывную интеграцию с середины 2000-х. CI внедрили для решения проблемы с задержками в работе поисковой системы. Непрерывная интеграция помогла оперативно обнаруживать и устранять неполадки. Сейчас CI используют все подразделения ИТ-гиганта.
Непрерывная интеграция помогает и небольшим компаниям, а еще инструменты CI используют финансовые и медицинские организации. Например, в Morningstar сервисы непрерывной интеграции помогли патчить уязвимости на 70% быстрее. А медицинская платформа Philips Healthcare смогла в два раза ускорить тестирование обновлений.
Вот нескольких популярных инструментов для CI:
Автор: 1cloud
Источник [28]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/313844
Ссылки в тексте:
[1] Image: https://habr.com/ru/company/1cloud/blog/447090/
[2] Altug Karakoc: https://www.flickr.com/photos/altugkarakoc/24332965423/
[3] CC BY: https://creativecommons.org/licenses/by/2.0/
[4] Гради Буч: https://ru.wikipedia.org/wiki/%D0%91%D1%83%D1%87,_%D0%93%D1%80%D0%B0%D0%B4%D0%B8
[5] метода Буча: https://en.wikipedia.org/wiki/Booch_method
[6] Object-Oriented Analysis and Design with Applications: https://www.amazon.com/Object-Oriented-Analysis-Design-Applications-3rd/dp/020189551X
[7] экстремального программирования: https://en.wikipedia.org/wiki/Extreme_programming
[8] Кент Бек: https://ru.wikipedia.org/wiki/%D0%91%D0%B5%D0%BA,_%D0%9A%D0%B5%D0%BD%D1%82
[9] Рон Джеффрис: https://en.wikipedia.org/wiki/Ron_Jeffries
[10] Мартин Фаулер: https://en.wikipedia.org/wiki/Martin_Fowler_(software_engineer)
[11] распространяется: http://cruisecontrol.sourceforge.net/
[12] отчёта: https://www.osp.ru/netcat_files/18/10/h_d8eddd303b6cf0c38c23601c4363bee4
[13] оказывается: https://devops.com/continuous-testing-devops-bottleneck/
[14] платят: https://1cloud.ru/blog/rabochee-mesto-programmista-v-oblake?utm_source=habrahabr&utm_medium=cpm&utm_campaign=ci&utm_content=blog
[15] статьи: https://arxiv.org/ftp/arxiv/papers/1703/1703.07019.pdf
[16] theilr: https://www.flickr.com/photos/theilr/8520345358/
[17] CC BY-SA: https://creativecommons.org/licenses/by-sa/2.0/
[18] использует: https://itrevolution.com/case-study-automated-testing-google/
[19] Jenkins: https://github.com/jenkinsci
[20] входит в нашу DevOps-систему: https://1cloud.ru/blog/devops-v-razrabotke-oblaka-1cloud?utm_source=habrahabr&utm_medium=cpm&utm_campaign=ci&utm_content=blog
[21] Buildbot: https://github.com/buildbot/buildbot
[22] Concourse CI: https://github.com/concourse/concourse
[23] Gitlab CI: https://docs.gitlab.com/ee/ci/
[24] применяет: https://about.gitlab.com/2016/07/22/building-our-web-app-on-gitlab-ci/
[25] Codeship: https://github.com/codeship
[26] Резервное копирование файлов: как подстраховаться от потери данных: https://1cloud.ru/blog/rezervnoe-kopirovanie-failov?utm_source=habrahabr&utm_medium=cpm&utm_campaign=ci&utm_content=blog
[27] Варианты IT-инфраструктуры организации: https://1cloud.ru/blog/varianty-it-infrastrukture-dlya-organizacii?utm_source=habrahabr&utm_medium=cpm&utm_campaign=ci&utm_content=blog
[28] Источник: https://habr.com/ru/post/447090/?utm_source=habrahabr&utm_medium=rss&utm_campaign=447090
Нажмите здесь для печати.