dotnet.exe блокировка SonarScanner.MSBuild.Common.dll - PullRequest
0 голосов
/ 31 мая 2018

Добрый вечер,

Я использую отсюда версию .Net Core 2.0 https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild для проекта 2.1 в Jenkins с:

withSonarQubeEnv('SonarQubeMain') {
    bat "dotnet ${globals.SONAR_QUBE_MSBUILD_PATH}\\SonarScanner.MSBuild.dll begin /k:\"${globals.SONAR_QUBE_PROJECT}\" /d:sonar.host.url=${globals.SONAR_HOST_URL} /d:sonar.cs.xunit.reportsPaths=\"XUnit.xml\" /d:sonar.cs.opencover.reportsPaths=\"coverage.xml\"
}

bat "dotnet build --version-suffix ${env.BUILD_NUMBER}"

dir('test/mytestprojecthere') {
    bat 'D:\\OpenCover\\OpenCover.Console.exe -target:"c:\\Program Files\\dotnet\\dotnet.exe" -targetargs:"xunit --no-build -xml XUnit.xml" -output:coverage.xml -oldStyle -filter:"-[*Tests*]*" -register:user'
}
withSonarQubeEnv('SonarQubeMain') {
    bat "dotnet ${globals.SONAR_QUBE_MSBUILD_PATH}\\SonarScanner.MSBuild.dll end"
}

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

Failed to create an empty directory 'D:\Jenkins\workspace\xxxxxxxx\.sonarqube'. 
Please check that there are no open or read-only files in the directory and that you have the necessary read/write permissions.

Detailed error message: Access to the path 'SonarScanner.MSBuild.Common.dll' is denied.

и проверяя мой сервер Windows, я вижу несколько процессов .Net Core Host Background.Если я убью их, я смогу собрать их снова.

Я читал о msbuild /nodereuse:false для MSBuild, но, похоже, не работает для версии ядра dotnet?

Ответы [ 5 ]

0 голосов
/ 08 января 2019

Я столкнулся с той же проблемой, и выполнение следующей команды решило проблему.

dotnet build-server shutdown

Это происходит из-за повторного использования узла msbuild.мы оставляем узлы msbuild живыми с целью экономии времени запуска при выполнении последовательных сборок.

Это можно отключить, установив следующую переменную окружения.

MSBUILDDISABLENODEREUSE=1
0 голосов
/ 05 октября 2018

Мы только что столкнулись с этой проблемой и обнаружили, что она связана с повторным использованием узлов dotnet и msbuild, которые были запущены предыдущей многопоточной сборкой.

Чтобы избежать этой проблемы, используйте либо /nodereuse:false или /nr:false в командной строке следующим образом:

msbuild /m /nr:false myproject.proj

msbuild /m /nodereuse:false myproject.proj

dotnet restore myproject.sln /nodereuse:false
0 голосов
/ 20 июня 2018

Я сам наткнулся на него и "решил", запустив dotnet build-server shutdown в качестве первой задачи в моем плане сборки.Это не идеально по нескольким причинам, одна из которых заключается в том, что это может вызвать проблемы, если я попытаюсь запустить несколько сборок .NET Core одновременно на одной машине.Это, похоже, ошибка в сканере - надеюсь, это будет исправлено в ближайшее время.

0 голосов
/ 21 июня 2018

FYI @Nauzet открыл проблему, открытую для этого в репозитории Scanner for MSBuild: # 535 .

Подводя итог:

  • начало и конецшаги выполняются нормально, и dotnet.exe завершает работу, как и ожидалось, для этих процессов
  • при построении сложного решения, запускается несколько экземпляров dotnet.exe ине закрываются сразу после завершения сборки.Похоже, что проблема не возникает на более простых решениях.
  • проблема возникает, если вы запускаете фазу сборки, используя dotnet build или dotnet msbuild
  • Временные решения: сборка с использованием msbuild напрямую или сборка с использованием dotnet build / nodereuse: false

FYI Сканер для MSBuild имеет несколько пользовательских задач, которые:вызывается на этапе сборки.Они используют сборку, которая заблокирована.Там нет ничего необычного в пользовательских задачах;они просто читают данные из файла на диске.На данный момент я не уверен, что это проблема сканера для MSBuild.

0 голосов
/ 01 июня 2018

Пожалуйста, отредактируйте ваш конвейерный скрипт, как показано ниже, и он должен работать правильно:

    withSonarQubeEnv('SonarQubeMain') {
    bat "dotnet ${globals.SONAR_QUBE_MSBUILD_PATH}\\SonarScanner.MSBuild.dll begin /k:\"${globals.SONAR_QUBE_PROJECT}\" /d:sonar.host.url=${globals.SONAR_HOST_URL} /d:sonar.cs.xunit.reportsPaths=\"XUnit.xml\" /d:sonar.cs.opencover.reportsPaths=\"coverage.xml\"

bat "dotnet build --version-suffix ${env.BUILD_NUMBER}"

dir('test/mytestprojecthere') {
    bat 'D:\\OpenCover\\OpenCover.Console.exe -target:"c:\\Program Files\\dotnet\\dotnet.exe" -targetargs:"xunit --no-build -xml XUnit.xml" -output:coverage.xml -oldStyle -filter:"-[*Tests*]*" -register:user'
}

bat "dotnet ${globals.SONAR_QUBE_MSBUILD_PATH}\\SonarScanner.MSBuild.dll end"
    }

ОБНОВЛЕНИЕ

Вот ядро ​​dotnetИспользуемый мной сценарий сборки конвейера приложения, который работает без проблем:

bat "dotnet ${sqScannerMsBuildHome}\\SonarScanner.MSBuild.dll begin /k:yoursonarprojectkey /n:yoursonarprojectname /v:1.0 /d:sonar.host.url=%SONAR_HOST_URL%"
bat 'dotnet build'
bat "dotnet ${sqScannerMsBuildHome}\\SonarScanner.MSBuild.dll end"
...