Какво е CI/CD? Непрекъсната интеграция и непрекъсната доставка

⚡ Умно обобщение

Непрекъснатата интеграция е практика за разработване на софтуер, при която членовете на екипа обединяват работата си в споделено хранилище поне веднъж дневно и всяко попълване на заявка задейства автоматизирано изграждане и тестване, за да се открият грешки в интеграцията рано.

  • 🔄 Определение: Разработчиците интегрират код ежедневно и всеки commit се проверява чрез автоматизирано изграждане.
  • 🚚 CI срещу CD: CI тества всяка промяна; Continuous Delivery (непрекъсната доставка) поддържа софтуера достъпен за пускане по всяко време.
  • 🧪 Pipeline: Commit задейства етапите на изграждане, тестване и внедряване в един непрекъснат поток.
  • 🧰 Инструменти: Jenkins, Bamboo, и TeamCity автоматизирайте изграждането и тестването.
  • 📉 Възползвайте се: Ранното и често тестване означава по-малко грешки и по-бързи и по-безопасни издания.
  • 🤖 AI помощ: Инструментите с изкуствен интелект откриват нестабилни тестове и автоматично сортират грешки в изграждането.

Какво е 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 сървъра здрав и стабилен, дори когато не се изпълняват компилации, и осигурява по-добро качество на кода за всеки проект.

Въпроси и Отговори

Непрекъснатото внедряване (Continuous Delivery) поддържа всяка промяна достъпна за публикуване и я внедрява в производствена среда с ръчно одобрение. Непрекъснатото внедряване (Continuous Deployment) премахва този контрол, като автоматично публикува всяка промяна, която преминава през конвейера.

Типичният конвейер има етапи на създаване на източник, изграждане, тестване, пускане и внедряване. Code посветен на контрола на версиите, се компилира, тества автоматично, след което се подготвя и пуска в производство.

Интеграционният ад е болезненото сливане на много промени на разработчиците, запазени до края на проекта. Непрекъснатата интеграция го избягва, като интегрира и тества малки промени непрекъснато.

Правете комити рано и често, поне веднъж на ден, на малки работни стъпки. Честите комити правят промените лесни за тестване, лесни за сливане и лесни за отмяна, ако е необходимо.

Артефактът на компилация е пакетираният изход на компилация, като например JAR, изображение на контейнер или двоичен файл. Същият артефакт се промотира чрез тестване и производство за постигане на съгласуваност.

Самостоятелно хостваната непрекъсната интелигентност (CI) работи на управлявани от вас сървъри, което ви дава пълен контрол, но изисква повече поддръжка. Хостираната (облачна) CI се поддържа от доставчик и се мащабира лесно без управление на инфраструктурата.

Изкуственият интелект предвижда кои тестове да се изпълнят за промяна, приоритизира рисковите области и автоматизира сортирането на неуспехите. Това съкращава времето за обратна връзка и поддържа бързи конвейери с нарастването на кодовата база.

Да. Моделите за машинно обучение забелязват тестове, които преминават и се провалят непоследователно, свързани с клъстери грешки при изграждане и изваждат наяве вероятната първопричина, helping екипите поддържат тръбопровода надежден.

Обобщете тази публикация с: