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

Що таке конвеєр CI/CD?
A Конвеєр CI/CD автоматизує шлях, який проходить зміна коду від фіксації розробника до розгорнутого релізу. Він збирає код, запускає набір тестів і безпечно переносить бінарний файл в одне або кілька середовищ. Добре розроблений конвеєр зменшує кількість помилок, що виникають вручну, швидко повертає відгуки розробникам і дозволяє виконувати невеликі, часті ітерації продукту.
Конвеєр поєднує автоматизацію та безперервний моніторинг протягом усього життєвого циклу програмного забезпечення — від інтеграції та тестування до доставки та розгортання. Пов’язані практики разом називаються конвеєром CI/CD.
Що таке безперервна інтеграція, безперервна доставка та безперервне розгортання?
- Безперервна інтеграція (CI): практика розробки, за якої члени команди інтегрують свою роботу принаймні раз на день. Кожна інтеграція перевіряється автоматизованою збіркою та тестовим запуском, що швидко виявляє помилки.
- Безперервна доставка (CD): інженерна практика, за якої команда підтримує продукт у стані готовності до випуску в кінці кожної ітерації. Розгортання у робочу версію зазвичай відбувається вручну через затвердження.
- Безперервне розгортання (CD): Безперервна доставка виходить на крок далі — кожна зміна, яка проходить автоматичні перевірки, автоматично розгортається у виробничому середовищі, без людського втручання.
Етапи конвеєра CI/CD
Конвеєр CI/CD — це виконуваний файл, що описує кроки, необхідні для випуску нової версії програмного забезпечення. Збій на будь-якому етапі запускає надсилання сповіщення — електронною поштою, Slack, або іншим каналом — щоб відповідальний інженер був негайно попереджений.
Етапи конвеєра CI/CD.
Стадія джерела
Конвеєр запускається зміною в репозиторії коду. Будь-який коміт повідомляє інструмент CI/CD про необхідність запуску відповідного конвеєра. Інші поширені тригери включають ініційовані користувачем робочі процеси, заплановані запуски та результати конвеєрів вище за течією.
Етап побудови
Етап збірки компілює вихідний код та перетворює його залежності на виконуваний артефакт. Компільовані мови, такі як C++, Java, C та Go повинні створювати тут двійкові файли. Інтерпретовані мови, такі як JavaScript, Python, і Ruby все ще отримує переваги від цього етапу для пакування залежностей, lint-обробки та створення образів контейнерів.
Збій на етапі збірки зазвичай вказує на фундаментальну неправильну конфігурацію проекту, тому проблему необхідно негайно вирішувати.
Тестовий етап
На етапі тестування виконується автоматизований набір тестів для перевірки правильності коду та поведінки програмного забезпечення. Він виявляє легко відтворювані помилки, перш ніж вони потраплять до клієнтів. Написання та підтримка тестів є відповідальністю розробника — конвеєр лише забезпечує їх виконання.
Етап розгортання
Етап розгортання переносить перевірений артефакт у цільове середовище, таке як проміжне розгортання, UAT або продакшн. Після того, як збірка пройде всі необхідні тести, розгортання може бути запущено автоматично (безперервне розгортання) або після ручного перевірки (безперервна доставка).
Приклад конвеєра CI/CD
У покроковому покроковому посібнику нижче показано конкретний конвеєр, який використовує GitHub, CircleCIі AWS.
- Source Code КОНТРОЛЬ: розмістити код програми в приватному репозиторії GitHub для її інтеграції з сервісами збірки, сканування та розгортання.
- Безперервна інтеграція: з'єднуватися CircleCI до репозиторію, щоб кожне натискання завантажувало новий код, збирало його та виконувало набір тестів.
- Розгорнути в UAT: конфігурувати CircleCI розгорнути успішні збірки в середовищі AWS UAT для тестування зацікавленими сторонами.
- Розгортання у виробничому середовищі: повторно використовуйте ті самі кроки CI/CD для просування артефакту до виробничого середовища, що контролюється вручну шляхом затвердження, якщо ви практикуєте безперервну доставку (Continuous Delivery).
Найкращі практики конвеєра CI/CD
Наведені нижче методи забезпечують швидкість, надійність та довіру команди до конвеєрів:
- Задокументуйте поточний процес доставки, перш ніж автоматизувати його, щоб знати, що залишити, змінити або видалити.
- Почніть з невеликого підтвердження концепції, а не автоматизуйте весь конвеєр одразу.
- Структуруйте конвеєр як кілька етапів, щоб спочатку виконувалися фундаментальні перевірки.
- Починайте кожен робочий процес із чистого, ізольованого середовища, щоб забезпечити відтворюваність збірок.
- Додайте інструменти з відкритим кодом, які охоплюють усе: від стилю коду до сканування безпеки.
- Використовуйте центр якості коду, який проводить однакові тести для кожної гілки.
- Рецензуйте кожен запит на зняття елементів (pull request) та розглядайте результат процесу розробки як частину рецензування.
- Визначте показники успіху, перш ніж розпочати перехід — вони стимулюють постійне вдосконалення.
Переваги трубопроводів CI/CD
Зрілий конвеєр CI/CD забезпечує кілька вимірних переваг:
- Замінює схильні до помилок ручні збірки та релізи надійною автоматизацією.
- Покращує узгодженість та якість кожного артефакту, що відправляється.
- Підвищує гнучкість — нові функції можуть бути додані на вимогу.
- Спрощує комунікацію між розробниками, відділом контролю якості та операційною діяльністю.
- Прискорює цикли зворотного зв'язку з клієнтами завдяки частим релізам.
- Збільшує видимість продукту за допомогою інформаційних панелей, журналів та сповіщень.
- Видаляє помилки ручного введення та зменшує вартість випуску.
- Скорочує життєвий цикл розробки програмного забезпечення.
- Забезпечує швидкий зворотний зв'язок від розробника до кінцевого користувача.
- Виділяє зміни, які порушують роботу збірки, щоб їх можна було швидко скасувати.
- Поєднує автоматизовані тести з легким ручним дослідницьким тестуванням для підтримки високої якості.
Важливі інструменти CI/CD
Сучасні команди обирають зі здорової екосистеми інструментів CI/CD. Найбільш широко впроваджені описані нижче.
1) Jenkins
Jenkins — це сервер безперервної інтеграції з відкритим кодом, який автоматизує робочі процеси збірки, тестування та випуску. Написано мовою Java та підтримується великою екосистемою плагінів, Jenkins забезпечує живленням сотні тисяч установок по всьому світу.
Особливості гри:
- Збирає та тестує код багато разів на день.
- Автоматизує весь процес збірки/тестування, заощаджуючи час та зменшуючи кількість дефектів.
- Розгортає код після кожної успішної збірки та тестування.
- Прискорює цикл розробки завдяки швидкому зворотному зв'язку.
посилання: https://www.jenkins.io/download/
2) Bamboo
Bamboo — це сервер збірки з безперервною інтеграцією, який об’єднує автоматичну збірку, тестування та випуск в одному інструменті. Він бездоганно інтегрується з Jira Software та Bitbucket.
Особливості гри:
- Виконує паралельні пакетні тести.
- Швидке встановлення та налаштування.
- Дозволи для кожного середовища дозволяють розробникам та відділу контролю розгортати програмне забезпечення у власних середовищах.
- Вбудовані робочі процеси розгалуження Git, які автоматично об'єднують гілки.
посилання: https://www.atlassian.com/software/bamboo
3) CircleCI
CircleCI це гнучкий інструмент неінтегрованої інтеграції, який запускає збірки для кросплатформних мобільних додатків, 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 важливий для ІТ-лідерів?
- Покращує надійність та передбачуваність релізів.
- Робить інженерну організацію більшtracтивний для розробників.
- Витягує код із системи контролю версій та виконує збірку одним клацанням миші.
- Безпечно переміщує бінарні файли в цільові середовища.
- Дозволяє керівникам проектів керувати змінними середовища та конфігурацією для кожного середовища.
- Публікує компоненти програми в веб-сервісах, базах даних, API та інших сервісах.
- Відображає дані журналу та сповіщення про стан кожного випуску.
- Перевіряє зміни коду до їх впровадження, зменшуючи дефекти у виробництві.
Ключові показники ефективності (KPI) конвеєра CI/CD
- Цикл або час розгортання: час, необхідний для переходу від створення до виробництва. Тенденції виявляють вузькі місця у вашому процесі доставки.
- Частота розгортання: як часто ви відправляєте. Частіші, менші релізи знижують ризик і полегшують виправлення збоїв.
- Змінити час виконання: час від початку розробки до успішного розгортання. Відображає, наскільки добре планування, кодування та реалізація працюють разом.
- Зміна частоти відмов: відсоток розгортань, які спричиняють інциденти або потребують відкату. Tracкс безпека трубопроводу.
- MTTR (середній час до відновлення): середній час відновлення обслуговування після збою. Вимірює стійкість.
- MTTF (середній час до відмови): середній час між відмовами. Tracдовгострокова надійність ks.




