Конвеєр як код, пояснений найпростішим можливим способом

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

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

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

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

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

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

Виконання всіх вищезазначених дій вручну можливо, але це займе багато часу і підвищить ризик виникнення помилок. Чи є спосіб автоматизувати ці процеси? Так! Можна створити конвеєр, в якому визначено всі необхідні кроки. Після цього, кожного разу, коли ви вносите зміни у свій код, ви можете запустити конвеєр і не турбуватися про ручне виконання кожного кроку.

Переваги “конвеєра як коду”

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

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

#1. Послідовність

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

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

#2. Повторюваність

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

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

#3. Співпраця

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

“Конвеєр як код” також підтримує контроль версій та дозволяє проводити рецензування коду. Це сприяє дотриманню кращих практик і своєчасному виявленню потенційних проблем.

Далі розглянемо, як можна створити власний конвеєр, використовуючи підхід “конвеєр як код”.

“Конвеєр як код” у Jenkins

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

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

У Jenkins конвеєр являє собою набір плагінів, які виконуються у визначеному порядку для створення вашої CI/CD системи. Незалежно від складності задач, ви можете створити свій конвеєр як код, використовуючи синтаксис доменно-специфічної мови (DSL). DSL побудований на базі Apache Groovy.

Основою підходу “Конвеєр як код” у Jenkins є Jenkinsfile – текстовий файл, який містить код, що описує різні етапи та дії конвеєра. Давайте розберемося, як створити конвеєр як код за допомогою Jenkinsfile.

Як створити свій конвеєр як код?

Після встановлення та запуску Jenkins, перейдіть до веб-інтерфейсу у браузері. Можливо, потрібно буде виконати вхід. Після цього ви потрапите на головну сторінку. Саме тут ви почнете створення свого конвеєра.

  • На панелі зліва знайдіть кнопку “Новий елемент”.
  • Натисніть її, щоб перейти на наступну сторінку.
  • На новій сторінці з’явиться запит на створення елемента.
  • У полі “Введіть назву елемента” введіть бажану назву. Це обов’язково.
  • Врахуйте, що каталог буде створено з тією ж назвою. Тому рекомендується уникати пробілів, щоб уникнути небажаних наслідків.
  • Після цього виберіть опцію “Конвеєр” і натисніть кнопку “OK” внизу сторінки.
  • Відкриється вікно конфігурації.
  • На панелі зліва клацніть на опцію “Конвеєр” або прокрутіть сторінку вниз до розділу “Конвеєр”.

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

Створення конвеєра як коду безпосередньо в Jenkins

У розділі “Конвеєр” ви можете розпочати створення свого першого “конвеєра як коду”.

У випадаючому меню “Визначення” виберіть опцію “Сценарій конвеєра”. Під ним ви знайдете текстову область, де можна написати код для конвеєра. Jenkins підтримує сценарії, створені безпосередньо тут.

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

Використовуючи декларативний синтаксис, створіть три прості етапи: “Збірка коду”, “Тестування коду” та “Розгортання коду”, використовуючи наступний фрагмент коду:

pipeline {
    agent any

    stages {
        stage('Build Code') {
            steps {
                echo 'This is the step for build...'
            }
        }
        stage('Test Code') {
            steps {
                echo 'This is the step to test...'
            }
        }
        stage('Deploy Code') {
            steps {
                echo 'This step deploys the code...'
            }
        }
    }
}

Також можна використовувати скриптовий синтаксис, як показано нижче:

node {
    stage('Build Code') {
        echo 'This is the step for build...'
    }
    stage('Test Code') {
        echo 'This is the step to test...'
    }
    stage('Deploy Code') {
        echo 'This step deploys the code...'
    }
}

Натисніть “Зберегти”. Потім натисніть кнопку “Створити зараз” на панелі зліва. Це запустить конвеєр, який ви щойно створили.

Після завершення роботи конвеєра ви можете перевірити його статус в історії збірок. Якщо це ваш перший запуск, натисніть на номер збірки №1. Далі, на панелі зліва, виберіть “Вивід консолі”. Ви побачите три оператори echo, які містяться у коді конвеєра для кожного етапу.

Створення конвеєра як коду за допомогою зовнішнього файлу

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

Перш ніж налаштувати конвеєр Jenkins, вам знадобиться зовнішній репозиторій і система контролю версій. Створімо репозиторій Git та розмістимо його віддалено на GitHub. Тут ви створите свій Jenkinsfile і збережете його.

  • Перейдіть до свого профілю GitHub. За потреби створіть безкоштовний обліковий запис.
  • Створіть новий репозиторій. Назвіть його customJenkins.
  • Переконайтеся, що на вашому локальному комп’ютері встановлено Git.
  • Створіть каталог у бажаному місці.
  • Перейдіть до цього каталогу і відкрийте термінал.
  • Ініціалізуйте пустий репозиторій Git за допомогою команди git init.
  • Тепер створіть новий файл, який буде вашим Jenkinsfile. Назвіть його customJenkinsfile.
  • Запишіть свій конвеєр як код у цьому файлі. Для прикладу скористайтесь наведеним нижче:
pipeline {
    agent any

    stages {
        stage('Build Code') {
            steps {
                echo 'This is the step for build defined in custom file...'
            }
        }
        stage('Test Code') {
            steps {
                echo 'This is the step to test defined in custom file...'
            }
        }
        stage('Deploy Code') {
            steps {
                echo 'This step defined in custom file deploys the code...'
            }
        }
    }
}
  • Додайте щойно створений файл до Git за допомогою команди git add –all у терміналі.
  • Зафіксуйте файл у Git за допомогою команди git commit -m “Створено кастомний файл jenkins”.
  • Зв’яжіть локальний репозиторій Git з віддаленим сховищем за допомогою git remote add origin [email protected]:<ваше ім’я користувача>/customJenkins.git.
  • Потім завантажте файл у віддалений репозиторій (GitHub) за допомогою git push –set-upstream origin master.

Тепер у вас є віддалений репозиторій на GitHub, який містить кастомний файл Jenkins. Налаштуймо Jenkins для використання цього файлу.

Налаштування Jenkins для використання Jenkinsfile з GitHub

  • Відкрийте головну панель Jenkins.
  • Створіть новий конвеєр або натисніть “Налаштувати” на панелі зліва для існуючого конвеєра.
  • Прокрутіть сторінку вниз до розділу “Конвеєр”.
  • У випадаючому меню “Визначення” виберіть опцію “Сценарій конвеєра з SCM”.
  • В опції SCM виберіть Git.
  • Вкажіть посилання на репозиторій GitHub у полі “URL-адреса сховища” у розділі “Сховища”.
  • Переконайтеся, що у розділі “Гілки для збірки” вказано */master.
  • Прокрутіть сторінку вниз до поля “Шлях до сценарію”. Тут вкажіть ім’я файлу Jenkins, як customJenkinsfile. Натисніть “Зберегти”.

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

Тепер ви успішно створили власний конвеєр розробки програмного забезпечення, використовуючи “конвеєр як код”. Крім того, ви увімкнули контроль версій для сценарію конвеєра. Будь-які зміни, внесені до коду конвеєра, тепер можна відстежувати за допомогою комітів Git. Далі розглянемо кращі практики написання “конвеєра як коду”.

Кращі практики написання ефективного “конвеєра як коду”

Розгляньмо кращі практики, яких слід дотримуватися під час написання конвеєра як коду.

  • Забезпечуйте чіткість коду конвеєра і уникайте складних умов.
  • Якщо конвеєр виконує забагато команд, розбийте їх на різні етапи.
  • Використовуйте зовнішні файли з контролем версій для зберігання сценаріїв конвеєра.
  • Використовуйте можливості мови кодування, наприклад, Groovy, для інтеграції різних етапів.
  • Уникайте викликів Jenkins.getInstance або його допоміжних методів, щоб зменшити ризики безпеки та продуктивності.
  • Не переписуйте вбудовані команди конвеєра, такі як sh і timeout.
  • Для складних задач з високим навантаженням на процесор, створіть зовнішні інструменти або скрипти і підключіть їх до конвеєра.
  • Використовуйте широкий спектр плагінів, доступних для Jenkins, для вирішення різних задач.
  • Забезпечте обробку винятків та помилок, оскільки у процесі виконання може виникнути щось непередбачуване.
  • Не робіть конвеєр як код залежним від бізнес-логіки.
  • Застосовуйте параметризовані аргументи, де це можливо, щоб зробити конвеєр придатним для повторного використання.

Конвеєр як код: простий підхід до складних процесів

Підхід “Конвеєр як код” спрощує автоматизацію CI/CD конвеєра, представляючи весь процес у вигляді коду. Хоча CI/CD конвеєри автоматизують процеси збірки, тестування та розгортання змін коду, використання “конвеєра як коду” підносить автоматизацію на новий рівень. Він дає змогу визначити робочий процес у текстовому форматі замість використання графічних інтерфейсів.

Завдяки “конвеєру як коду” ви гарантуєте, що кожен крок робочого процесу виконується у правильній послідовності, мінімізуючи ризик виникнення непередбачуваних проблем. Крім того, ви отримуєте ряд переваг, зокрема: послідовність, повторюваність і сприяння співпраці.

Використовуючи цей посібник, ви навчилися створювати власні конвеєри, використовуючи Jenkins – широко використовуваний інструмент CI/CD. Jenkins пропонує потужну та гнучку платформу для реалізації концепції “конвеєр як код” через Jenkinsfile. Дотримуйтесь кращих практик та створюйте робочі процеси, що відповідають вашим вимогам до конвеєра.

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