Налаштування автоматичного тестування в CI/CD для 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування автоматичного тестування в CI/CD для 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування автоматичного тестування в CI/CD для 1С-Бітрікс

Тести написані, але розробники запускають їх вручну — і забувають. Код потрапляє в продакшн без перевірки, тести застарівають, покриття деградує. Автоматичне тестування в CI/CD вирішує організаційну проблему: код не може потрапити в основну гілку без проходження тестів. Для Бітрікса це реалізується складніше, ніж для Symfony чи Laravel, через залежність від ядра та БД, але цілком розв'язне.

Архітектура pipeline'у

Мінімальний CI-pipeline для Бітрікс-проекту:

  1. Checkout — отримання коду з репозиторію
  2. Composer install — встановлення залежностей (PHPUnit, phpstan, php-cs-fixer)
  3. Lintphp -l для всіх PHP-файлів, перевірка синтаксису
  4. Static analysis — PHPStan / Psalm
  5. Unit tests — швидкі тести без ядра Бітрікса
  6. Integration tests — тести з підключенням ядра та БД
  7. Deploy (тільки для main-гілки)

Docker-образ для CI

Головна складність — ядро Бітрікса. Воно не встановлюється через Composer. Варіанти:

Варіант A: ядро в Docker-образі. Створіть базовий образ з встановленим Бітриксом, PHP та розширеннями. Оновлюйте образ при оновленні ядра на проекті. Це найнадійніший підхід.

FROM php:8.1-cli
RUN apt-get update && apt-get install -y libpq-dev libzip-dev \
    && docker-php-ext-install pdo pdo_mysql opcache zip
COPY bitrix/ /var/www/bitrix/
COPY composer.json composer.lock /var/www/
WORKDIR /var/www
RUN composer install --no-dev

Варіант B: ядро через артефакт. CI завантажує ядро з приватного сховища (S3, GitLab Package Registry) на етапі підготовки. Більш гнучко, але повільніше.

Налаштування GitLab CI

stages:
  - lint
  - test
  - deploy

variables:
  MYSQL_DATABASE: bitrix_test
  MYSQL_ROOT_PASSWORD: test

lint:
  stage: lint
  image: php:8.1-cli
  script:
    - find local/ -name "*.php" -exec php -l {} \;
    - vendor/bin/phpstan analyse local/php_interface/classes/ --level 5

integration-tests:
  stage: test
  image: registry.example.com/bitrix-ci:latest
  services:
    - mysql:8.0
  script:
    - cp .env.ci .env
    - php local/tests/setup_db.php
    - vendor/bin/phpunit --configuration local/tests/phpunit.xml
  artifacts:
    when: always
    reports:
      junit: local/tests/report.xml

Ключові моменти:

  • services: mysql — піднімає контейнер MySQL, доступний за хостом mysql всередині CI
  • setup_db.php — скрипт, що створює схему тестової БД (мінімальний набір таблиць Бітрікса)
  • artifacts: junit — GitLab/GitHub відображає результати тестів в інтерфейсі merge request

Для GitHub Actions

name: Tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_DATABASE: bitrix_test
          MYSQL_ROOT_PASSWORD: test
        ports:
          - 3306:3306
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
          extensions: pdo_mysql, mbstring, zip, gd
      - run: composer install
      - run: vendor/bin/phpunit --configuration local/tests/phpunit.xml

Схема тестової БД

Повна БД Бітрікса містить 500+ таблиць. Для інтеграційних тестів потрібен мінімальний набір:

  • b_option, b_module, b_module_to_module — конфігурація модулів
  • b_iblock, b_iblock_type, b_iblock_element, b_iblock_section, b_iblock_property, b_iblock_element_property — інфоблоки
  • b_catalog_price, b_catalog_currency — каталог та валюти
  • b_sale_order, b_sale_basket, b_sale_order_props_value — замовлення (якщо тестуєте e-commerce)

Створіть дамп схеми з продакшену: mysqldump --no-data bitrix > schema.sql. Додайте в репозиторій та оновлюйте при змінах структури.

Що перевіряти в CI обов'язково

PHP Lint. Тривіально, але ловить синтаксичні помилки у файлах, які не вивикликаються при ручному тестуванні. Бітрікс-проекти часто містять файли, підключувані умовно (по агенту, по cron) — помилку в них виявляють вже на продакшені.

PHPStan level 5+. На рівні 5 PHPStan знаходить звернення до неіснуючих методів, некоректні типи аргументів, невизначені змінні. Для Бітрікс-коду потребуватиме файл phpstan-baseline.neon з ігноруванням помилок ядра — ядро не типізовано та генерує сотні попереджень.

Smoke-тести HTTP. Якщо CI піднімає повне оточення (PHP-FPM + Nginx + MySQL), додайте curl-перевірки критичних URL:

curl -f http://localhost/
curl -f http://localhost/catalog/
curl -f http://localhost/personal/cart/

Статус 200 — тест пройдений. Будь-який інший — fail pipeline'у.

Час виконання

Етап Час
Lint + static analysis 30-60 секунд
Unit-тесты (без ядра) 10-30 секунд
Integration-тесты (з ядром та БД) 2-10 хвилин
Повний pipeline 5-15 хвилин

Якщо інтеграційні тести займають більше 15 хвилин — розділяйте їх на паралельні job'и по модулях. GitLab CI та GitHub Actions підтримують паралельні matrix-стратегії.

Налаштування CI/CD для Бітрікс-проекту — це інвестиція в один робочий день, що окупиться при першому ж попередженому баги на продакшені.