Що таке CI/CD?

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

Безперервна інтеграція (CI) відноситься до практики  автоматичної та частої інтеграції змін коду в спільне сховище вихідного коду. Безперервна доставка та/або розгортання (CD) — це двоскладовий процес, який стосується інтеграції, тестування та доставки змін коду. Безперервна доставка не закінчується автоматичним виробничим розгортанням, тоді як постійне розгортання автоматично випускає оновлення у виробниче середовище.

У сукупності ці підключені практики часто називають  «конвеєром CI/CD» і підтримуються командами розробки та операцій, які працюють разом у гнучкий спосіб за допомогою  підходу DevOps або  розробки надійності сайту (SRE) .

Чому CI/CD важливий?

CI/CD допомагає організаціям уникати помилок і збоїв коду, зберігаючи безперервний цикл розробки й оновлення програмного забезпечення. 

Оскільки додатки збільшуються, функції CI/CD можуть допомогти зменшити складність, підвищити ефективність і оптимізувати робочі процеси.

Оскільки CI/CD автоматизує ручне втручання людини, яке традиційно необхідне для передачі нового коду з коміту у develop, час простою мінімізується, а випуски коду відбуваються швидше. А завдяки можливості швидшої інтеграції оновлень і змін до коду відгуки користувачів можна використовувати частіше й ефективніше, що означає позитивні результати для користувачів і загалом більш задоволених клієнтів. 

Що таке безперервна інтеграція?

«CI» в CI/CD завжди означає безперервну інтеграцію, процес автоматизації для розробників, який сприяє частішому об’єднанню змін коду в спільну гілку. У міру внесення цих оновлень запускаються кроки автоматизованого тестування, щоб переконатися в надійності змін об’єднаного коду. 

У сучасній розробці додатків мета полягає в тому, щоб кілька розробників одночасно працювали над різними функціями однієї програми. Однак, якщо організація налаштована на об’єднання всього розгалуженого вихідного коду в один день (відомий як «день злиття»), результат може бути стомлюючою, ручною та трудомісткою роботою. 

Це тому, що коли розробник, який працює ізольовано, вносить зміни в програму, існує ймовірність, що вони конфліктуватимуть з різними змінами, які одночасно вносяться іншими розробниками. Ця проблема може посилитися, якщо кожен розробник налаштував власне локальне  інтегроване середовище розробки (IDE) , а не команда домовилася про одну  хмарну IDE.

CI можна розглядати як рішення проблеми одночасної розробки занадто багатьох гілок програми, які можуть конфліктувати одна з одною.

Успішний CI означає, що коли зміни, внесені розробником у програму, об’єднані, ці зміни перевіряються шляхом автоматичного створення програми та виконання різних рівнів автоматизованого тестування, як правило, модульних і інтеграційних тестів, щоб переконатися, що зміни не зламали програму. Це означає тестування всього, від класів і функцій до різних модулів, які складають цілу програму. Якщо автоматичне тестування виявляє конфлікт між новим і існуючим кодом, CI полегшує швидке та часте виправлення цих помилок.

Що таке «CD» у CI/CD?

«CD» у CI/CD стосується безперервної доставки та/або безперервного розгортання, які є пов’язаними поняттями, які іноді використовуються як синоніми. Обидва стосуються автоматизації подальших етапів конвеєра, але іноді вони використовуються окремо, щоб проілюструвати, наскільки відбувається автоматизація. Вибір між безперервним постачанням і безперервним розгортанням залежить від стійкості до ризику та конкретних потреб команд розробників і операційних команд.

Що таке безперервна доставка?

 Безперервна доставка автоматизує випуск перевіреного коду в репозиторій після автоматизації збірок і модульного та інтеграційного тестування в CI. Отже, щоб мати ефективний безперервний процес доставки, важливо, щоб CI вже був вбудований у ваш конвеєр розробки.

У безперервній доставці кожен етап — від об’єднання змін коду до доставки готових збірок — передбачає автоматизацію тестування та автоматизацію випуску коду. Наприкінці цього процесу команда операцій може швидко розгорнути програму в робочій версії.

Безперервна доставка зазвичай означає, що зміни, внесені розробником у програму, автоматично перевіряються на наявність помилок і завантажуються в репозиторій (наприклад, GitHub або реєстр контейнерів), де їх потім може розгорнути операційна команда в робочому середовищі. Це відповідь на проблему поганої видимості та комунікації між розробниками та бізнес-командами. З цією метою мета безперервної доставки полягає в тому, щоб мати кодову базу, яка завжди готова до розгортання у виробничому середовищі, і забезпечити мінімальні зусилля для розгортання нового коду.

Що таке безперервне розгортання?

Останнім етапом зрілого конвеєра CI/CD є безперервне розгортання. Безперервне розгортання є розширенням безперервної доставки та може стосуватися автоматизації випуску змін розробника зі сховища до робочого, де вони можуть використовуватися клієнтами.

Компакт-диск вирішує проблему перевантаження операційних команд ручними процесами, які сповільнюють доставку додатків. Він базується на перевагах безперервної доставки шляхом автоматизації наступного етапу в конвеєрі.

На практиці безперервне розгортання означає, що зміни, внесені розробником у хмарну програму, можуть запрацювати протягом кількох хвилин після її написання (за умови, що вона пройшла автоматизоване тестування). Це значно полегшує постійне отримання та врахування відгуків користувачів. У сукупності всі ці пов’язані практики CI/CD роблять розгортання програми менш ризикованим, завдяки чому легше випускати зміни до програм невеликими частинами, а не всі відразу. 

Однак, оскільки на етапі конвеєра перед виробництвом немає ручних воріт, безперервне розгортання значною мірою залежить від добре розробленої автоматизації тестування. Це означає, що безперервне розгортання може вимагати великих початкових інвестицій, оскільки автоматизовані тести потрібно буде написати, щоб врахувати різноманітні етапи тестування та випуску в конвеєрі CI/CD.

CI/CD проти DevOps

CI/CD є важливою частиною  методології DevOps , яка спрямована на сприяння співпраці між командами розробки та операцій. І CI/CD, і DevOps зосереджуються на автоматизації процесів інтеграції коду, таким чином прискорюючи процеси, за допомогою яких ідея (наприклад, нова функція, запит на вдосконалення або виправлення помилок) переходить від розробки до розгортання у виробничому середовищі, де вона може надавати цінність для користувача.

У рамках спільної роботи DevOps безпека — це спільна відповідальність, інтегрована від кінця до кінця. Це мислення настільки важливе, що воно спонукало декого ввести термін « DevSecOps », щоб підкреслити необхідність створення основи безпеки в ініціативах DevOps. DevSecOps (розробка, безпека та операції) — це підхід до культури, автоматизації та дизайну платформи, який інтегрує безпеку як спільну відповідальність протягом усього життєвого циклу ІТ. Ключовим компонентом DevSecOps є впровадження безпечного конвеєра CI/CD.

Що таке безпека CI/CD?

Безпека CI/CD використовується для захисту конвеєрів коду за допомогою автоматизованих перевірок і тестування, щоб запобігти вразливостям у доставці програмного забезпечення. Впровадження безпеки у ваш конвеєр допомагає захистити код від атак, запобігти витокам даних, відповідати політикам і гарантувати якість.

Швидкий характер розробки та розгортання без належної безпеки може наражати на такі ризики, як:

  • Розкриття конфіденційних даних зовнішнім джерелам
  • Використання незахищеного коду або сторонніх компонентів
  • Несанкціонований доступ до сховищ вихідного коду або інструментів збірки

Виявлення та пом’якшення вразливостей протягом усього циклу розробки програмного забезпечення гарантує, що зміни коду ретельно перевіряються та відповідають стандартам безпеки перед розгортанням у виробництві.

Які поширені інструменти CI/CD?

Інструменти CI/CD можуть допомогти команді автоматизувати розробку, розгортання та тестування. Деякі інструменти спеціально обробляють інтеграцію (CI), деякі керують розробкою та розгортанням (CD), тоді як інші спеціалізуються на постійному тестуванні або пов’язаних функціях.

Tekton Pipelines — це фреймворк CI/CD для платформ Kubernetes, який забезпечує стандартний хмарний CI/CD із контейнерами.

Окрім Tekton Pipelines, інші інструменти CI/CD з відкритим кодом, які ви можете дослідити, включають:

  • Jenkins , призначений для роботи з будь-яким засобом: від простого CI-сервера до повного компакт-центру
  • Spinnaker , CD-платформа, створена для багатохмарних середовищ.
  • GoCD , сервер CI/CD з акцентом на моделюванні та візуалізації.
  • Concourse , «безперервний інструмент із відкритим кодом».
  • Screwdriver , платформа для збирання, розроблена для компакт-дисків.

Команди можуть також розглянути керовані інструменти CI/CD, які доступні від різних постачальників. Основні публічні хмарні постачальники пропонують рішення CI/CD, а також GitLab , CircleCI , Travis CI , Atlassian Bamboo та багато інших.

Крім того, будь-який інструмент, який є основою для DevOps, швидше за все, буде частиною процесу CI/CD. Інструменти для автоматизації конфігурації (такі як Ansible , Chef і Puppet ), середовища виконання контейнерів (такі як Docker , rkt і cri-o ) і керування контейнерами ( Kubernetes ) не є суто інструментами CI/CD, але вони відображатимуть у багатьох робочих процесах CI/CD.