Поиск по сайту:

Как создать конвейер GitLab CI для статического анализа проектов PHP


Запуск статического анализа вашего кода экономит время, обнаруживая скрытые проблемы. PHPStan — это инструмент статического анализа для PHP, который помогает повысить качество вашей кодовой базы. Вот как запустить PHPStan в ваших пайплайнах GitLab CI.

Полезно регулярно запускать PHPStan, пока вы создаете новые функции. Однако использование его локально только заведет вас так далеко. Вы полагаетесь на то, что другие члены вашей команды будут такими же дисциплинированными, как и вы. Интеграция статического анализа в рабочий процесс CI/CD гарантирует, что код нельзя будет объединить, если это нарушит основную ветвь вашего проекта.

Получение настройки с помощью PHPStan

Сначала вам нужно добавить PHPStan в свой проект. У нас уже есть подробное руководство по установке и настройке PHPStan, поэтому здесь мы рассмотрим только основы.

Сначала используйте Composer для установки PHPStan:

composer require --dev phpstan/phpstan

Затем создайте базовый файл конфигурации phpstan.neon в своем проекте:

parameters:
  level: max
  paths:
    - src
    - tests
  tmpDir: .tmp

Временный каталог переопределяется для облегчения кэширования GitLab CI, настройка приведена ниже.

Теперь вы можете запустить PHPStan локально, чтобы проверить работу вашей конфигурации:

vendor/bin/phpstan analyse

На данном этапе не имеет значения, пройдены ли тесты.

Настройка GitLab для CI

Убедитесь, что вы отправили свой код в проект на сервере GitLab. Вам нужно убедиться, что функция Pipelines включена для вашего проекта — если вы видите «CI/CD» на левой боковой панели, все готово.

Чтобы включить систему CI вашего проекта, нажмите кнопку «Настройки» на боковой панели. Разверните раздел «Видимость, функции проекта, разрешения» и включите функцию «Конвейеры».

Если вы дисциплинированно используете запросы на слияние (MR) GitLab, теперь вы можете настроить GitLab так, чтобы предотвратить слияние MR, если они не имеют успешного конвейера. Разверните раздел настроек «Запросы на слияние» и установите флажок «Конвейеры должны быть выполнены успешно». Нажмите «Сохранить» для подтверждения. Это предотвратит случайное слияние MR, когда PHPStan не справляется с его изменениями.

Чтобы использовать GitLab CI, вам понадобится GitLab Runner, определенный на уровне экземпляра, группы или проекта. Бегуны отвечают за выполнение заданий CI, созданных системой GitLab.

Мы собираемся использовать образ PHPStan Docker для запуска PHPStan в нашем конвейере CI. Для этого требуется использование GitLab Runner с исполнителем Docker. Если вы используете самоуправляемый инстанс и вам нужно настроить новый Runner, следуйте инструкциям в нашей статье по настройке GitLab CI.

Создание конвейера непрерывной интеграции GitLab

GitLab CI настраивается с помощью файла .gitlab-ci.yml в корне вашего проекта. Конвейеры CI поддерживают несколько последовательных этапов. Задания на каждом этапе выполняются параллельно. Для наших целей запуска PHPStan нам нужен один этап, который выполняет одно задание.

stages:
  - phpstan

cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - .tmp/
    - vendor/

phpstan:
  stage: phpstan
  image: ghcr.io/phpstan/phpstan
  script:
    - analyse --no-progress --error-format gitlab > phpstan.json
  artifacts:
    when: always
    reports:
      codequality: phpstan.json

Этот файл GitLab CI содержит все, что нам нужно для запуска PHPStan в нашем конвейере. Мы определяем этап phpstan, содержащий задание, которое также называется phpstan. В задании используется официальный образ PHPStan Docker из реестра контейнеров GitHub.

Кэш GitLab CI настроен на кэширование каталогов .tmp и vendor. Это повысит производительность последующих запусков той же ветки. Кэш восстановится автоматически. Вернувшись в наш phpstan.neon, мы установили для tmpDir значение .tmp по этой причине — это означает, что теперь мы можем уверенно ссылаться на него в CI. конфигурация кэширования конвейера.

Мы также кэшируем vendor, чтобы избежать ненужной переустановки зависимостей Composer при каждом запуске. Обратите внимание, что вам не нужно запускать composer install вручную — официальный образ PHPStan Docker вызывает его автоматически.

Флаг --error-format передается команде PHPStan analyse. Это настраивает PHPStan для создания файла JSON в формате, принятом отчетом о качестве кода GitLab. Внизу в разделе artifacts этот файл загружается в GitLab после завершения задания.

Использование конвейера

Зафиксируйте свой .gitlab-ci.yml и отправьте его на свой сервер GitLab. Теперь система CI должна запуститься и создать ваш первый конвейер. Используйте ссылку «CI/CD» в левой панели навигации, чтобы просмотреть ход конвейера.

Если вы получаете зеленую галочку, тесты PHPStan пройдены! Ваша ветка в хорошем состоянии и готова к слиянию. Если появляется красный крестик, у вас есть еще работа. PHPStan и GitLab CI только что остановили вас от слияния потенциально неработающего кода.

Вы можете получить список ошибок, щелкнув значок загрузки справа от конвейера. Выберите артефакт качества кода PHPStan, чтобы получить отчет JSON об ошибках, обнаруженных PHPStan.

Использование с мерж-реквестами

Чтение JSON вручную не приносит большого удовольствия. Однако запросы на слияние GitLab автоматически раскрывают содержимое отчета. Поскольку отчет помечен как артефакт качества кода GitLab, GitLab знает, как представить информацию внутри.

Мерж-реквесты с неработающим конвейером должны отображать расширяемый раздел «Качество кода». Это указывает на количество обнаруженных ошибок. Разверните раздел, чтобы просмотреть полный список проблем, обнаруженных PHPStan.

Как только вы устраните проблемы, отправьте свои изменения в GitLab. Трубопровод снова заработает. Как только это будет завершено, вы увидите новый статус на экране конвейеров и в виджете качества кода вашего мерж-реквеста.

Заключение

PHPStan помогает вам писать более качественный PHP, менее подверженный скрытым проблемам. Чтобы получить максимальную отдачу от него, инструмент должен быть включен в рабочий процесс разработки таким образом, чтобы его нельзя было игнорировать или обойти.

Использование PHPStan с GitLab CI обеспечивает согласованность, необходимую для уверенности в коде. Настройка GitLab для блокировки MR при неудачном конвейере означает, что изменения не могут войти в вашу основную ветку без прохождения PHPStan. Полная поддержка PHPStan отчетов о качестве кода GitLab позволяет легко оценивать ошибки, не выходя из веб-интерфейса, помогая быстро устранять любые обнаруженные проблемы.




Все права защищены. © Linux-Console.net • 2019-2024