当前位置: 首页 > 知识库问答 >
问题:

从gitlab docker运行程序启动声纳扫描仪

祁修诚
2023-03-14

我有一个CI工作流,它集成了一个linting作业和一个代码质量作业。我的Linting工作是docker runner从应用程序代码启动我的eslint脚本。然后,我的代码质量工作应该是启动一个sonar scanner docker实例,检查我的代码并将报告发送回sonarqube实例。

问题主要在于我无法使用以下两种解决方案正确启动声纳扫描仪:

Sonar Scanner Dockerhttps://github.com/newtmitch/docker-sonar-scanner
此时,运行程序运行图像,但当启动其脚本(仅sonar-scanner(带有潜在参数时,我收到以下错误响应:

sonar scanner unrecognized option -c

我不明白,也无法控制,因为它是从docker中心提取的已经制作好的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。然后解压缩它,然后创建一个二进制文件的符号链接,这样我就可以从任何地方执行脚本。最后,我清除wget缓存复制我的外壳脚本,该脚本将从gitlab-ci.yml执行,并运行chmod命令绕过任何权限问题。

声纳扫描仪运行。上海

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

编辑符号链接现在可以工作了(问题是未压缩的文件夹名称不正确),但另一条消息弹出。声纳扫描仪现在可以正常工作了,这里是错误:

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本机项目,因此是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"]

共有1个答案

顾骏祥
2023-03-14

经过进一步的调查,我可以说我为声纳扫描仪制作了一个可以与gitlab ci配合使用的工作docker图像。

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"]

您可能会遇到声纳扫描仪中嵌入式JRE的问题。如果发生这种情况,请通过将:useemenddjava设置为false来修改二进制文件。

gitlab-ci.yml

声纳项目。属性

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/**

必须指定nodejs项目中不包括NodeU模块,因为它们包括一些java文件,这些文件将在声纳扫描仪过程中产生一些缺陷。通常,在声纳扫描仪文件列表中仅包括未生成的文件

 类似资料:
  • 声纳扫描仪在运行扫描仪时抛出空指针异常。错误指向一个枚举。它实现了一个典型的接口。 我记得几个月前运行扫描仪时没有出现任何问题,但这次不同了,感谢您的帮助。 添加了一些乱码,我可以保证没有编译问题。 包括声纳项目属性。#所需元数据sonar.project密钥=com.companysonar.project名称=项目sonar.project版本=1.0

  • 我尝试使用Jenkins上的java项目运行声纳分析,使用标准的maven sonar:sonar goal,并使用post STEP>>Execute SonarQube Scanner。我使用的maven目标是。 对于SonarQube扫描仪,我使用了下面的maven目标 SonarQube版本-7.7声纳扫描仪版本-3.3.0 Jenkins版本-2.164.3 Maven版本-3.6.1

  • 我有java项目(非梯度),想要测试Sonarqube。所以,我安装了sonar-scanner for mac(https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/)我如何使用它扫描我的Java项目? 我的项目结构是:src->main-java->COM->MyCompany>PackageName1->[java文件]sr

  • 我正在运行以下版本的声纳扫描: 蚂蚁v3。0.5 声纳v4。5.4 声纳蚂蚁任务v2。三, 我的ant项目包含100个子模块;其中大约一半有外部库,一半没有 在我的ant构建文件中,设置了以下声纳属性: 上面提到的最初问题是,对于没有外部lib的模块,它会失败,因为编译后/build/dependency中没有jar。 根据这个存档链接:http://sonarqube-archive.15.x6

  • 您可以通过Burp 控制台(Burp Dashboard)上的新的扫描(New scan)按钮或是 Burp 中出现的菜单中的Scan选项来启动扫描。利用这些方法可打开扫描启动窗口,然后您可以使用它配置扫描中的各种详细参数。 扫描细节 扫描启动界面的详细的扫描信息(Scan details)部分允许您选择扫描类型,配置要扫描的内容等等信息。 扫描类型 您可以选择以下扫描类型: 抓取并审计(Craw