Масштабування та оптимізація CI/CD

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

Сьогодні ми обговоримо, що це за проблема, і дослідимо, як саме ми можемо масштабувати та оптимізувати CI/CD. Тож слідкуйте!

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

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

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

Безперервна інтеграція

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

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

Безперервна доставка

Безперервна доставка або CD поєднує безперервну інтеграцію та тестування, які можна об’єднати в контейнери та запустити у виробництво. Тобто він збирає ці коди та виконані тести та запускає їх у виробництво за допомогою автоматизації.

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

Безперервне розгортання

Хоча поняття безперервної доставки та безперервного розгортання подібні, є відмінності. Якщо їх мета однакова, тобто розгортання програми у виробництві, засоби її досягнення відрізняються. Що відрізняє безперервне постачання від безперервного розгортання, так це випуск.

  Що таке Crunchyroll і яке аніме воно пропонує?

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

Масштабування CI/CD

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

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

Масштабування можна здійснити шляхом визначення процесу CI для виконання модульних тестів і перевірки якості наданого коду.

Далі йде процес компакт-диска для створення образів і їх безперервного розгортання в середовищах і, нарешті, визначення процесу створення образів і їх розгортання у виробничому середовищі.

Кроки для масштабування CI/CD

Першим кроком є ​​узгодження трубопроводу з архітекторами, залучення керівників команд. Він відповідає відображенню гілок Git у середовищах (develop -> development і master -> [homologation and production]). Потім відбувається запуск завдання CI під час кожного запиту на витягування та завдання CD при кожній зміні в зіставлених гілках.

Потік завдань можна створити як для CI, так і для CD.

CI Job Flow складається з 7 етапів:

  • Перевірте вихідну та кінцеву гілку запиту на отримання;
  • Перевіряє, чи злиття не має конфліктів, які потребують вирішення вручну;
  • Виконайте модульні тести;
  • Створіть пакет, щоб перевірити цілісність і можливість компіляції коду;
  • Перевірка якості тригерного коду;
  • Збільшити та закріпити версію проекту до вихідної гілки;
  • Повідомляти репозиторій Git із запитом на отримання про успіх або невдачу за допомогою Webhook або Rest API виклику (Git Repository).

Потік завдання CD проходить таким шляхом:

  • Сповіщена гілка перевірена.
  • Артефакт створюється за допомогою спеціального інструменту для проекту, над яким працюєте.
  • Після надходження артефакту проекти бібліотеки надсилаються до Nexus для зберігання артефакту, і потік завершується.

Проводяться такі дії:

Крок 1. Для згенерованого артефакту створюється образ Docker із застосуванням версії артефакту до образу Docker.

Крок 2: зображення завантажується в реєстр Docker.

Крок 3: Розгортання через розгортання образу через Kubernetes.

  Як видалити продукт на GoDaddy

Для прикладних проектів, які знаходяться в середовищі затвердження/виробництва, виконайте кроки 1 і 2 вище, а потім:

  • Розгортання через розгортання образу через Kubernetes у середовищі затвердження;
  • Робота робить перерву, щоб дочекатися затвердження розгортання для виробництва;
  • У разі схвалення зображення, яке затверджується, просувається до виробництва;
  • В іншому випадку зображення повертається до схвалення.

Оптимізація CI/CD

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

Нижче описано, як можна додатково оптимізувати використання CI/CD:

Надайте пріоритет виправленню пошкодженої збірки

Коли конструкція ламається, її відновлення має бути пріоритетом команди. Якщо збірку не можна виправити за лічені хвилини, команда повинна вирішити, видалити код чи вимкнути позначку функції.

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

Невеликі часті розгортання

Як правило, стабільність програми під загрозою кожного разу, коли відбувається розгортання. Тому ми намагаємося віддаляти розгортання один від одного. Проблема цього підходу полягає в тому, що ми накопичуємо занадто багато змін. Одна з цих змін може піти не так, що змусить нас відкотити інші, які працювали.

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

Автоматизуйте тести якості для зменшення ризиків

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

Довіряйте автоматизованим тестам

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

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

Завжди враховуйте безпеку

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

  4 інструменти для проведення тестових експериментів SEO A/B

Переваги масштабування та оптимізації CI/CD

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

Зменшені накладні витрати

Години розробки зазвичай оплачуються, але як щодо часу, витраченого на ручне розгортання коду чи файлів? Автоматизація великих частин вашого потоку заощадить час для оплачуваної роботи, що кожен може оцінити. Автоматизоване тестування також дозволяє швидше зазнавати невдач, а не знаходити помилки в якості чи виробництві, або, що ще гірше, клієнт знаходить їх. Більше виправлених помилок за той самий проміжок часу — це безперечна перемога.

Доставка з меншою кількістю помилок і меншим ризиком

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

Швидше реагуйте на ринкові умови

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

впевненість

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

Заключні слова

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

Ви також можете переглянути деякі з найкращих інструментів КІ.