Как линть или статический анализ только для измененных файлов в ветке?
Я использую Jenkins и выполняю проверки PHPMD, PHPCS и PHP для запросов извлечения. То, что у нас есть, это в основном отдельная ветка для каждой функции, и она должна снова слиться с основной веткой, если она пройдет проверки и тесты.
Мы проверяем все php -файлы в проекте с помощью этой команды:
echo "php syntax checks are started"
find ./ -type f -name \*.php -exec php -l '{}' \; | grep -v "No syntax errors detected" && echo "PHP Syntax error(s) detected" && exit 1;
Использование "php -l" для всех файлов php занимает около минуты.
Мне было интересно, если есть способ ускорить это и придумал решение. Пожалуйста, проверьте мой ответ ниже.
1 ответ
Учитывая, что только несколько php-файлов будут изменены, это займет всего несколько секунд.
echo "php syntax checks for only changed files"
( ( (git diff --name-only origin/master $GIT_COMMIT ) | grep .php$ ) | xargs -n1 echo php -l | bash ) | grep -v "No syntax errors detected" && echo "PHP Syntax error(s) detected" && exit 1;
Если вы используете плагин git с Jenkins, вы можете оставить $GIT_COMMIT, в противном случае измените его на номер коммита или имя ветки.
Это также может быть использовано для css и js lints. Смена "php -l" зависит от того, что вам нужно.