• Sonarqube与Angular集成


    Sonarqube与Angular集成有两种方案:
    一种是使用ng test生成lcov.info文件后,通过SonarScanner CLI直接读取文件。
    一种是通过在angular项目中安装sonarqube的组件,将其集成在一起。
    下面会讲两种方法

    方法一:使用SonarScanner CLI

    启动SonarQube Service

    下载SonarQube
    解压.zip文件
    在bin目录下,有不同系统的启动项,包括Windows,Mac和Linux的
    对于Windows系统来说,需要执行StartSonar.bat文件

    注意

    sonarqube需要JDK环境,这里是它的支持情况
    我下载的是JDK 11
    接着访问http://localhost:9000/
    通过账号admin,密码admin进行登录,就可以进入系统
    在这里插入图片描述

    之后选择手动创建一个项目
    在这里插入图片描述

    (可选择)创建Tokens

    在右上角用户下拉框中选择My Account
    然后选择Security Tab页
    在这里可以管理Tokens
    在这里插入图片描述

    参考资料-Generating and Using Tokens
    SonarQube可以通过账号密码访问,也可以通过Tokens,所以可以根据需求来确定是否创建Tokens

    Angular项目

    执行命令ng test

    注意

    需要设置coverage=true
    可以加在命令行中

    ng test --codeCoverage=true
    
    • 1

    也可以加在angular.json文件中

    "test": {
        "codeCoverage": true,
        ......
    },
    
    • 1
    • 2
    • 3
    • 4

    在成功以后,会创建一个新文件夹coverage,在里面有一个文件lcov.info,这就是我们需要的内容

    通过SonarScanner CLI解析lcov.info文件

    下载SonarScanner
    解压.zip文件
    修改conf文件夹下的配置文件sonar-scanner.properties
    (1)sonar.projectBaseDir
    scanner的默认项目文件夹是当前文件夹的/src目录下,这里需要进行修改,所以要设置sonar.projectBaseDir
    sonar.projectBaseDir支持相对路径和绝对路径
    相对路径是从bin目录下进行计算
    路径需要注意,不能使用windows下的\,而必须使用/,相关资料
    (2)需要设置lcov.info的文件路径:sonar.typescript.lcov.reportPaths

    sonar.typescript.lcov.reportPaths=coverage/lcov.info
    
    • 1

    (3)设置host,也就是sonarqube service的地址,http://localhost:9000

    sonar.host.url=http://localhost:9000
    
    • 1

    (4)设置账号密码,当然也可以直接在命令行中使用tokens

    sonar.login=admin
    sonar.password=YourPassword
    
    • 1
    • 2

    (5)设置目标项目

    sonar.projectKey=YourProjectKey
    sonar.projectName=YourProjectName
    
    • 1
    • 2

    (6)其他相关设置可以参阅:Analysis Parameters
    最后会得到这样一个配置文件

    sonar.host.url=http://localhost:9000
    sonar.login=admin
    sonar.password=YourPassword
    sonar.projectKey=YourProjectKey
    sonar.projectName=YourProjectName
    sonar.projectVersion=1.0
    sonar.sourceEncoding=UTF-8
    sonar.sources=src
    sonar.exclusions=**/node_modules/**
    sonar.tests=src
    sonar.test.inclusions=**/*.spec.ts
    sonar.typescript.lcov.reportPaths=coverage/lcov.info
    sonar.projectBaseDir=../../src
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    接着进入bin目录下,执行命令

    sonar-scanner 
    
    • 1

    或者

    sonar-scanner -Dsonar.login=YourAuthenticationToken
    
    • 1

    这取决于你是使用token还是在sonar-scanner.properties文件中设置账号密码
    经过一段时间后,sonar-scanner已经完成工作,在http://localhost:9000 中已经生成了一次活动
    在这里插入图片描述

    参考资料

    SonarScanner CLI
    SonarScanner
    sonar-scanner-cli sonarscanner.md
    sonar-scanning-examples

    方法二:在angular项目中安装sonarqube的组件

    安装karma-sonarqube-reporter

    npm install -D karma-sonarqube-reporter
    
    • 1

    安装sonarqube-scanner

    npm install -D sonarqube-scanner
    
    • 1

    在Angular项目的根目录创建sonar-project.properties文件(类似sonar-scanner.properties文件的作用)

    sonar.host.url=http://localhost:9000
    sonar.login=admin
    sonar.password=admin
    sonar.projectKey=test-app
    sonar.projectName=test-app
    sonar.projectVersion=1.0
    sonar.sourceEncoding=UTF-8
    sonar.sources=src
    sonar.exclusions=**/node_modules/**
    sonar.tests=src
    sonar.test.inclusions=**/*.spec.ts
    sonar.typescript.lcov.reportPaths=coverage/lcov.info
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    编辑karma.conf文件
    (1)添加plugins

    require('karma-sonarqube-reporter'),、
    
    • 1

    (2)添加reporters

    reporters:[‘progress’, ‘kjhtml’, ‘sonarqube’]
    
    • 1

    执行命令

    npm run sonar-scanner
    
    • 1

    参考资料

    Setting up SonarQube with Angular
    Angular code coverage with Sonarqube

  • 相关阅读:
    Centos7虚拟机硬盘扩容 + 修改Docker默认存储位置
    C++中迭代器的使用
    线性表的插入、删除和查询操作
    vue项目路由使用history模式,nginx配置,刷新页面显示404
    一款优秀持久层框架Mybatis详解!
    Java:Springboot和React中枚举值(数据字典)的使用
    【大道模式】状态模式 - State Pattern(审核状态流转)
    基于51单片机智能手机锂电池充电器设计
    flowable,199boge,进阶,06完成
    【Java】已解决java.nio.channels.FileLockInterruptionException异常
  • 原文地址:https://blog.csdn.net/sinat_23050697/article/details/125560346