Какво е CI/CD? Непрекъсната интеграция и непрекъсната доставка
⚡ Умно обобщение
Непрекъснатата интеграция е практика за разработване на софтуер, при която членовете на екипа обединяват работата си в споделено хранилище поне веднъж дневно и всяко попълване на заявка задейства автоматизирано изграждане и тестване, за да се открият грешки в интеграцията рано.
Какво е непрекъсната интеграция (CI)?
Непрекъснато интегриране е метод за разработка на софтуер, при който членовете на екипа интегрират работата си поне веднъж на ден. Всяка интеграция се проверява от автоматизирано изграждане, което открива грешки. Концепцията е въведена преди повече от две десетилетия, за да се избегне „интеграционният ад“, който се случва, когато интеграцията се отложи за края на проект.
След commit на кода, софтуерът се изгражда и тества незабавно. В голям проект с много разработчици, commit-ите се случват много пъти на ден. С всеки commit кодът се изгражда и тества; ако тестът премине успешно, компилацията се проверява за внедряване; и ако внедряването е успешно, кодът се изпраща до продукция. Този цикъл на commit, компилация, тестване и внедряване е непрекъснат, което дава името на практиката.
Какво е непрекъсната доставка (CD)?
Continuous Delivery е метод на софтуерно инженерство, при който екип разработва софтуер в кратки цикли и гарантира, че той може да бъде надеждно пуснат по всяко време. Целта е да се изгражда, тества и пуска софтуер с добра скорост и честота, намалявайки разходите, времето и риска от внедряване на промени чрез чести актуализации в производството.
Разлика между CI и CD
Непрекъснато интегриране е подход за автоматично тестване на всяка промяна в кодовата база, докато непрекъснатата доставка е подход за безопасно и бързо внедряване на промени като нови функции, конфигурация и корекции на грешки в производство.
Разработка без CI срещу разработка с CI
| Разработка без CI | Разработка с CI |
|---|---|
| Много бъгове | По-малко грешки |
| Редки ангажименти | Редовни ангажименти |
| Редки и бавни освобождавания | Редовни работни издания |
| Трудна интеграция | Лесна и ефективна интеграция |
| Тестването става късно | Тестването се извършва рано и често |
| Проблемите са по-трудни за отстраняване | Проблемите се откриват и отстраняват по-бързо |
| Лоша видимост на проекта | По-добра видимост на проекта |
Разлика между компилация и непрекъсната интеграция
Докато компилацията само преобразува код в машинен език, CI изпълнява няколко по-широки дейности:
- Интеграция с база данни: Поддържа базата данни и кода синхронизирани и автоматизира създаването на базата данни и тестовите данни.
- Code проверка: Осигурява здравословна кодова база, идентифицира проблемите рано и прилага най-добрите практики.
- Автоматизирано внедряване: Позволява ви да пускате продукта по всяко време и го поддържа в постоянно демо състояние.
- Генериране на документи: Поддържа документацията актуална и създава отчети и показатели за изграждане.
- компилация: Преобразува код от високо ниво в машинен език и гарантира, че той се компилира на всяка целева платформа.
В идеалния случай компилацията се изпълнява от командния ред, а не зависи от IDE, случва се непрекъснато на специален CI сървър (не cron задание), задейства се при всяко включване и предоставя незабавна обратна връзка без усилия от страна на разработчика.
Какво ви е необходимо, за да проведете процеса на CI?
- Система за контрол на версиите (VCS): Надежден метод за централизиране и запазване на промените, направени във вашия проект с течение на времето.
- Виртуална машина: Резервен сървър или поне един виртуална машина да изградите вашата система.
- Решения за хоствани CI инструменти: За да се избегне управлението на сървъри, хостваните решения поддържат целия процес и предлагат по-лесна мащабируемост.
- Инструменти: Ако изберете самостоятелно хостван вариант, инсталирайте CI инструмент, като например Jenkins, TeamCity, Bambooили GitLab.
Как работи непрекъснатата интеграция?
Стар пример е Nokia, която някога е използвала процедура, наречена „nightly build“. След множество commity от много разработчици през деня, софтуерът е бил изграждан всяка нощ. Тъй като е бил изграждан само веднъж на ден, изолирането, идентифицирането и поправянето на грешки в голяма кодова база е било болезнено.
Later Екипът възприе непрекъсната интеграция. Софтуерът беше изграден и тестван веднага щом разработчикът публикуваше код, така че всяка грешка се откриваше незабавно и отговорният разработчик можеше бързо да я отстрани.
Характеристики на CI
- Позволява ви да поддържате хранилище с един източник.
- Позволява ви да тествате клонинг на производствената среда, съхраняван близо до производствената.
- Осигурява постоянна наличност на текуща компилация.
- Прави целия процес на изграждане, тестване и внедряване видим за всички заинтересовани страни.
Защо да използваме CI?
- Помага ви да създавате по-качествен софтуер и да провеждате повтаряеми тестове.
- Мащабира резултатите от доставките на инженерните екипи и позволява на разработчиците да работят по функции паралелно.
- Повишава видимостта и комуникацията в екипа.
- Осигурява незабавна обратна връзка при възникване на проблем и намалява риска, като прави внедряването по-бързо и по-предсказуемо.
- Избягва объркване в последния момент при пускането.
Най-добри практики за използване на CI системи
- Коммитирайте рано и често и никога не коммитайте счупен код.
- Отстранявайте незабавно грешките в изграждането и действайте въз основа на показателите.
- Изграждайте във всяка целева среда и създавайте артефакти от всяка изградена система.
- Автоматизирайте компилацията, така че да не зависи от IDE.
- Изграждайте и тествайте всичко, когато се промени, включително схемата на базата данни.
- Поддържайте изграждането бързо и използвайте автоматизирано внедряване.
Недостатъци на CI
- Необходими са време за първоначална настройка и обучение, за да свикнете с CI сървър.
- Трябва да се разработят подходящи тестови процедури, а добре изграденият тестов набор се нуждае от значителни ресурси.
- Познатите процеси трябва да бъдат конвертирани и са необходими допълнителни сървъри и среди.
- Времена на изчакване могат да възникнат, когато няколко разработчици искат да интегрират кода си едновременно.
Инструменти за процеса на CI
Jenkins
Jenkins е инструмент с отворен код за непрекъсната интеграция, написан на JavaТова улеснява тестването в реално време и отчитането на изолирани промени в по-голяма кодова база и помага на разработчиците бързо да откриват и отстраняват дефекти, като същевременно автоматизира тестването на компилациите.
Bamboo
Bamboo е сървър за непрекъсната интеграция, който извършва автоматизирано изграждане, тестване и пускане на едно място. Работи безпроблемно с Jira и Bitbucket и поддържа много технологии като Docker, Git, SVN, Mercurial и AWS.
TeamCity
TeamCity е сървър за непрекъсната интеграция с много мощни функции. Той поддържа CI сървъра здрав и стабилен, дори когато не се изпълняват компилации, и осигурява по-добро качество на кода за всеки проект.

