Запуск Sonar Scanner из gitlab docker runner

У меня есть рабочий процесс CI, который объединяет задание линтинга, а затем задание качества кода. Моя работа Linting - это средство выполнения докеров, запускающее мой скрипт eslint из кода приложения. Затем моя работа по обеспечению качества кода должна запустить экземпляр докера сонарного сканера, проверить мой код и отправить отчеты обратно в мой экземпляр sonarqube.

Проблема заключается в основном в том, что я не могу правильно запустить сканер сонара с помощью следующих решений:

Докер сонарного сканера https://github.com/newtmitch/docker-sonar-scanner
На этом этапе бегун запускает изображение, но при запуске его сценария (а это всего лишь sonar-scanner (with potential arguments) я получаю этот ответ с ошибкой:

sonar scanner unrecognized option -c

который я не понимаю и не могу контролировать, так как это уже созданный образ докера, извлеченный из концентратора докеров

Установка сканера сонара с нуля в контейнере докера
Вот что я делаю, это устанавливаю сканер сонара, загружая его в контейнер следующим образом:

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, чтобы иметь возможность загружать файлы, затем загружаю последнюю версию сонара-сканера по ссылке, найденной на их официальном документация. Затем я распаковываю его и создаю символическую ссылку на двоичный файл, чтобы я мог выполнить сценарий из любого места. Я, наконец, очищаю кеш wget, копирую мой сценарий оболочки, который будет выполняться из gitlab-ci.yml, и запускаю команду chmod, чтобы обойти любые проблемы с разрешениями.

sonar-scanner-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», когда моя символическая ссылка не создается, так как я получаю этот код ошибки в моих журналах 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

Мой проект является реактивным, поэтому проект 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"]

person Aria Groult    schedule 22.05.2019    source источник
comment
Возможно, добавьте ls -l после части символической ссылки, чтобы проверить, все ли там есть.   -  person bellackn    schedule 22.05.2019
comment
хорошо, я исправил проблему, но теперь есть еще одна проблема, я отправлю ее в редактировании вопроса.   -  person Aria Groult    schedule 22.05.2019
comment
COMMAND="sonar-scanner -Dsonar.host.url=\"$URL\" -Dsonar.login=\"$USER\" -Dsonar.projectKey=\"$SONAR_PROJECT_KEY\"" eval $COMMAND - что-то не так с простым запуском команды? Добавьте set -x в сценарий и посмотрите, правильно ли вы его экранировали. Просто запустите его как есть _3 _...   -  person KamilCuk    schedule 22.05.2019
comment
Задача решена. В двоичном коде сонарного сканера использовались устаревшие встроенные файлы java. Я создал новый образ докера на основе образа openjdk: latest и изменил двоичные файлы сонарного сканера, чтобы он больше не использовал встроенные файлы. Все будет в редактировании для дальнейшей информации.   -  person Aria Groult    schedule 22.05.2019
comment
@Biffen Я плохо понимал, что могу ответить на свой вопрос, сделаю это.   -  person Aria Groult    schedule 22.05.2019


Ответы (1)


После дальнейших исследований могу сказать, что я сделал рабочий образ докера для сонарного сканера, который может работать с gitlab ci.

ДОКЕРФАЙЛ

FROM openjdk:8

LABEL maintainer="Aria Groult <[email protected]>"

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 в сонар-сканер. Если это произойдет, измените двоичный файл, установив для: 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/**

Важно указать, что node_modules исключены из проекта nodejs, поскольку они включают некоторые java-файлы, которые приведут к некоторому нарушению работы процесса сонара-сканера. Как правило, в список файлов сонара-сканера включаются только несгенерированные файлы.

person Aria Groult    schedule 22.05.2019