0

我可能遗漏了一些明显的东西,但我似乎无法获得 JavaScript 的扫描结果以显示在 SonarCloud 中。该存储库 95% 是一个带有 5% java 代码的 Angular 应用程序。Java 代码扫描出现在 SonarCloud,但实际上我只需要扫描 angular 应用程序中的 javascript。

很明显,我们已连接到 SonarCloud,但 javascript 没有出现任何内容。

我添加<sonar.language>js</sonar.language>到 pom.xml 文件中,效果是 SonarCloud 中根本没有出现任何扫描信息,大概是因为该属性取消扫描除 javascript 以外的任何语言,并且 javascript 扫描配置不正确。

我只想扫描角度项目并在 SonarCloud 中报告结果。通过扫描dist/portal构建 Angular 项目的目录,或者通过扫描src/app.

如果还扫描了java代码就可以了。

感谢您提供的任何帮助或指示。

  • 使用的 ALM:带有 Maven 的 Bitbucket
  • 仓库语言:java、javascript(只需要扫描javascript)
  • 观察到错误:SonarCloud 中没有出现 javascript 的扫描结果

存储库的目录结构是:

    - src
        - app
        - [rest of angular code]
    - e2e
        - [testing files]
    - deploy
        - pom.xml
        - [java code for the deploy]
    - bitbucket-pipelines.yml

这是 pipeline.yml,也是使用 maven 运行 sonarcloud 的步骤:

          caches:
            sonar: ~/.sonar/cache
          steps:  
            - step: &buildArtifacts
                name: Build and test
                image:
                  name: [[NAME]]
                  aws:
                    access-key: $AWS_ACCESS_KEY
                    secret-key: $AWS_SECRET_KEY
                caches:
                - maven
                - sonar
                script:
                - source prepare_environment.sh
                - mvn -e clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
                artifacts:
                - artifact/**

这是目录pom.xml中的属性deploy/

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <sonar.language>js</sonar.language>
        <sonar.sources>${project.basedir}/../dist/portal</sonar.sources>
    </properties>
4

1 回答 1

0

扫描 JS/TS 的最佳选择是自定义管道。

如果你不关心 Java 代码,只需要扫描 Javascript 和 Typescript,那么使用CLI 的扫描器可能是最好的选择,更具体地说,使用扫描管道最容易在 Bitbucket Cloud 上配置。您根本不需要使用 Maven。

在您的bitbucket-pipelinesYAML 文件中,删除(或注释掉)org.sonarsource.scanner&buildArtifacts步骤中的引用:

mvn -e clean verify # org.sonarsource.scanner.maven:sonar-maven-plugin:sonar

然后创建一个新步骤来运行管道:

    - step: &buildAndTestSonarCloud
        name: Analyze with SonarCloud
        caches:
          - node
          - sonar
        script:
          - npm update && npm install  
          - pipe: sonarsource/sonarcloud-scan:0.1.5
            variables:
              SONAR_TOKEN: ${SONAR_TOKEN}
              EXTRA_ARGS: '-Dsonar.sources=src/app'
              SONAR_SCANNER_OPTS: -Xmx512m
              DEBUG: "false"

您可能还需要扩展可用于该步骤的内存,如下所示:

definitions:
  services:
    docker: 
      memory: 2048

最后,调用你的步骤:

pipelines:
  default:
    - step: *buildAndTestSonarCloud
    - step: *buildArtifacts

那应该行得通。您应该在 JS/TS 上启动并运行。

如果您还想运行单元测试让 sonarcloud 跟踪您的测试覆盖率,请将其添加到您的npm update行下方:

- npm run test -- --code-coverage --no-watch --no-progress --browsers=ChromeHeadlessNoSandbox

这些EXTRA_ARGS为您的文件结构配置:

'-Dsonar.tests=src -Dsonar.test.inclusions="**/testing/**,**/*.spec.ts" -Dsonar.typescript.lcov.reportPaths=coverage/lcov.info'

这对我有用,应该处理完整的配置。

注意:这不会查看存储库中的 Java 代码。如果您确实需要同时扫描 Java 代码,那么您将需要更复杂的 Maven 实现。

于 2020-06-01T18:23:43.023 回答