基础 - 自动检查代码

  • 作者:KK

  • 发表日期:2016.12.7


通常构建过程我都不会直接写什么shell代码,而是直接调用其它脚本,比如/bin/bash xxx.sh或者php xxx.php这样

实现自动检查代码,我也是把检查逻辑写到了PHP脚本里,附上大概的代码提供参考,主要是检查语法错误、代码规范

#是否检查代码错误,使用Jenkins的参数化构建来控制,因为有些第三方类库不一定是这个代码规范,检查到了又不好改它们
$isCheckStyle = !isset($argv[1]) ? true : ($argv[1] == 1 ? true : false);

#获取最新更新的PHP文件
exec('pwd', $pwd);
exec('find ' . getcwd() . ' -newer ' . $pwd[0] . '/../builds/lastSuccessfulBuild| grep -E "(\.php)$"', $newerFiles); //上次成功到本次的新增PHP文件
$hasError = false;
foreach($newerFiles as $file) {
	exec('php -l ' . $file, $syntaxResult, $code); //检查语法

	if($code){
		$hasError = true;
		$syntaxErrorCount++;
		echo implode(PHP_EOL, $syntaxResult);
		continue;
	}
	
	if(!$isCheckStyle){
		continue;
	}
	
	exec('/root/pear/bin/phpcs --standard=我扩展的代码规范名称 ' . $file, $styleResult, $code2);
	if($code2){
		$hasError = true;
		$codeStyleErrorCount++;
		array_pop($styleResult); //单纯只是为了整理输出排版
		array_pop($styleResult);
		
		echo implode(PHP_EOL, $styleResult);
	}
}

if($hasError){
	if($syntaxErrorCount){
		echo '一共检测到 ' . $syntaxErrorCount . ' 个语法错误' . PHP_EOL;
	}
	if($codeStyleErrorCount){
		echo '一共检测到 ' . $codeStyleErrorCount . ' 个文件存在代码风格问题' . PHP_EOL;
	}
	exit(1);
}

这个脚本放哪里

可就算是在构建的shell里写了php check-codes.php的话,那其实我们应该将check-codes.php这个脚本放在服务器的哪个目录呢?其实就是每次构建输出提示的Building in workspace ……这里的目录就是当前的进程工作目录了

就算是用程序获取当前工作目录办法也挺简单的,你在shell里前面加多一句pwd命令,这样就输出了当前的工作目录了嘛

只要知道了当前目录,放在这里,或是放在其它地方也可以自己把握了,把调用路径写对就是了

注意让jenkins这个用户能对脚本有可执行权限就行