当前位置: 首页 > 科技观察

搭建Sonarqube代码质量扫描环境

时间:2023-03-21 18:53:52 科技观察

最近在给公司做代码质量管理。因为之前发生过网络事故,所以之前没有人关注。代码风格五花八门,尤其是前端代码,因为最新的TypeScript是支持类型注解的,但是很多前端程序员长期使用JS,一下子适应不了。他们在写代码的时候不做类型检查和异常判断,把所有的bug都扔给浏览器,导致项目可靠性差,安全性低,可维护性差。所以趁此机会规范一下祖典。搭建sonarqube云扫描环境。新版本sonarqube不再支持MySQL数据库。它需要使用postgresql数据库。我们主要使用bitnami维护的图像。这些镜像更新及时,维护时间长,特别是sonarqube和Jenkins。接下来,我们将使用docker镜像来Followpostgresql和sonarqube。安装postgresql数据库dockerrun-d--namepostgresql--restart=always-p5432:5432-eALLOW_EMPTY_PASSWORD=yes-ePOSTGRESQL_USERNAME=bn_sonarqube-ePOSTGRESQL_DATABASE=bitnami_sonarqubebitnami/postgresql:13installsonarqubedockersonarrun-d--name-p9000:9000-eALLOW_EMPTY_PASSWORD=yes-eSONARQUBE_DATABASE_HOST=192.168.10.213-eSONARQUBE_DATABASE_PORT_NUMBER=5432-eSONARQUBE_DATABASE_USER=bn_sonarqube-eSONARQUBE_DATABASE_NAME=bitnami_sonarqubebitnami/sonarqube:9如果sonarqube启动失败,报错信息中包含max_map_count,可以通过调整修改系统文件个数:vi/etc/sysctl.conf#在文件末尾添加如下内容vm.max_map_count=262144配置项目scansonarqubebuiltwithbitnami默认账号密码:admin/bitnami,访问localhost:9000,登录后创建新建项目,填写项目名称,创建token。建议令牌名称与项目名称相同。生成的tokenID必须复制,不会出现第二次。如果不写下来,需要重新生成。记得选择scan语言和执行扫描的机器,然后记下生成的扫描命令。扫描完成后,该页面将自动成为结果页面。下载并配置声纳扫描仪。在上面的截图中,会有一个sonar-scanner扫描仪访问地址。打开后,根据需要下载对应系统的文件。本来scanner也有docker镜像,但是sonar-scanner很简单,基本不需要依赖。下载后即可使用,所以我们不需要使用docker镜像。我这里使用的是linux系统下的版本。执行以下命令配置sonar-scanner的扫描环境:tar-xvfsonar-scanner-4.6.2.2472-linux.tarmvsonar-scanner-4.6.2.2472-linux/usr/localln-s/usr/local/sonar-scanner-4.6.2.2472-linux/bin/sonar-scanner/usr/bin/sonar-scanner扫描仓库代码配置好扫描器后,我们就可以使用sonar-scanner扫描我们指定的库代码了。下载代码并使用git命令复制代码下载到与sonar-scanner同一台机器上cd/home/codegitclonegit@gitee.com:small_bud_star/xxxxxx.git执行scan命令进入代码目录,执行项目创建时sonar-scanner提供给我们的扫描命令\-Dsonar.projectKey=databoard\-Dsonar.sources=。\-Dsonar.host.url=http://10.10.8.252:9000\-Dsonar.login=60f6c402242a93ba5982a1f9f4084937aba9fd5e执行结果如下:扫描命令中的参数说明:projectKey:我们创建时填写的项目名项目来源:扫描目录。一般我们进入项目目录进行扫描。如果我们在非根目录下执行scan命令,需要配合其他参数。host.url:sonarqube服务器地址login:创建项目时生成的token,也可以加一个参数password,通过用户名和密码进行扫描。在实际项目使用中,我们建议在项目根目录下创建一个sonar-project.properties文件来配置扫描参数。上述扫描命令配置如下:sonar.host.url=http://10.10.8.252:9000sonar.sources=.sonar.projectKey=databoardsonar.login=60f6c402242a93ba5982a1f9f4084937aba9fd5e然后进入项目根目录,输入sonar-scanner忽略规则配置就可以了。每一种开发语言都有很多扫描规则,所以误报的可能性也很大。Sonarqube为我们提供了忽略规则的配置打开项目规则配置:Ignore配置包括以下类型排除指定目录:sonar.exclusions排除public下的所有文件及其子目录下的文件包含指定目录:sonar.inclusions只扫描src目录下的文件,不需要检测重复代码文件:sonar.cpd.exclusions不会检查src/assets目录中的所有文件。包含指定规则的文件不参与扫描:sonar.issue.ignore.allfile文件中包含sonarqubedisable字符串的文件不参与扫描,所以我们可以排除一些特殊的文件,我们自己定义指定的代码块不参与扫描不参与扫描:sonar.issue.ignore.block包含@layer的行到包含@endlayer的行的所有代码都不扫描,对于一些误检测或者我们不想改变的代码,我们可以自定义两个标签包括它们,这样这些代码就不会参与扫描。指定文件中部分规则不勾选:sonar.issue.ignore.multicriteria项目目录下所有ts文件不执行squid:S1195扫描规则,只勾选指定文件中某些规则:sonar.issue.enforce.multicriteriaonly检查login/index.js文件中的javascript:S1195规则,不检查上面其他规则配置在sonarqube服务器上。我们推荐另一种方式,即在项目目录下的sonar-project.properties文件中进行配置。配置如下:sonar.host.url=http://10.10.8.252:9000sonar.sources=.sonar.projectKey=databoardsonar.login=60f6c402242a93ba5982a1f9f4084937aba9fd5esonar.exclusions=public/**/*sonar.issue.ignore。multicriteria=e1,e2sonar.issue.ignore.multicriteria.e1.ruleKey=Web:Chignsonar.issueAltA.multicriteria.e1.resourceKey=**/*sonar.issue.ignore.multicriteria.e2.ruleKey=Web:BoldAndItalicTagsChecksonar.issue.ignore.multicriteria.e2.resourceKey=**/*sonar.issue.ignore.block=e1,e2sonar.issue.ignore.block.e1.beginBlockRegexp=@layersonar.issue.ignore.block.e1.endBlockRegexp=@layersonar.issue.ignore.block.e2.beginBlockRegexp=:deepsonar.issue.ignore.block.e2.endBlockRegexp=:deepVSCode配置sonarlint扫描上面安装配置好的Sonarqube中以后我们也可以安装sonarlint插件来进行编程支持。本插件的作用是在开发代码的过程中实时显示当前编辑代码的异常情况。插件中配置sonarqubeserver的作用是使用sonarqubeserver中的规则进行代码校验,不是使用云端sonarqube进行代码校验安装jre运行环境下载JDKjava11之后没有单独的jre安装包,需要安装jdk,然后使用命令生成https://www.oracle.com/java/technologies/downloads/安装JDK生成jre目录进入JDK安装目录C:\ProgramFiles\Java\jdk-17.0.2,执行以下命令bin\jlink.exe--module-pathjmods--add-modulesjava.desktop--outputjre生成的jre目录在C:\ProgramFiles\Java\jdk-17.0.2\jre安装sonarlint并配置在应用商店搜索SonarLint安装完成后点击设置按钮进入扩展设置在settings.json中选择编辑和在文件底部配置以下信息:"sonarlint.connectedMode.connections.sonarqube":[{"serverUrl":"http://10.10.8.252:9000","token":"60f6c402242a93ba5982a1f9f4084937aba9fd5e"}],"sonarlint.connectedMode.project":{"projectKey":"databoard"},"sonarlint.ls.javaHome":"C:\\ProgramFiles\\Java\\jdk-17.0.2\\jre","sonarlint.ls.vmargs":"-Xmx1024m","sonarlint.pathToNodeExecutable":"E:\\Program\\nodejs\\node.exe"serverUrl:sonarqube的服务器地址token:上面使用的tokenprojectKey:项目名sonarlint.ls.javaHome:jre目录sonarlint.ls.vmargs:内存使用配置sonarlint.pathToNodeExecutable:Node可执行文件路径配置在我们的过程中开发过程,建议大家使用各种代码检查检查工具来管理代码质量,可以帮助我们避免很多低级或者不合理的异常,特别是对于经常出错的同学来说,这是养成良好的写代码习惯的好方法