从 gitlab docker runner 启动 Sonar Scanner
Launching Sonar Scanner from a gitlab docker runner
我有一个 CI 工作流,它集成了 linting 作业和代码质量作业。我的 Linting 工作是 docker 运行ner 从应用程序代码启动我的 eslint 脚本。然后我的代码质量工作应该启动声纳扫描仪 docker 实例,检查我的代码并将报告发送回我的声纳实例。
问题主要在于我无法使用以下任一解决方案正确启动声纳扫描仪:
声纳扫描仪Docker
https://github.com/newtmitch/docker-sonar-scanner
在这一点上,运行ner 运行s 图像但是当启动它的脚本时(只有 sonar-scanner (with potential arguments)
我得到这个错误响应:
sonar scanner unrecognized option -c
我不明白也无法控制,因为它是从 docker 集线器
中提取的已经制作好的 docker 图片
在 docker 容器中从头开始安装 Sonar Scanner
在这里,我所做的是通过将其下载到容器中来安装声纳扫描仪,如下所示:
Docker文件
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 以便能够下载文件,然后我从 link 在他们的官方 cial documentation 上找到了最新版本的声纳扫描仪。然后我解压缩它,然后为二进制文件创建一个 symlink,这样我就可以从任何地方执行脚本。我终于清除了 wget 缓存复制我的 shell 脚本,该脚本将从 gitlab-ci.yml 和 运行 chmod 命令执行以绕过任何权限问题。
声纳扫描仪-run.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 Problem" 的地方,我的 symlink 没有创建,因为我在我的 gitlab ci 日志中得到这个错误代码:
Unkown command sonar-scanner
编辑
symlink 现在可以工作了(问题是解压缩后的文件夹名称不正确),但会弹出另一条消息。声纳扫描仪现在可以正常工作了,这里是错误:
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
我的项目是本机反应,因此 javascript 项目。我不明白为什么它需要 java compiled 类
这是我的 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"]
经过进一步调查,我可以说我为声纳扫描仪制作了一个工作 docker 图像,可以与 gitlab ci。
DOCKERFILE
FROM openjdk:8
LABEL maintainer="Aria Groult <aria.groult@outlook.fr>"
RUN apt-get update
RUN apt-get install -y curl git tmux htop maven sudo
# Install Node - allows for scanning of Typescript
RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
RUN sudo apt-get install -y nodejs build-essential
WORKDIR /usr/src
RUN curl --insecure -o ./sonarscanner.zip -L https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip && \
unzip sonarscanner.zip && \
rm sonarscanner.zip && \
mv sonar-scanner-3.0.3.778-linux /usr/lib/sonar-scanner && \
ln -s /usr/lib/sonar-scanner/bin/sonar-scanner /usr/local/bin/sonar-scanner
ENV SONAR_RUNNER_HOME=/usr/lib/sonar-scanner
COPY sonar-scanner-run.sh /usr/bin
RUN ["chmod", "+x", "/usr/bin/sonar-scanner-run.sh"]
sonar-scanner 中的嵌入式 JRE 可能会出现问题。如果发生这种情况,请通过设置修改二进制文件:useembeddedjava 为 false.
gitlab-ci.yml & sonar-scanner-run.sh不变
sonar-project.properties
sonar.projectKey=projectkey
sonar.projectName=projectname
sonar.sourceEncoding=UTF-8
sonar.exclusions=node_modules/**,coverage/**
sonar.sources=./components
sonar.gitlab.project_id=linkToGit
sonar.host.url=hosturl
sonar.login=sonarqubeloginkey
sonar.exclusions=test/**, node_modules/**
请务必注意 cify node_modules 被排除在 nodejs 项目中,因为它们包含一些 java 文件,这些文件会在sonar-scanner 进程。通常只在 sonar-scanner 文件列表中包含 un-generated 个文件
我有一个 CI 工作流,它集成了 linting 作业和代码质量作业。我的 Linting 工作是 docker 运行ner 从应用程序代码启动我的 eslint 脚本。然后我的代码质量工作应该启动声纳扫描仪 docker 实例,检查我的代码并将报告发送回我的声纳实例。
问题主要在于我无法使用以下任一解决方案正确启动声纳扫描仪:
声纳扫描仪Docker
https://github.com/newtmitch/docker-sonar-scanner
在这一点上,运行ner 运行s 图像但是当启动它的脚本时(只有 sonar-scanner (with potential arguments)
我得到这个错误响应:
sonar scanner unrecognized option -c
我不明白也无法控制,因为它是从 docker 集线器
中提取的已经制作好的 docker 图片在 docker 容器中从头开始安装 Sonar Scanner
在这里,我所做的是通过将其下载到容器中来安装声纳扫描仪,如下所示:
Docker文件
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 以便能够下载文件,然后我从 link 在他们的官方 cial documentation 上找到了最新版本的声纳扫描仪。然后我解压缩它,然后为二进制文件创建一个 symlink,这样我就可以从任何地方执行脚本。我终于清除了 wget 缓存复制我的 shell 脚本,该脚本将从 gitlab-ci.yml 和 运行 chmod 命令执行以绕过任何权限问题。
声纳扫描仪-run.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 Problem" 的地方,我的 symlink 没有创建,因为我在我的 gitlab ci 日志中得到这个错误代码:
Unkown command sonar-scanner
编辑 symlink 现在可以工作了(问题是解压缩后的文件夹名称不正确),但会弹出另一条消息。声纳扫描仪现在可以正常工作了,这里是错误:
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
我的项目是本机反应,因此 javascript 项目。我不明白为什么它需要 java compiled 类
这是我的 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"]
经过进一步调查,我可以说我为声纳扫描仪制作了一个工作 docker 图像,可以与 gitlab ci。
DOCKERFILE
FROM openjdk:8
LABEL maintainer="Aria Groult <aria.groult@outlook.fr>"
RUN apt-get update
RUN apt-get install -y curl git tmux htop maven sudo
# Install Node - allows for scanning of Typescript
RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
RUN sudo apt-get install -y nodejs build-essential
WORKDIR /usr/src
RUN curl --insecure -o ./sonarscanner.zip -L https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip && \
unzip sonarscanner.zip && \
rm sonarscanner.zip && \
mv sonar-scanner-3.0.3.778-linux /usr/lib/sonar-scanner && \
ln -s /usr/lib/sonar-scanner/bin/sonar-scanner /usr/local/bin/sonar-scanner
ENV SONAR_RUNNER_HOME=/usr/lib/sonar-scanner
COPY sonar-scanner-run.sh /usr/bin
RUN ["chmod", "+x", "/usr/bin/sonar-scanner-run.sh"]
sonar-scanner 中的嵌入式 JRE 可能会出现问题。如果发生这种情况,请通过设置修改二进制文件:useembeddedjava 为 false.
gitlab-ci.yml & sonar-scanner-run.sh不变
sonar-project.properties
sonar.projectKey=projectkey
sonar.projectName=projectname
sonar.sourceEncoding=UTF-8
sonar.exclusions=node_modules/**,coverage/**
sonar.sources=./components
sonar.gitlab.project_id=linkToGit
sonar.host.url=hosturl
sonar.login=sonarqubeloginkey
sonar.exclusions=test/**, node_modules/**
请务必注意 cify node_modules 被排除在 nodejs 项目中,因为它们包含一些 java 文件,这些文件会在sonar-scanner 进程。通常只在 sonar-scanner 文件列表中包含 un-generated 个文件