php - 如何仅对分支中已更改的文件进行 lint 或静态分析?

标签 php git jenkins lint phplint

我正在使用 Jenkins 并为 merge 请求执行 PHPMD、PHPCS 和 PHP lint 检查。我们所拥有的基本上是每个功能的单独分支,如果它通过检查和测试,它应该再次 merge 到 master 分支。

我们正在使用此命令检查项目中的所有 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 文件使用“php -l”大约需要几分钟。

我想知道是否有办法加快速度并提出解决方案。请检查下面我的回答。

最佳答案

考虑到只有少数 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;

如果你在 Jenkins 中使用 git 插件,你可以保留 $GIT_COMMIT 否则用提交号或分支名称更改它。

这也可以用于 css 和 js lints。根据您的需要更改“php -l”部分。

关于php - 如何仅对分支中已更改的文件进行 lint 或静态分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44819412/

相关文章:

php - 优化MySQL数百条记录合并为一百组

php - 我的php代码出现意外的T_DOUBLE_ARROW错误

git - 在我的 repo 协议(protocol)中,最长的哈希前缀必须有多长才能防止重叠?

java - Jenkins 插件无法访问节点上的文件

php - 将多个表格插入同一个表格 - 只插入最后一个表格

php - 上传后无法删除文件。 (移动上传文件)

git - CC.net 和 GitHub 私有(private)存储库

git - 如何编写外部 git diff 来比较添加的行和删除的行(并 stash 匹配项)?

jenkins - 在手动触发的 Jenkins 作业中从 "upstream"构建获取 Git 提交

本地应用程序和 Jenkins 部署之间的 Java 日期时间不一致