DEV Community

Андрей Викулов (VProger)
Андрей Викулов (VProger)

Posted on • Originally published at viku-lov.ru on

CI/CD для PHP, Bitrix и Laravel: GitHub Actions на практике, без магии и боли

CI/CD для PHP-проектов: Bitrix и Laravel на GitHub Actions без боли

Если ты до сих пор:

  • деплоишь по SSH руками,
  • боишься трогать main перед выходными,
  • или проверяешь код «на глаз»,

— значит, CI/CD у тебя либо нет, либо он декоративный.

Разберём всё спокойно:

что такое CI/CD, зачем он нужен именно в PHP-проектах, и как его нормально настроить для Bitrix и Laravel с помощью GitHub Actions.


Что такое CI/CD — коротко и по делу

CI — Continuous Integration

CI — это автоматическая проверка кода при каждом изменении:

  • код забрали из репозитория
  • поставили зависимости
  • проверили синтаксис
  • запустили тесты
  • убедились, что проект не развалился

Если что-то пошло не так — CI сразу об этом сообщает.

💡 CI отвечает на вопрос:

«Этот код вообще можно запускать?»


CD — Continuous Delivery / Deployment

CD — это автоматическая доставка кода дальше:

  • на staging
  • на production
  • или хотя бы в готовый билд

💡 CD отвечает на вопрос:

«Можно ли этот код безопасно выкатить?»


Почему CI/CD особенно важен для PHP, Bitrix и Laravel

PHP-проекты часто страдают от трёх вещей:

  1. Человеческий фактор

«Я забыл обновить vendor», «Я не закоммитил файл», «У меня локально работало».

  1. Сложные окружения

PHP-версия, расширения, права, кеши, cron, агенты.

  1. Прод = страшно

Особенно в Bitrix, где ошибка = белый экран.

CI/CD убирает эту лотерею.


Почему именно GitHub Actions

GitHub Actions хороши тем, что:

  • уже встроены в репозиторий
  • не требуют отдельного сервера
  • конфиг лежит рядом с кодом
  • YAML читается как сценарий

Для 90% PHP-проектов — идеальный вариант.


Структура CI/CD в GitHub Actions

Файлы лежат здесь:


.github/

└── workflows/

└── ci.yml

Enter fullscreen mode Exit fullscreen mode

Один файл = один сценарий.


Базовый CI для PHP-проекта

Начнём с минимального, но правильного CI.

Пример: CI для PHP 8.2 + Composer


name: PHP CI

on:

push:

branches: [main]

pull\_request:

jobs:

php-ci:

runs-on: ubuntu-latest

steps:

- name: Checkout code

uses: actions/checkout@v4

- name: Setup PHP

uses: shivammathur/setup-php@v2

with:

php-version: "8.2"

extensions: mbstring, intl, pdo, pdo\_mysql

coverage: none

- name: Install dependencies

run: composer install --no-interaction --prefer-dist

- name: PHP syntax check

run: find . -type f -name "\*.php" -exec php -l {} \;

Enter fullscreen mode Exit fullscreen mode

Разбираем, что здесь происходит (по-человечески)

on


on:

push:

branches: [main]

pull\_request:

Enter fullscreen mode Exit fullscreen mode

CI запускается:

  • при пуше в main
  • при каждом Pull Request

Важно:

CI без проверки PR — это самообман.


Установка PHP


uses: shivammathur/setup-php@v2

Enter fullscreen mode Exit fullscreen mode

Это официальный де-факто action для PHP.

Можно указать:

  • версию PHP
  • расширения
  • ini-настройки

Composer


composer install --prefer-dist

Enter fullscreen mode Exit fullscreen mode

Это обязательно:

  • проверяется composer.lock
  • гарантируется воспроизводимость
  • исключается «у меня работает»

Добавляем PHP-CodeSniffer (очень рекомендуется)


- name: Run PHP\_CodeSniffer

run: vendor/bin/phpcs --standard=PSR12 src/

Enter fullscreen mode Exit fullscreen mode

CI должен ругаться на стиль, а не ты в код-ревью.


CI для Laravel: правильно и без магии

Laravel — это PHP + своя экосистема.

Минимальный CI для Laravel


- name: Copy env

run: cp .env.example .env

- name: Generate app key

run: php artisan key:generate

- name: Run migrations

run: php artisan migrate --force

- name: Run tests

run: php artisan test

Enter fullscreen mode Exit fullscreen mode

💡 Важно:

В CI используется отдельная БД (обычно SQLite).


SQLite для CI (очень удобно)


DB\_CONNECTION=sqlite

DB\_DATABASE=:memory:

Enter fullscreen mode Exit fullscreen mode

Быстро, изолированно, без лишнего геморроя.


CI для Bitrix: реальность, а не сказки

Bitrix — особый зверь. Но CI возможен и нужен.

Что реально проверять в CI под Bitrix

  • ✔ PHP-синтаксис
  • ✔ Composer (если используется)
  • ✔ Пользовательский код (/local)
  • ✔ Статический анализ
  • ✔ Отсутствие фаталов

Пример CI для Bitrix-проекта


name: Bitrix CI

on:

pull\_request:

push:

branches: [main]

jobs:

bitrix-ci:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v4

- uses: shivammathur/setup-php@v2

with:

php-version: "8.1"

extensions: mbstring, gd, mysqli

- name: PHP syntax check (local)

run: find local -type f -name "\*.php" -exec php -l {} \;

Enter fullscreen mode Exit fullscreen mode

Золотое правило Bitrix:

CI проверяет код, а не ядро.


Переходим к CD: деплой на сервер

Теперь — автоматическая выкладка.

Общая идея

  1. CI прошёл
  2. Код смержен в main
  3. Запускается деплой
  4. Сервер обновляется

Secrets: как не спалить сервер

В GitHub:


Settings → Secrets and variables → Actions

Enter fullscreen mode Exit fullscreen mode

Добавляем:

  • SSH_HOST
  • SSH_USER
  • SSH_KEY

Пример деплоя по SSH


- name: Deploy to server

if: github.ref == 'refs/heads/main'

run: |

ssh -o StrictHostKeyChecking=no $SSH\_USER@$SSH\_HOST "

cd /var/www/project &&

git pull &&

composer install --no-dev &&

php artisan migrate --force

"

Enter fullscreen mode Exit fullscreen mode

Никогда не храни логины и ключи в YAML.


Типовая схема CI/CD для PHP-проекта


PR → CI → merge → CI → CD → prod

Enter fullscreen mode Exit fullscreen mode

Просто. Надёжно. Повторяемо.


Частые ошибки новичков

  • ❌ CI запускается только вручную
  • ❌ Нет проверки PR
  • ❌ Деплой без условий
  • ❌ Пароли в коде
  • ❌ Один job на всё
  • ❌ Нет логов

Хорошая практика (запомни)

  • ✔ CI всегда на PR
  • ✔ CD только из main
  • ✔ Secrets только через GitHub
  • ✔ Логи читаемы
  • ✔ Минимум магии
  • ✔ Максимум предсказуемости

Итог

CI/CD — это не «для больших».

Это для тех, кто хочет меньше ломать и больше спать.

Для PHP, Bitrix и Laravel:

  • CI — обязателен
  • CD — желателен
  • GitHub Actions — отличный выбор

Если ты деплоишь руками — ты админ.

Если у тебя CI — ты разработчик.

Если есть CI/CD — ты инженер 😏

Read more on viku-lov.ru

Top comments (0)