用gitlab ci运行sonarqube扫描仪

kat*_*aik 5 mono docker sonarqube gitlab-ci

我正在尝试使用以下堆栈(仅相关的堆栈)为.NET应用程序组合CI环境:

  • Debian + mono
  • 搬运工人
  • Gitlab CI
  • Gitlab-multi-runner(作为docker容器)
  • Sonarqube + Postgre

我已经使用docker-compose为sonarqube和postgre创建容器,两者都在运行和工作.我很遗憾地执行了由gitlab运行程序执行的构建的sonarqube分析以及我发现使用Maven的所有示例.我也试过使用声纳扫描仪,到目前为止没有运气.

以下是我的gitlab-ci.yml的内容:

image: mono:latest

cache:
  paths:
  - ./src/T_GitLabCi/packages/

stages:
  - build

.shared: &restriction
  only:
    - master
  tags:
    - docker

build:
  <<: *restriction
  stage: build
  script:
    - nuget restore ./src/T_GitLabCi
    - MONO_IOMAP=case xbuild /t:Build /p:Configuration="Release" /p:Platform="Any CPU" ./src/T_GitLabCi/T_GitLabCi.sln
    - mono ./tools/NUnitConsoleRunner/nunit3-console.exe ./src/T_GitLabCi/T_GitLabCi.sln --work=./src/T_GitLabCi/test --config=Release
    - << EXECUTE SONAR ANALYSIS >>
Run Code Online (Sandbox Code Playgroud)

我在这里肯定遗漏了一些东西.有人能指出正确的方向吗?

Izy*_*orr 12

我有用PHP编写的项目,但这无关紧要.这就是我做的.

  1. 我启用了在我的GitLab安装上托管的私有注册表
  2. 在这个注册表中,我有一个由此构建的"声纳扫描仪"图像Dockerfile(它基于Docker中心提供的一个图像):

    FROM java:alpine  
    ENV SONAR_SCANNER_VERSION 2.8
    
    RUN apk add --no-cache wget && \  
        wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-${SONAR_SCANNER_VERSION}.zip && \  
        unzip sonar-scanner-${SONAR_SCANNER_VERSION} && \  
        cd /usr/bin && ln -s /sonar-scanner-${SONAR_SCANNER_VERSION}/bin/sonar-scanner sonar-scanner && \  
        apk del wget
    
    COPY files/sonar-scanner-run.sh /usr/bin
    
    Run Code Online (Sandbox Code Playgroud)

这是files/sonar-scanner-run.sh文件:

#!/bin/sh

URL="<YOUR SONARQUBE URL>"
USER="<SONARQUBE USER THAT CAN ACCESS THE PROJECTS>"
PASSWORD="<USER PASSWORD>"

if [ -z "$SONAR_PROJECT_KEY" ]; then
  echo "Undefined \"projectKey\"" && exit 1
else
  COMMAND="sonar-scanner -Dsonar.host.url=\"$URL\" -Dsonar.login=\"$USER\" -Dsonar.password=\"$PASSWORD\" -Dsonar.projectKey=\"$SONAR_PROJECT_KEY\""

  if [ ! -z "$SONAR_PROJECT_VERSION" ]; then
    COMMAND="$COMMAND -Dsonar.projectVersion=\"$SONAR_PROJECT_VERSION\""
  fi

  if [ ! -z "$SONAR_PROJECT_NAME" ]; then
    COMMAND="$COMMAND -Dsonar.projectName=\"$SONAR_PROJECT_NAME\""
  fi
  if [ ! -z $CI_BUILD_REF ]; then
    COMMAND="$COMMAND -Dsonar.gitlab.commit_sha=\"$CI_BUILD_REF\""
  fi
  if [ ! -z $CI_BUILD_REF_NAME ]; then
    COMMAND="$COMMAND -Dsonar.gitlab.ref_name=\"$CI_BUILD_REF_NAME\""
  fi
  if [ ! -z $SONAR_BRANCH ]; then
    COMMAND="$COMMAND -Dsonar.branch=\"$SONAR_BRANCH\""
  fi
  if [ ! -z $SONAR_ANALYSIS_MODE ]; then
    COMMAND="$COMMAND -Dsonar.analysis.mode=\"$SONAR_ANALYSIS_MODE\""
    if [ $SONAR_ANALYSIS_MODE="preview" ]; then
      COMMAND="$COMMAND -Dsonar.issuesReport.console.enable=true"
    fi
  fi

  eval $COMMAND
fi
Run Code Online (Sandbox Code Playgroud)
  1. 现在在我的项目中.gitlab-ci.yml我有这样的事情:

    SonarQube:  
      image: <PATH TO YOUR IMAGE ON YOUR REGISTRY>  
      variables:  
        SONAR_PROJECT_KEY: "<YOUR PROJECT KEY>"  
        SONAR_PROJECT_NAME: "$CI_PROJECT_NAME"  
        SONAR_PROJECT_VERSION: "$CI_BUILD_ID"  
      script:  
      - /usr/bin/sonar-scanner-run.sh  
    
    Run Code Online (Sandbox Code Playgroud)

这几乎不是全部.上面的例子.gitlab-ci.yml是简化的,因为我正在为master和其他分支使用不同的构建(比如when: manual),我使用这个插件在GitLab中获得反馈:https://gitlab.talanlabs.com/gabriel-allaigre/sonar-gitlab- 插入

如果您有任何疑问,请随时询问.我花了一些时间把它放在一起,就像我想要的那样:)实际上我还在调整它.


Dim*_*iwa 5

您需要先安装sonar-scanner。您可以找到几乎所有最新语言的声纳扫描仪的移植,例如对于 npm,您不必直接使用 java 执行程序:

我只添加这样做:

npm install --save sonar-scanner
Run Code Online (Sandbox Code Playgroud)

然后我需要在我的 package.json

"scripts": {
  "sonar-scanner": "node_modules/sonar-scanner/bin/sonar-scanner"
}
Run Code Online (Sandbox Code Playgroud)

这是我的工作.gitlab-ci.yml

job_testmaster:
  stage: test
  script:
    - PACKAGE_VERSION=$(node -p "require('./package.json').version")
    - echo sonar.projectVersion=${PACKAGE_VERSION} >> sonar-project.properties
    - npm run build
    - npm run sonar-scanner -- -Dsonar.login=${SONAR_LOGIN}
  only:
    - master
  tags:
    - docker
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以开始声纳分析,但之后我无法使用质量门。

希望这有帮助。