SonarQube中提供SonarTS插件对前端的typescript代码进行质量扫描。这篇文章以SonarQube LTS 6.7为例整理进行一下typescript代码检查常见的问题与对应方法。

SonarQube Server端设定

  • SonarQube版本
    本文使用SonarQube LTS 6.7.1版本。

安装并升级SonarTS插件和SonarJS插件,本文示例所更新的插件版本如下所示:

  • SonarTS插件
  • SonarJS插件

设定方法
管理员账户登陆之后,在Administration页面的marketplace选项即可进行更新等操作

客户端

Sonar-Scanner设定方法

使用的Sonar-Scanner的版本为4.2,此版本中自带JRE。但是在Alpine的镜像中可能不好用,如果需要使用JAVA_HOME中指定的JRE或者JDK,vi手动修改sonar-scanner中的
use_embedded_jre=true改为use_embedded_jre=false即可。

/data/jenkins/workspace/angular-pipeline-job/demo # /usr/local/share/sonar/bin/sonar-scanner --version
INFO: Scanner configuration file: /usr/local/share/sonar/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 4.2.0.1873
INFO: Java 1.8.0_212 IcedTea (64-bit)
INFO: Linux 4.9.87-linuxkit-aufs amd64
/data/jenkins/workspace/angular-pipeline-job/demo #

typescript前端示例工程

使用Angular创建一个demo应用,使用如下命令即可

执行命令:ng new demo --style less

在Jenkinsfile中创建前端应用的示例可参看:示例

Sonar-Scanner使用示例

使用user/password方式

示例如下所示

/usr/local/share/sonar/bin/sonar-scanner \-Dsonar.projectKey=angular \-Dsonar.sources=src \-Dsonar.host.url=http://192.168.31.242:9000 \-Dsonar.login=admin \-Dsonar.password=admin

使用token方式

示例如下所示

/usr/local/share/sonar/bin/sonar-scanner \-Dsonar.projectKey=angular \-Dsonar.sources=src \-Dsonar.host.url=http://192.168.31.242:9000 \-Dsonar.login=8b138774fb2d29e2e7bcdca249c7e09a2013740c

常见问题

profile被删空或者缺少相应插件

profile如果连sonar way都被删除的情况下,或者缺少检查对象文件相应的插件的安装(比如检查typescript文件没有安装SonarTS插件的情况下),可能会提示如下的错误信息。

ERROR: Error during SonarQube Scanner execution
ERROR: No quality profiles have been found, you probably don't have any language plugin installed.
ERROR:

SonarQube服务器端无法连接

基于网络或者SonarQube服务未正常启动等原因导致sonar-scanner无法连接服务器侧,此时经常会报出类似如下的错误信息

ERROR: Error during SonarQube Scanner execution
org.sonarsource.scanner.api.internal.ScannerException: Unable to execute SonarQubeat org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.lambda$createLauncher$0(IsolatedLauncherFactory.java:85)at java.security.AccessController.doPrivileged(Native Method)
...省略

客户端未安装nodejs

客户端对typescript进行扫描时,一般情况下会调用本地的nodejs进行预解析,如果本地没有安装nodejs或者未正确设定执行时的搜索路径,一般会报出诸如如下的错误信息

ERROR: Error during SonarQube Scanner execution
java.lang.IllegalStateException: Failed to get Node.js version.No TypeScript files will be analyzed. You can exclude TypeScript files from analysis with 'sonar.exclusions' property.at org.sonar.plugin.typescript.ExternalTypescriptSensor.checkCompatibleNodeVersion(ExternalTypescriptSensor.java:163)at org.sonar.plugin.typescript.ExternalTypescriptSensor.analyze(ExternalTypescriptSensor.java:117)at org.sonar.plugin.typescript.ExternalTypescriptSensor.execute(ExternalTypescriptSensor.java:111)at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:88)at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:82)
...省略

当然你也可以像提示说的那样在sonar.exclusions中设定让所有的ts文件都不作为扫描对象,显然这不是我们希望的解决方法。如果一般的环境直接安装nodejs即可,但是目前情况下,Alpine环境较为麻烦,最简单的方式是使用Alpine自带的包进行解决

/data/jenkins/workspace/angular-pipeline-job/demo # apk add nodejs
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/4) Installing c-ares (1.15.0-r0)
(2/4) Installing http-parser (2.8.1-r0)
(3/4) Installing libuv (1.23.2-r0)
(4/4) Installing nodejs (10.14.2-r0)
Executing busybox-1.29.3-r10.trigger
OK: 373 MiB in 115 packages
/data/jenkins/workspace/angular-pipeline-job/demo # apk add npm
(1/1) Installing npm (10.14.2-r0)
Executing busybox-1.29.3-r10.trigger
OK: 397 MiB in 116 packages
/data/jenkins/workspace/angular-pipeline-job/demo #

执行示例

以下以Angular的demo应用为例,使用sonar-scanner进行扫描,执行日志如下所示

/data/jenkins/workspace/angular-pipeline-job/demo # /usr/local/share/sonar/bin/sonar-scanner \
>   -Dsonar.projectKey=angular \
>   -Dsonar.sources=src \
>   -Dsonar.host.url=http://192.168.31.242:9000 \
>   -Dsonar.login=admin \
>   -Dsonar.password=admin
INFO: Scanner configuration file: /usr/local/share/sonar/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 4.2.0.1873
INFO: Java 1.8.0_212 IcedTea (64-bit)
INFO: Linux 4.9.87-linuxkit-aufs amd64
INFO: User cache: /root/.sonar/cache
INFO: SonarQube server 6.7.1
INFO: Default locale: "en_US", source code encoding: "UTF-8" (analysis is platform dependent)
INFO: Publish mode
INFO: Load global settings
INFO: Load global settings (done) | time=239ms
INFO: Server id: AW3nsip1zhnfoGaybxGb
INFO: User cache: /root/.sonar/cache
INFO: Load plugins index
INFO: Load plugins index (done) | time=140ms
INFO: Process project properties
INFO: Load project repositories
INFO: Load project repositories (done) | time=43ms
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=227ms
INFO: Load active rules
INFO: Load active rules (done) | time=837ms
INFO: Load metrics repository
INFO: Load metrics repository (done) | time=73ms
WARN: SCM provider autodetection failed. No SCM provider claims to support this project. Please use sonar.scm.provider to define SCM of your project.
INFO: Project key: angular
INFO: -------------  Scan angular
INFO: Load server rules
INFO: Load server rules (done) | time=96ms
INFO: Base dir: /data/jenkins/workspace/angular-pipeline-job/demo
INFO: Working dir: /data/jenkins/workspace/angular-pipeline-job/demo/.scannerwork
INFO: Source paths: src
INFO: Source encoding: UTF-8, default locale: en_US
INFO: Index files
INFO: 13 files indexed
INFO: Quality profile for ts: Sonar way
INFO: Sensor SonarTS [typescript]
INFO: Analyzing 8 typescript file(s) with the following configuration file /data/jenkins/workspace/angular-pipeline-job/demo/tsconfig.json
INFO: 8 files analyzed out of 8
INFO: Sensor SonarTS [typescript] (done) | time=16336ms
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=45ms
INFO: Sensor CPD Block Indexer
INFO: Sensor CPD Block Indexer (done) | time=2ms
INFO: No SCM system was detected. You can use the 'sonar.scm.provider' property to explicitly specify it.
INFO: 5 files had no CPD blocks
INFO: Calculating CPD for 3 files
INFO: CPD calculation finished
INFO: Analysis report generated in 387ms, dir size=15 KB
INFO: Analysis reports compressed in 1878ms, zip size=14 KB
INFO: Analysis report uploaded in 772ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://192.168.31.242:9000/dashboard/index/angular
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://192.168.31.242:9000/api/ce/task?id=AW3uIXRZ5xxGRMjITaYs
INFO: Task total time: 26.987 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 30.227s
INFO: Final Memory: 8M/70M
INFO: ------------------------------------------------------------------------
/data/jenkins/workspace/angular-pipeline-job/demo #

执行结果如下所示


追记

后续发现,使用Sonar-Scanner 4.2 + SonarQuebe 6.7.1非常容易造成SonarQube服务的异常终止。所以SonarQube 6.7.1 仍建议使用Sonar-Scanner 3.2与之配合使用。详细可参看:

  • https://liumiaocn.blog.csdn.net/article/details/102772836

使用SonarTS创建进行typescript代码质量扫描相关推荐

  1. DevOps之持续集成SonarQube代码质量扫描

          SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查工具结果直接显示在 Web ...

  2. Docker、Jenkins 结合 SonarQube 和 Sonar scanner 进行代码质量扫描

    SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误.目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groov ...

  3. SonarQube代码质量扫描持续集成

    1.安装JDK和配置JAVA_HOME和CLASSPATH 2.安装mysql数据库 3.创建数据库和用户 mysql -u root -p mysql> CREATE DATABASE son ...

  4. 【代码质量】静态代码检测pc-lint, visual lint, cpp-check(pclint、cppcheck、TscanCode)

    目录 引言 主流静态代码扫描工具概况 费用和活跃度 准确性对比 C/C++静态检测/静态分析|TscanCode|cppcheck TscanCode Windows下的安装与使用 Linux下的安装 ...

  5. 代码扫描 | 把控代码质量的利器

    本文作者:潘金赤 -- CODING 产品总监 腾讯云研发平台负责人,十年研发能效建设经验 CODING 代码扫描产品负责人 有位小伙子在办公大楼门口抽烟,一位路人经过他的身边对他说:"你知 ...

  6. 提升代码质量,使用插件对 java 代码进行扫描检查分析

    目录 前言 一.使用maven-checkstyle-plugin插件 1. maven-checkstyle-plugin 介绍 2.引入依赖 3.使用 二.使用 idea 插件 1.安装 2.使用 ...

  7. 代码静态扫描工具sonar介绍

    一.SonarQube整体介绍 SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java.C.C++.JavaScripe等等 ...

  8. 追求代码质量: 监视圈复杂度

    http://www.ibm.com/developerworks/cn/java/j-cq03316/ 每位开发人员对代码质量的含义都有着自己的看法,并且大多数人对如何查找编写欠佳的代码也有自己的想 ...

  9. 使用JSLint提高JS代码质量

    随着富 Web 前端应用的出现,开发人员不得不重新审视并重视 JavaScript 语言的能力和使用,抛弃过去那种只靠"复制 / 粘贴"常用脚本完成简单前端任务的模式.JavaSc ...

最新文章

  1. C++/C++11中std::string用法汇总
  2. evolution configure
  3. Refresh your Java skills–面对Java学习过程中的一些迷茫
  4. C#反射——简单反射操作类的封装
  5. https的博客作业
  6. 李彦宏说互联网思维已过时,AI可以根本上变革交通、城市、农业和医疗
  7. scala解析csv文件写入mysql_scala实战之spark源码修改(能够将DataFrame按字段增量写入mysql数据表)...
  8. javascript 网页运行代码效果
  9. 卫星轨道的估计问题(Matlab)(一):理论基础
  10. C语言最全爱心代码大全
  11. 水系图一般在哪里找得到_腾远带你了解:虹吸排水系统原理、组成及应用优势...
  12. 关于工信部要求品牌电脑强制预装“绿坝-花季护航”软件
  13. PAT 乙级 集体照
  14. dnf超时空漩涡副本路线流程图_DNF超时空漩涡怎么打
  15. 【Books系列】之第四本书:大冰之《你坏》读书笔记
  16. 小学五年级如何引导学计算机,怎么教五年级小孩数学
  17. mac电脑使用普通键盘截图,全选,拷贝(复制),移动文件的快捷键是什么?
  18. Codeforce 1335C - Two Teams Composing 统计技能种类数量+统计同一技能最大数量
  19. 深度学习_深度学习基础知识_Internal Covariate Shift
  20. 黑马训练营10届开学典礼

热门文章

  1. 码云图床php,PHP 脚本实现 Markdown 文章上传到七牛图床
  2. 树莓派Linux基础(四):修改文件权限与从属关系
  3. 安科瑞消防应急照明和疏散指示系统在城市隧道的应用分析
  4. ESP32学习笔记(一) 芯片型号介绍
  5. python与erp_Python-EEG处理和事件相关电位(ERP)
  6. 无人机仿真平台的搭建
  7. Eclipse汉化教程2021年最新
  8. python的运算符号使等式成立_你所不知道的 Python 冷知识!(二)(建议收藏)
  9. 2017年九月计算机试题,2017年九月份全国计算机一级考试试题
  10. 东营市鸿发广场6#楼消防应急照明和疏散指示系统的研究与应用-安科瑞耿敏花