У меня есть рабочий процесс 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"]
ls -l
после части символической ссылки, чтобы проверить, все ли там есть. - person bellackn   schedule 22.05.2019COMMAND="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