用gitlab ci运行sonarqube扫描仪

我正在尝试使用下面的堆栈(只是相关的)将.NET应用程序的CI环境放在一起:

  • Debian +单声道
  • docker
  • Gitlab CI
  • Gitlab-multi-runner(作为docker集装箱)
  • Sonarqube + Postgre

我已经使用docker-compose为sonarqube和postgre创build容器,两者都在运行和工作。 我很遗憾地执行sonitquay分析为我的构build由gitlab亚军执行和我发现所有的例子是使用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 >> 

我绝对错过了这里的东西。 有人能指出我正确的方向吗?

我有用PHP编写的项目,但这不应该。 这是我做的。

  1. 我启用了我的GitLab安装托pipe的私人registry
  2. 在这个registry中,我有一个从这个Dockerfile构build的“sonar-scanner”镜像(它基于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 

这里是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 
  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 

几乎没有。 上面的例子.gitlab-ci.yml被简化了,因为我使用了master和其他分支的不同版本(比如when: manual ),我使用这个插件在GitLab中获得反馈: https ://gitlab.talanlabs.com /加布里埃尔-allaigre /声纳-gitlab-插件

随意问你是否有任何问题。 我花了一些时间把它们放在一起,就像我想要的那样:)其实我仍然在调整它。

不确定是否遇到过这种情况,但是当遇到错误时,您的声纳扫描仪实际上是否给出了非0的退出码? 如果发生错误,会阻止gitlab-ci阶段。

您需要先安装sonar-scanner 。 你可以find几乎任何最近的语言的声纳扫描仪的portage,例如npm你不必直接使用java执行器:

我只补充说明:

 npm install --save sonar-scanner 

然后我需要在我的package.json添加这个

 "scripts": { "sonar-scanner": "node_modules/sonar-scanner/bin/sonar-scanner" } 

这是我在.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 

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

希望这个帮助。