Оскільки ви розробляєте веб-додатки вже деякий час, ви, напевно, помітили, що багато речей повторюються, навіть якщо вони не повинні повторюватися. Дуже часто це технічне управління проектами, управління версіями файлів, автоматизований перегляд коду, різноманітна обробка даних, або, можливо, розгортання на сервері та забезпечення безпеки навколо цього.
Консультуючи компанії, я дуже часто стикаюся з проблемою, коли профілактика дуже сильно недооцінюється. Причиною часто є те, що розробники сприймають деякі речі як дуже складні і що це додасть їм роботи. Але правда полягає в тому, що зазвичай потрібно лише один раз налаштувати всю систему, а потім просто пожинати довгострокові вигоди.
CI/CD - це інструмент, який дозволяє автоматизувати рутинні завдання, що мають схожу основу та постійно повторюються в проектах. Найбільш поширеним застосуванням КІ є проведення автоматизованих тестів, перегляд коду, автоматизоване розгортання (розгортання додатку на веб-сервері), управління проектами або, можливо, аудит безпеки.
Уявіть собі КІ як віртуальну операційну систему, яка виконує заздалегідь визначені команди терміналу або запускає певні програми. Результатом роботи КІ є або успіх, або невдача, яка відображається безпосередньо в проекті, а також надсилається адміністраторам, які можуть відреагувати на неї. Належною практикою є запуск завдань CI після певної події (наприклад, фіксації в репозиторії, отримання запиту на злиття/витягування, тегу/версії/релізу або запуску циклу cron).
Основою КІ є конфігураційний файл, де ми визначаємо його поведінку та реакцію на події. У випадку з GitHub достатньо створити допоміжний каталог .github/workflows
і створити всередині нього будь-який файл з розширенням .yml
. GitHub буде аналізувати його з кожним коммітом і виконувати за необхідності.
Уявімо, що ми хочемо визначити новий конфігураційний файл з певним завданням. Оскільки це завдання, яке буде виконуватися безпосередньо GitHub або іншим середовищем на віртуальній машині, нам потрібно визначити базові речі про середовище, в тому числі:
У випадку з робочими місцями, ми далі визначаємо:
Вищезгаданий контейнер вже є першою підготовкою до повної докеризації проекту. Базове використання CI відносно просте, і вам зовсім не потрібно розуміти Docker, достатньо знати команди в Terminal.
В рамках виконання конкретних кроків завдання нам необхідно запустити окремі команди, які побудують інсталяцію щойно встановленої нами операційної системи. Так у випадку з PHP важливо буде встановити лише мову PHP (і вказати версію), клонувати репозиторій проекту в runner, встановити залежності проекту (найчастіше Composer), і запустити сам тест.
В ІТ-спільноті існує поширений забобон, що Microsoft - це корпорація зла, яка робить неякісні речі. Однак у випадку з GitHub Actions це зовсім не так, адже вони мають, цілком об'єктивно, найкращу платформу для КІ у світі.
Фундаментальною перевагою GitHub CI є простота та елегантність нотації. За допомогою всього декількох рядків ви можете налаштувати власне тестове середовище і керувати ним автоматично, навіть без попередніх знань. При цьому величезною перевагою я вважаю швидкість опрацювання конкретних завдань. Наприклад, тест на codestyle (форматування коду) та PhpStan (перевірка типів даних, логіки та загальної коректності) може бути оцінений GitHub Actions на звичайному проекті менш ніж за 50 секунд, тоді як GitLab, наприклад, оцінює той самий тест майже за 8 хвилин! Інші рішення, такі як Travis, є відносно дорогими, і більшість розробників все одно не оцінюють переваги їхніх спеціальних функцій.
GitHub має велику базу готових дій та пакетів, які можна одразу використовувати. Це, як правило, операційні системи, мови програмування або бібліотеки спільноти.
Базу акцій можна знайти прямо в [Маркетплейсі] (https://github.com/marketplace?type=actions), наприклад, моя улюблена акція - [Відправка SMS у разі невдачі через Twillio] (https://github.com/marketplace/actions/twilio-sms).
Дуже багато прикладів [я публікую у власних репозиторіях] (https://github.com/baraja-core), де можна прозоро побачити, яку конкретно конфігурацію я використовую.
Наприклад, у лютому 2021 року я використовував цю конфігурацію для перевірки стилю коду в проєкті:
name: Coding Styleon:push:branches:- masterpull_request:types: [ assigned, opened, synchronize, reopened ]schedule:- cron: '1 * * * *'jobs:nette_cc:name: Nette Code Checkerruns-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: shivammathur/setup-php@v2with:php-version: 7.4coverage: none- run: composer create-project nette/code-checker temp/code-checker ^3 --no-progress- run: php temp/code-checker/code-checker --strict-types --no-progressnette_cs:name: Nette Coding Standardruns-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: shivammathur/setup-php@v2with:php-version: 8.0coverage: none- run: composer create-project nette/coding-standard temp/coding-standard ^3 --no-progress --ignore-platform-reqs- run: php temp/coding-standard/ecs check src
Цей конфігураційний файл встановлює останню версію Ubuntu (runs-on: ubuntu-latest
), клонує репозиторій проекту (uses: actions/checkout@v2
), встановлює PHP (uses: shivammathur/setup-php@v2
) версії 7.4 (php-version: 7.4
), встановлює пакет code-checker, а потім запускає завдання через PHP.
Ще кілька зауважень для користувачів, які не настільки досвідчені:
0
(нуль), це означає успіх, а будь-яке інше число - невдачу. Наприклад, так само працюють shell-скриптиphp file.php
), яка запуститься і може робити все, на що вона має права (працювати з файлами, спілкуватися через Інтернет, виводити на екран, ...)composer.json
файлу require-dev
, щоб вони не встановлювалися в конкретному проекті як обов'язкова залежністьНа відміну від інших репозиторіїв, GitHub підтримує так звані GitHub Apps та боти для автоматизації. Це велика база готових ботів, які можуть виконувати автоматизовані операції над вашими проектами (навіть без CI) і коли вони з чимось зіткнуться, то, наприклад, подадуть issue або відправлять pull request з виправленням.
Я особисто ним користуюся і вам рекомендую:
Багато інших додатків можна знайти на [Marketplace] (https://github.com/marketplace?type=apps).
Я дуже полюбив використовувати завдання автоматизації в GitHub.
У всіх моїх репозиторіях налаштовані автоматичні перевірки, тому, коли я відправляю будь-який комміт (або будь-хто інший в спільноті), я отримую зворотній зв'язок в реальному часі про те, чи були порушені якість коду (стиль коду і PhpStan), безпека і багато іншого.
У мене є кілька тестів, які запускаються автоматично щогодини. Наприклад, якщо є вразливість в системі безпеки або CVE, я буду знати про це максимум через годину, навіть на рівні конкретних проектів і що саме сталося.
З часом, протестувавши різні конфігурації, я прийшов до висновку, що ідеальним мінімальним налаштуванням вважаю наступні залежності до Composer:
phpstan/phpstan
- перевірка коду на коректність і логічністьtracy/tracy
- звітність про помилки високого рівня та ведення журналу помилокphpstan/phpstan-nette
- Розширення Phpstan і спеціальності в NetteВ ідеалі, базові налаштування безпеки повинні бути налаштовані на автоматичний запуск принаймні кожні 8 годин, а помилки повинні надсилатися на вашу електронну пошту. Тому що коли відбувається збій в інсталяції проекту або виявляється нова вразливість, я хочу знати про це якнайшвидше і реагувати негайно.
Пам'ятайте, що все працює автоматично, тому ви завжди можете бути впевнені, що навіть якщо ви використовуєте складні процеси для перевірки безпеки та інших речей, це не коштує вам ніяких зайвих зусиль і вам просто потрібна добре виконана початкова конфігурація.
Тому що в профілактиці та автоматизації - величезний потенціал!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | uk