我可能错过了一些明显的东西,但我似乎无法获得 javascript 出现在 SonarCloud 中的扫描结果。存储库 95% 是一个有 5% Java 代码的角度应用程序。java代码扫描出现在SonarCloud中,但实际上我只需要扫描角度应用程序中的javascript。
很明显,我们连接到SonarCloud,但javascript没有出现任何内容。
我在pom.xml文件中添加了<sonar.language>js</sonar.language>
,其效果是SonarCloud中根本没有显示扫描信息,可能是因为此属性取消了扫描除javascript以外的任何语言,并且javascript扫描配置不正确。
我只想扫描角度项目并在SonarCloud中报告结果。通过扫描构建角度项目的dist/portal
目录,或通过扫描src/app
中的底层 Typescript 文件。
如果同时扫描 java 代码也没问题。
感谢您提供的任何帮助或指示。
- 使用的ALM:Bitbucket with Maven
- 仓库语言: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/**
这是deploy/
目录中pom.xml
内的属性:
<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>
扫描 JS/TS 的最佳选择是自定义管道。
如果您不关心Java代码,只需要扫描Javascript和Typescript,那么使用CLI扫描程序可能是最好的选择,更具体地说,使用扫描管道最容易在Bitbucket Cloud上配置。你根本不需要使用Maven。
在bitbucket-pipelines
YAML 文件中,删除(或注释掉(&buildArtifacts
步骤中对org.sonarsource.scanner
的引用:
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实现。