我有一个 CI 工作流程,集成了 linting 作业和代码质量作业。我的 Linting 工作是一个 docker runner,从应用程序代码启动我的 eslint 脚本。然后我的代码质量工作应该启动声纳扫描仪泊坞窗实例,检查我的代码并将报告发送回我的声纳库实例。
问题主要在于我无法使用以下任一解决方案正确启动声纳扫描仪:
声纳扫描仪码头
https://github.com/newtmitch/docker-sonar-scanner https://github.com/newtmitch/docker-sonar-scanner
此时,运行程序运行图像,但在启动其脚本时(仅sonar-scanner (with potential arguments)
我收到此错误响应:
sonar scanner unrecognized option -c
我不理解并且无法控制,因为它是从 docker hub 中提取的已经制作的 docker 镜像
在 Docker 容器中从头开始安装声纳扫描仪
我所做的是将声纳扫描仪下载到容器中来安装声纳扫描仪,如下所示:
Dockerfile
FROM java:alpine
ENV SONAR_SCANNER_VERSION 3.3.0.1492
RUN apk add --no-cache wget && \
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${SONAR_SCANNER_VERSION}-linux.zip && \
unzip sonar-scanner-cli-${SONAR_SCANNER_VERSION}-linux && \
cd /usr/bin && ln -s /sonar-scanner-cli-${SONAR_SCANNER_VERSION}-linux/bin/sonar-scanner sonar-scanner && \
apk del wget
COPY sonar-scanner-run.sh /usr/bin
RUN ["chmod", "+x", "/usr/bin/sonar-scanner-run.sh"]
这里我添加了 wget 以便能够下载文件,然后我从官方的链接下载最新版本的 sonar-scanner文档 https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner。然后我将其解压缩,然后创建二进制文件的符号链接,以便我可以从任何地方执行该脚本。我最终清除了 wget 缓存,复制了将从 gitlab-ci.yml 执行的 shell 脚本,并运行 chmod 命令来绕过任何权限问题。
声纳扫描仪运行.sh
URL="https://mysonarqubeserver"
USER="myusertoken"
SONAR_PROJECT_KEY="myprojectkey"
COMMAND="sonar-scanner -Dsonar.host.url=\"$URL\" -Dsonar.login=\"$USER\" -Dsonar.projectKey=\"$SONAR_PROJECT_KEY\""
eval $COMMAND
环境变量都是你创建项目后由sonarqube给定的。
这里我有一个我认为是“Linux 问题”的问题,因为我在 gitlab ci 日志中收到此错误代码,所以没有创建我的符号链接:
Unkown command sonar-scanner
EDIT符号链接现在可以工作(问题是解压的文件夹名称不正确),但会弹出另一条消息。声纳扫描仪现在实际上可以工作,但出现错误:
INFO: ------------- Run sensors on module mytherapy
INFO: Load metrics repository
INFO: Load metrics repository (done) | time=121ms
INFO: Sensor JavaSquidSensor [java]
INFO: Configured Java source version (sonar.java.source): none
INFO: JavaClasspath initialization
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 14.285s
ERROR: Error during SonarQube Scanner execution
INFO: Final Memory: 25M/284M
INFO: ------------------------------------------------------------------------
ERROR: Please provide compiled classes of your project with sonar.java.binaries property
我的项目是一个react-native,因此是javascript项目。我不明白为什么它需要java编译类
这是我的 gitlab-ci.yml 文件,以防问题可能出在此处:
gitlab.ci.yml
cache:
paths:
- node_modules/
stages:
- analysis
- test
lint:
stage: analysis
image: "node:latest"
script: npm i && npm run lint
tags: ["nodejs"]
code quality:
stage: analysis
image: <My image from the registry>
script:
- /usr/bin/sonar-scanner-run.sh
pass tests:
stage: test
image: "node:latest"
script: npm i && npm run test
tags: ["nodejs"]