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 пайплайн для Laravel и Flask проектов с использованием GitHub Actions и Helm-чартов

В современном мире разработки программного обеспечения автоматизация процессов сборки, тестирования и развертывания (CI/CD) является критически важной для обеспечения быстрой поставки качественного продукта. В этой статье мы рассмотрим создание CI/CD пайплайна для проектов, разработанных на PHP (Laravel) и Python (Flask), с использованием GitHub Actions и Helm-чартов. Особое внимание будет уделено соответствию актуальному законодательству Российской Федерации, в частности, требованиям к обработке персональных данных (152-ФЗ) и хранению данных на территории РФ. Поскольку мы, РыбинскЛАБ, специализируемся на разработке и внедрении подобных решений, мы поделимся своим опытом и лучшими практиками.

CI/CD: Ключевые понятия и преимущества

CI (Continuous Integration) – непрерывная интеграция кода в общий репозиторий. Автоматизированные сборки и тесты позволяют выявлять ошибки на ранних стадиях разработки. CD (Continuous Delivery/Deployment) – непрерывная доставка или развертывание. Автоматизация процесса развертывания на тестовые и продуктивные среды.

Преимущества CI/CD:

  • Ускорение времени выхода продукта на рынок
  • Снижение рисков, связанных с ручными ошибками
  • Повышение качества продукта
  • Улучшение взаимодействия между разработчиками

Выбор инструментов: GitHub Actions и Helm

GitHub Actions – это платформа для автоматизации рабочих процессов разработки, непосредственно интегрированная в GitHub. Она позволяет создавать CI/CD пайплайны, используя YAML-файлы, хранящиеся в репозитории. Бесплатного тарифа GitHub Actions часто достаточно для небольших и средних проектов.

Helm – это менеджер пакетов для Kubernetes. Он упрощает развертывание, обновление и управление приложениями в Kubernetes, используя Helm-чарты – наборы YAML-файлов, описывающих ресурсы Kubernetes.

CI пайплайн для Laravel проекта

Рассмотрим пример CI пайплайна для Laravel проекта. Основными этапами будут:

  1. Checkout: Клонирование репозитория.
  2. Setup PHP: Установка необходимой версии PHP.
  3. Dependencies: Установка зависимостей проекта (Composer).
  4. Linting: Проверка кода на соответствие стандартам (PHPStan, ESLint).
  5. Testing: Запуск тестов (PHPUnit).

name: Laravel CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
      - name: Install Dependencies
        run: composer install --no-interaction --prefer-dist --optimize-autoloader
      - name: Run Linting
        run: composer run lint
      - name: Run Tests
        run: composer run test

CI пайплайн для Flask проекта

Для Flask проекта пайплайн будет похожим, но с использованием Python и его менеджера пакетов pip.

  1. Checkout: Клонирование репозитория.
  2. Setup Python: Установка необходимой версии Python.
  3. Dependencies: Установка зависимостей проекта (pip).
  4. Linting: Проверка кода на соответствие стандартам (flake8, pylint).
  5. Testing: Запуск тестов (pytest).

name: Flask CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      - name: Install Dependencies
        run: pip install -r requirements.txt
      - name: Run Linting
        run: flake8 .
      - name: Run Tests
        run: pytest

CD пайплайн с использованием Helm

После успешного завершения CI, мы переходим к CD. Helm-чарт описывает ресурсы Kubernetes, необходимые для развертывания приложения. GitHub Actions будет использоваться для сборки и развертывания Helm-чарта.

  1. Checkout: Клонирование репозитория с Helm-чартом.
  2. Linting: Проверка Helm-чарта на ошибки.
  3. Package Chart: Упаковка Helm-чарта.
  4. Deploy to Kubernetes: Развертывание чарта в Kubernetes кластер.

name: Helm Deploy

on:
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Helm Lint
        run: helm lint .
      - name: Helm Package
        run: helm package .
      - name: Deploy to Kubernetes
        run: | 
          helm upgrade --install my-release ./ 
          --namespace my-namespace 
          --set image.repository=your-image-repository 
          --set image.tag=${GITHUB_SHA}

Соответствие законодательству РФ

При разработке и развертывании приложений необходимо учитывать требования российского законодательства, такие как 152-ФЗ «О персональных данных». Это включает в себя:

  • Локализация данных: Данные пользователей должны храниться на серверах, расположенных на территории РФ. Выбор провайдера Kubernetes, предлагающего инфраструктуру в РФ, является ключевым.
  • Согласие на обработку данных: Необходимо получать явное согласие пользователей на обработку их персональных данных.
  • Безопасность данных: Применение мер безопасности для защиты персональных данных от несанкционированного доступа.
  • Ведение журналов аудита: Необходимость ведения журналов аудита для отслеживания доступа к персональным данным.

В контексте CI/CD, это означает, что необходимо убедиться, что все этапы пайплайна соответствуют требованиям безопасности и конфиденциальности данных.

Заключение

Автоматизированный CI/CD пайплайн с использованием GitHub Actions и Helm-чартов позволяет значительно ускорить и упростить процесс разработки и развертывания приложений. Важно помнить о необходимости соблюдения законодательства РФ при разработке и эксплуатации приложений. РыбинскЛАБ предлагает полный спектр услуг по разработке, внедрению и поддержке CI/CD пайплайнов, а также консультации по вопросам соответствия законодательству. Мы поможем вам создать надежную и безопасную инфраструктуру для ваших проектов. Свяжитесь с нами для обсуждения ваших задач и получения индивидуального решения!

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

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

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

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

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