Урок за CI/CD конвейер с пример
⚡ Умно обобщение
CI/CD Pipeline е автоматизираният път, който преминава от промяна на кода от commit до продукционна версия. Той изгражда, тества и внедрява софтуер през четири етапа – Source (източник), Build (комбитиране), Test (тестване) и Deployment (разполагане) – намалявайки ръчните грешки и скъсявайки цикъла между разработчиците и крайните потребители.

Какво е CI/CD тръбопровод?
A CI/CD тръбопровод автоматизира пътя, който промяната на кода изминава от commit-а на разработчика до внедрената версия. Той изгражда кода, изпълнява тестовия пакет и безопасно популяризира двоичния файл в една или повече среди. Добре проектираният конвейер намалява ръчните грешки, връща бърза обратна връзка на разработчиците и позволява малки, чести итерации на продукта.
Процесът на разработване (conveyor) свързва автоматизацията и непрекъснатото наблюдение през целия жизнен цикъл на софтуера - от интеграцията и тестването до доставката и внедряването. Свързаните практики се наричат общо CI/CD конвейер.
Какво е непрекъсната интеграция, непрекъсната доставка и непрекъснато внедряване?
- Непрекъсната интеграция (CI): Практика за разработка, при която членовете на екипа интегрират работата си поне веднъж дневно. Всяка интеграция се проверява чрез автоматизирано изграждане и тестване, което бързо открива грешки.
- Непрекъсната доставка (CD): инженерна практика, при която екипът поддържа продукта в състояние, готово за пускане в края на всяка итерация. Разгръщането в производствена среда обикновено е ръчно одобрение.
- Непрекъснато внедряване (CD): Непрекъснатата доставка отвежда една стъпка напред — всяка промяна, която преминава автоматизирани проверки, се внедрява автоматично в производствената среда, без човешки вход.
Етапи на CI/CD тръбопровод
CI/CD конвейерът е изпълнима спецификация на стъпките, необходими за доставяне на нова версия на софтуера. Неуспех на който и да е етап задейства известие - по имейл, Slackили друг канал — така че отговорният инженер да бъде незабавно уведомен.
Етапи на CI/CD конвейер.
Етап на източника
Канвалерът се задейства от промяна в хранилището с код. Всяко попълване (commit) уведомява инструмента CI/CD да изпълни съответстващия канвалер. Други често срещани задействания включват инициирани от потребителя работни потоци, планирани изпълнения и резултати от канвалери нагоре по веригата.
Етап на изграждане
Етапът на изграждане компилира изходния код и разрешава неговите зависимости в изпълним артефакт. Компилирани езици като C++, Java, C и Go трябва да генерират двоични файлове тук. Интерпретирани езици като JavaСценарий, Python, а Ruby все още се възползва от този етап, за да пакетира зависимости, да обработва lint-ове и да създава изображения на контейнери.
Неуспех на етапа на изграждане обикновено показва фундаментална неправилна конфигурация на проекта, така че проблемът трябва да бъде решен незабавно.
Етап на тестване
Тестовият етап изпълнява автоматизирания набор от тестове, за да валидира коректността на кода и поведението на софтуера. Той открива лесно възпроизводими грешки, преди да достигнат до клиентите. Писането и поддържането на тестовете е отговорност на разработчика — конвейерът само налага тяхното изпълнение.
Етап на разгръщане
Етапът на внедряване (deployment) промотира проверения артефакт в целева среда, като например staging, UAT или production. След като компилацията премине всички необходими тестове, внедряването може да се задейства автоматично (Continuous Deployment) или след ръчен контрол (Continuous Delivery).
Пример за CI/CD тръбопровод
Ръководството по-долу показва конкретен конвейер, който използва GitHub, CircleCIи AWS.
- източник Code контрол: хоствайте кода на приложението в частно хранилище на GitHub, така че да се интегрира с услугите за изграждане, сканиране и внедряване.
- Непрекъсната интеграция: свържете CircleCI към хранилището, така че всяко push-ване да изтегля новия код, да го изгражда и да изпълнява тестовия пакет.
- Разгръщане в UAT: конфигурирате CircleCI да се внедрят успешни компилации в AWS UAT среда за тестване от заинтересовани страни.
- Разгръщане в производствения режим: Използвайте повторно същите стъпки на CI/CD, за да популяризирате артефакта в производство, след ръчно одобрение, ако практикувате непрекъсната доставка (Continuous Delivery).
Най-добри практики за CI/CD конвейер
Практиките по-долу поддържат тръбопроводите бързи, надеждни и надеждни за екипа:
- Документирайте текущия процес на доставка, преди да го автоматизирате, за да знаете какво да запазите, промените или премахнете.
- Започнете с малко доказателство за концепцията, вместо да автоматизирате целия процес наведнъж.
- Структурирайте тръбопровода като няколко етапа, толкова бързо, че първо да се извършат фундаментални проверки.
- Започвайте всеки работен процес от чиста, изолирана среда, за да поддържате възпроизводимостта на компилациите.
- Добавете инструменти с отворен код, които обхващат всичко - от стил на код до сканиране за сигурност.
- Използвайте център за качество на кода, който изпълнява едни и същи тестове за всеки клон.
- Проверявайте от колеги всяка заявка за изтегляне и третирайте резултата от процеса като част от прегледа.
- Определете показателите за успех, преди да започнете прехода – те водят до непрекъснато подобрение.
Предимства на CI/CD тръбопроводите
Зрелият CI/CD конвейер предоставя няколко измерими ползи:
- Заменя склонните към грешки ръчни компилации и издания с надеждна автоматизация.
- Подобрява консистентността и качеството на всеки доставен артефакт.
- Увеличава гъвкавостта — нова функционалност може да бъде доставена при поискване.
- Опростява комуникацията между разработчиците, QA и оперативния отдел.
- Ускорява цикъла на обратна връзка с клиентите с чести издания.
- Увеличава видимостта на продукта чрез табла за управление, лог файлове и известия.
- Премахва ръчните грешки и намалява разходите за пускане на пазара.
- Съкращава жизнения цикъл на разработка на софтуер.
- Осигурява бърза обратна връзка от разработчика до крайния потребител.
- Маркира промените, които нарушават компилацията, така че да могат да бъдат бързо отменени.
- Съчетава автоматизирани тестове с леко ръчно проучвателно тестване, за да поддържа високо качество.
Важни инструменти за CI/CD
Съвременните екипи избират от здравословна екосистема от инструменти за CI/CD. Най-широко използваните са описани по-долу.
1) Jenkins
Jenkins е сървър с отворен код за непрекъсната интеграция, който автоматизира работните процеси за изграждане, тестване и пускане. Написан на Java и поддържан от голяма екосистема от плъгини, Jenkins захранва стотици хиляди инсталации по целия свят.
Характеристики:
- Изгражда и тества код многократно на ден.
- Автоматизира целия процес на изграждане/тестване, спестявайки време и намалявайки дефектите.
- Разгръща код след всяко успешно изграждане и тестване.
- Ускорява цикъла на разработка чрез бърза обратна връзка.
Връзка: https://www.jenkins.io/download/
2) Bamboo
Bamboo е сървър за изграждане с непрекъсната интеграция, който обединява автоматично изграждане, тестване и пускане в един инструмент. Той се интегрира безпроблемно с Jira Software намлява Bitbucket.
Характеристики:
- Изпълнява паралелни партидни тестове.
- Бързо инсталиране и конфигуриране.
- Разрешенията за всяка среда позволяват на разработчиците и QA да внедряват в собствените си среди.
- Вградени работни процеси за разклоняване в Git, които автоматично сливат клонове.
Връзка: https://www.atlassian.com/software/bamboo
3) CircleCI
CircleCI е гъвкав инструмент за непрекъсната интеграция (CI), който изпълнява компилации за мобилни приложения за различни платформи, Python API, Docker клъстери и други. Намалява грешките и подобрява качеството на приложенията чрез бърза обратна връзка.
Характеристики:
- Избор на среда за изграждане.
- Поддържа много езици, включително C++, JavaСкрипт, .NET, PHP, Pythonи Руби.
- Поддръжка на Docker за персонализирани изображения за изграждане.
- Автоматично отменя чакащи на опашка или изпълняващи се компилации, когато се задейства по-нова компилация.
Връзка: https://circleci.com/
4) Действия в GitHub, GitLab CI и Argo CD
GitHub Actions и GitLab CI интегрират CI/CD директно в платформата за контрол на изходния код, премахвайки необходимостта от външен сървър за изграждане. Argo CD добавя непрекъснато внедряване в стил GitOps за Kubernetes клъстери, съгласувайки клъстера с желаното състояние, декларирано в Git.
Защо CI/CD Pipeline има значение за ИТ лидерите?
- Подобрява надеждността и предвидимостта на изданията.
- Прави инженерната организация по-ефективнаtracтивно за разработчиците.
- Извлича код от контрола на версиите и изпълнява компилацията с едно щракване.
- Премества безопасно двоичните файлове в целевите среди.
- Позволява на ръководителите на проекти да управляват променливите на средата и конфигурацията за всяка среда.
- Публикува компоненти на приложението в уеб, база данни, API и други услуги.
- Показва данни от регистрационни файлове и предупреждения за състоянието на всяка версия.
- Проверява промените в кода, преди да напреднат, намалявайки дефектите в производството.
Ключови показатели за ефективност (KPI) на CI/CD канала
- Цикъл или време за внедряване: времето, необходимо за преминаване от изграждане към производство. Тенденциите разкриват пречки във вашия процес на доставка.
- Честота на внедряване: колко често изпращате. По-честите, по-малки издания намаляват риска и улесняват отстраняването на повреди.
- Промяна на времето за изпълнение: времето от началото на разработката до успешното внедряване. Отразява колко добре планирането, кодирането и доставката работят заедно.
- Промяна на процента на отказ: процентът на внедряванията, които причиняват инциденти или изискват връщане към предишните настройки. Tracбезопасността на тръбопровода.
- MTTR (Средно време до възстановяване): средното време за възстановяване на услугата след повреда. Измерва устойчивостта.
- MTTF (Средно време до отказ): средното време между повреди. Tracks дългосрочна надеждност.




