Сценарий
Я использую Circle-ci для запуска проверки sonarqube для покрытия кода. Приложение Node использует jest для создания файлов покрытия кода. Я столкнулся с проблемой, когда файл lcov генерируется с абсолютными путями, то есть
/home/node/app/fixtures/github.js
, когда sonarqube запускает эти файлы на самом деле в
/root/project/app/fixtures/github.js
Ошибка:
WARN: Could not resolve 9 file paths in [/home/node/app/reports/lcov.info], first unresolved path: /home/node/app/fixtures/github.js
Возможное решение?
Это разрешимо с чем-то вроде
sed -i 's#/home/node/app/##g' /home/node/app/reports/lcov.info
Я положил этот аргумент в настройках sonarqube:
File=$(sed -i 's#/home/node/app/##g' /home/node/app/reports/lcov.info)
-Dsonar.javascript.lcov.reportPaths=$File
, чтобы превратить их в относительные пути, но это необходимо настроить, так как изображение, в котором создается отчет lcov, может иметь любую файловую структуру.
Package.json
...
{
"test": "./node_modules/.bin/jest -c jest.unit.config.js --coverage --forceExit",
}
Настройка шара Circle-CI:
run:
command: |
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.1.0.1829-linux.zip unzip sonar-scanner-cli-4.1.0.1829-linux.zip
export SONAR_SCANNER_OPTS="-Xmx2048m"
File=$(sed -i 's#/home/node/app/##g' /home/node/app/reports/lcov.info)
./sonar-scanner-4.1.0.1829-linux/bin/sonar-scanner -X
-Dsonar.host.url=${SONARQUBE_URL}
-Dsonar.login=$SONARQUBE_TOKEN
-Dsonar.projectKey=${CIRCLE_PROJECT_REPONAME}
-Dsonar.sources=. -Dsonar.sourceEncoding=US-ASCII
-Dsonar.exclusions=**/node_modules/**
-Dsonar.javascript.lcov.reportPaths=$File
-Dsonar.junit.reportPaths="/home/node/app/reports/junit/js-test-results.xml"