We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

К списку статей

CI/CD пайплайн для PHP-проекта на GitHub Actions: от тестов до продакшн-деплоя

В современном мире разработки программного обеспечения, автоматизация процессов сборки, тестирования и деплоя (Continuous Integration/Continuous Delivery или CI/CD) является ключевым фактором повышения эффективности и качества продукта. Данная статья представляет собой подробное руководство по созданию эффективного CI/CD пайплайна для PHP-проектов, используя платформу GitHub Actions, с учетом требований российского законодательства.

Необходимые инструменты и предпосылки

Для реализации описанного ниже пайплайна потребуются следующие инструменты:

  • Репозиторий PHP-проекта на GitHub
  • GitHub Actions
  • PHP (версия 7.4 или выше рекомендуется)
  • Composer (менеджер зависимостей для PHP)
  • Система контроля версий (Git)
  • Инструмент для деплоя (например, SSH, FTP, Docker, Kubernetes)

Перед началом работы убедитесь, что у вас есть аккаунт на GitHub и настроен доступ к вашему репозиторию.

Структура CI/CD пайплайна

Предлагаемый пайплайн включает в себя следующие этапы:

  1. Code Commit: Загрузка нового кода в репозиторий.
  2. Build: Сборка проекта, установка зависимостей.
  3. Test: Запуск автоматизированных тестов.
  4. Static Analysis: Проверка кода на соответствие стандартам и наличие потенциальных ошибок (например, с помощью PHPStan или Psalm).
  5. Security Scan: Сканирование на уязвимости (например, с помощью OWASP ZAP).
  6. Deploy to Staging: Деплой на тестовую среду.
  7. Manual Approval: Ручное одобрение деплоя в продакшн.
  8. Deploy to Production: Деплой на производственную среду.

Реализация пайплайна с использованием GitHub Actions

Создание пайплайна выполняется путем создания YAML-файлов в директории .github/workflows вашего репозитория. Давайте рассмотрим пример конфигурации для каждого этапа.

1. Code Commit (Push)

Этот этап автоматически запускается при каждом коммите в репозиторий.

name: CI/CD Pipeline
on:
  push:
    branches:
      - main

2. Build (Установка зависимостей)

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Use PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.1
          extensions: pdo_mysql, mbstring, json
      - name: Install Dependencies
        run: composer install --no-interaction --no-ansi

3. Test (Запуск тестов)

  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Use PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.1
          extensions: pdo_mysql, mbstring, json
      - name: Run Tests
        run: php vendor/bin/phpunit --coverage-clover coverage.xml

4. Static Analysis (Проверка кода)

  static-analysis:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Use PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.1
          extensions: pdo_mysql, mbstring, json
      - name: Run PHPStan
        run: composer require --dev phpstan/phpstan
        env:
          PHPSTAN_COMPOSER_REQUIRE: 'phpstan/phpstan' #  Укажите версию phpstan
      - name: Run PHPStan
        run: vendor/bin/phpstan analyse src --level=7 --exclude-directory="vendor"

5. Security Scan (Сканирование на уязвимости)

  security-scan:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Use PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.1
          extensions: pdo_mysql, mbstring, json
      - name: Run OWASP ZAP
        uses: owasp/zap-action@{})
        with:
          zap-version: v2.16.2
          #  Настройте параметры сканирования в соответствии с вашими потребностями

6. Deploy to Staging (Деплой на тестовую среду)

  deploy-staging:
    needs: test, static-analysis, security-scan
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Deploy to Staging
        #  Здесь должна быть логика деплоя на staging среду.  Пример: SSH, FTP, Docker, Kubernetes
        #  (Конфигурация SSH ключей должна быть настроена в GitHub Actions)
        run: echo "Deploying to staging environment..."

7. Deploy to Production (Деплой на производственную среду)

  deploy-production:
    needs: deploy-staging
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to Production
        #  Здесь должна быть логика деплоя на production среду.  Пример: SSH, FTP, Docker, Kubernetes
        #  (Требуется ручное одобрение)
        run: echo "Deploying to production environment... (requires manual approval)"
        #  Установите проверки и одобрения в соответствии с корпоративными политиками. 

Важные аспекты и соблюдение законодательства РФ

При разработке CI/CD пайплайна необходимо учитывать требования российского законодательства, в частности, в области защиты персональных данных (ФЗ-152) и информационной безопасности. Необходимо обеспечить:

  • Шифрование данных при передаче и хранении.
  • Контроль доступа к репозиториям и пайплайнам.
  • Регулярное сканирование на уязвимости.
  • Ведение журнала всех изменений.

Рекомендуется использовать безопасные методы хранения секретов (например, GitHub Secrets) и не хранить ключи API и пароли непосредственно в коде.

Заключение

Создание эффективного CI/CD пайплайна для PHP-проекта на GitHub Actions позволяет автоматизировать процессы разработки, повысить качество продукта и сократить время выхода на рынок. Данное руководство предоставляет базовую структуру пайплайна, которую можно адаптировать под конкретные потребности вашего проекта. Придерживайтесь принципов безопасности и соблюдайте требования российского законодательства.

РыбинскЛАБ – команда опытных разработчиков, специализирующихся на создании надежных и масштабируемых веб-приложений. Мы предлагаем полный спектр услуг по разработке PHP-проектов, включая разработку CI/CD пайплайнов, аудит безопасности и оптимизацию производительности. Обращайтесь, и мы поможем вам вывести ваш проект на новый уровень!

Материал подготовлен и отредактирован для практического применения. Перед внедрением в продакшен проверьте код и команды на своём окружении.

Поделиться материалом

Нужна сложная backend-разработка?

Проектирование архитектуры, PHP/Python backend, интеграции API, боты, автоматизация и оптимизация существующих систем.

Обсудить проект
Поддержать проект