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

Непрекъснатата интеграция (CI) и непрекъсната доставка (CD) въплъщават култура, набор от операционни принципи и колекция от практики, които позволяват на екипите за разработка на приложения да доставят промени в кода по-често и надеждно. Изпълнението е известно още като CI / CD тръбопровод. 

CI / CD е една от най-добрите практики за прилагане на екипите на devops. Това е и най-добрата гъвкава методология, тъй като позволява на екипите за разработка на софтуер да се съсредоточат върху изпълнението на бизнес изискванията, качеството на кода и сигурността, тъй като стъпките за внедряване са автоматизирани.

Дефиниран CI / CD

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

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

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

Инструментите за CI / CD помагат да се съхраняват специфичните за околната среда параметри, които трябва да бъдат пакетирани при всяка доставка. След това автоматизацията на CI / CD извършва всички необходими повиквания на услуги към уеб сървъри, бази данни и други услуги, които може да се наложи да бъдат рестартирани или да следват други процедури, когато приложенията бъдат внедрени.

Непрекъснатата интеграция и непрекъснатата доставка изискват  непрекъснато тестване,  тъй като целта е да се доставят качествени приложения и код на потребителите. Непрекъснатото тестване често се прилага като набор от автоматизирана регресия, производителност и други тестове, които се изпълняват в CI / CD тръбопровода.

Зрялата практика на CI / CD devops има възможност за внедряване на непрекъснато разгръщане, където промените в приложенията преминават през CI / CD тръбопровод и преминаващите компилации се разполагат директно в производствените среди. Екипите, практикуващи непрекъсната доставка, избират да се внедрят в производството по ежедневен или дори почасов график, въпреки че непрекъснатата доставка не винаги е оптимална за всяко бизнес приложение.  

Свързано видео: Как да доставяте код по-бързо с CI / CD

Как непрекъснатата интеграция подобрява сътрудничеството и качеството

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

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

Много отбори използват флагове на функции , механизъм за конфигуриране, за да включат или изключат функции и код по време на изпълнение. Функциите, които все още са в процес на разработка, се обвиват с флагове на функции в кода, разполагат се с главния клон за производство и се изключват, докато не са готови за използване. Според скорошно проучване 63 процента от екипите, които използват флагове, съобщават за по-добро тестване и по-високо качество на софтуера. Инструменти за маркиране на функции като CloudBees Rollout, Optimizely Rollouts и LaunchDarkly се интегрират с CI / CD инструменти и позволяват конфигурации на ниво функции.

Друга техника за управление на функции е  разклоняването на контрола на версиите . Стратегия за разклоняване като Gitflow е избрана, за да дефинира протоколи за това как новият код се обединява в стандартни клонове за разработка, тестване и производство. Създават се допълнителни разклонения на функции за такива, които ще отнемат по-дълги цикли на разработка. Когато функцията е завършена, разработчиците след това могат да обединят промените от клонове на функции в основния клон на разработката. Този подход работи добре, но може да стане трудно за управление, ако има много функции, които се разработват едновременно.

След това самият процес на изграждане се автоматизира чрез опаковане на целия софтуер, база данни и други компоненти. Например, ако разработвате Java приложение, CI ще пакетира всички статични файлове на уеб сървъра, като HTML, CSS и JavaScript, заедно с приложението Java и всички скриптове на база данни.

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

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

Непрекъснатото тестване надхвърля автоматизацията на тестовете

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

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

Регресионните тестове са само началото. Тестване на производителността, API тестване, анализ на статичен код, тестване на сигурността и други форми за тестване също могат да бъдат автоматизирани. Ключът е да можете да задействате тези тестове чрез команден ред, webhook или уеб услуга и те да реагират с кодове за състояние на успех или неуспех.

След като тестването е автоматизирано, непрекъснатото тестване предполага, че автоматизацията е интегрирана в CI / CD тръбопровода. Някои модулни и функционални тестове могат да бъдат интегрирани в CI, които сигнализират за проблеми преди или по време на процеса на интеграция. Тестовете, които изискват пълна среда за доставка, като например тестване на производителността и сигурността, често се интегрират в CD и се извършват, след като компилациите се доставят в целевите среди.

CD тръбопроводът автоматизира промените в множество среди

Непрекъсната доставка е автоматизацията, която насочва приложенията към среди за доставка. Повечето екипи за разработка обикновено имат една или повече среди за разработка и тестване, където промените в приложенията се организират за тестване и преглед. Инструмент за CI / CD като Jenkins, CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo или Travis CI се използва за автоматизиране на стъпките и предоставяне на отчети.

Типичен CD тръбопровод има етапи на изграждане, тестване и внедряване. По-сложните тръбопроводи включват много от тези стъпки:

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

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

По-сложният компактдиск може да има други стъпки като извършване на синхронизация на данни, архивиране на информационни ресурси или извършване на корекция на приложения и библиотеки. Инструментите за CI / CD обикновено поддържат пазар на приставки. Например, Дженкинс изброява повече от 1500 приставки, които поддържат интеграция с платформи на трети страни, потребителски интерфейс, администрация, управление на изходния код и управление на компилация.

След като бъде избран инструмент за CI / CD, екипите за разработка трябва да се уверят, че всички променливи на околната среда са конфигурирани извън приложението. Инструментите за CI / CD позволяват да се задават тези променливи, да се маскират променливи като пароли и ключове за акаунти и да се конфигурират по време на разполагане за целевата среда.

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

Внедряване на CI / CD тръбопроводи с Kubernetes и безсървърни архитектури 

Много екипи, работещи с CI / CD тръбопроводи в облачна среда, също използват контейнери като Docker и системи за оркестрация като Kubernetes. Контейнерите позволяват пакетиране и изпращане на приложения по стандартни, преносими начини. Контейнерите улесняват мащабирането или разрушаването на среди, които имат променливо натоварване.

Има много подходи за използване на контейнери, инфраструктура като код и CI / CD тръбопроводи заедно. Можете да проучите опциите, като работите чрез уроци като Kubernetes с Дженкинс или Kubernetes с Azure DevOps.

Безсървърните изчислителни архитектури представляват друг път за разполагане и мащабиране на приложения. В безсървърна среда инфраструктурата се управлява изцяло от доставчика на облачни услуги и приложението консумира ресурси според нуждите въз основа на своята конфигурация. Например на AWS безсървърните приложения, изпълнявани като Lambda функции и разполагания, могат да бъдат интегрирани в тръбопровод на Jenkins CI / CD с приставка. 

CI / CD позволява по-често внедряване на код

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

CI / CD тръбопроводите са предназначени за фирми, които искат да подобряват приложенията често и изискват надежден процес на доставка. Допълнителните усилия за стандартизиране на компилации, разработване на тестове и автоматизиране на внедряванията са производственият процес за внедряване на промени в кода. Веднъж поставен на място, той позволява на екипите да се съсредоточат върху процеса на подобряване на приложенията и по-малко върху системните детайли за доставянето му в изчислителна среда.

CI / CD е най-добрата практика на devops, тъй като се отнася до несъответствието между разработчиците, които искат да прокарват промени често, с операции, които искат стабилни приложения. С въведената автоматизация разработчиците могат по-често да променят промените. Операционните екипи виждат по-голяма стабилност, тъй като средите имат стандартни конфигурации, има непрекъснато тестване в процеса на доставка, променливите на средата са отделени от приложението и процедурите за връщане са автоматизирани.

Въздействието от внедряването на CI / CD тръбопроводи може да бъде измерено като ключов показател за ефективност на devops (KPI). KPI като честота на внедряване, време за промяна и средно време за възстановяване (MTTR) от инцидент често се подобряват, когато е внедрен CI / CD с непрекъснато тестване. CI / CD обаче е само един процес, който може да доведе до тези подобрения, а има и други предпоставки за подобряване на честотите на внедряване.

Първите стъпки с CI / CD изискват екипи за разработка и оперативни екипи да си сътрудничат по технологии, практики и приоритети. Екипите трябва да постигнат консенсус относно правилните подходи за техния бизнес и технологии, така че след като CI / CD е на мястото си, екипът да бъде на борда и да следва последователно практиките.