Docker 中用于 .NET 的 SonarScanner - 解决方案使用“docker 运行”构建,但不使用“docker-compose”构建
SonarScanner for .NET in Docker - solution builds with `docker run`, but not with `docker-compose`
我正在尝试使用 SonnarScanner for .NET 使用 docker 和 nosinovacao/dotnet-sonar image 进行代码分析,但是,我无法使用 docker-compose
构建项目,而当我使用 docker run
参数相同
该解决方案由几个子解决方案组成,似乎在使用 docker-compose
时 MS Build 在构建整个解决方案时存在一些问题,因为我收到 MSBUILD : error MSB1008: Only one project can be specified.
错误。
当使用 docker run
时,会出现一条消息 Determining projects to restore...
,然后正确构建解决方案。
我不明白这是什么问题,因为我使用的图像和参数完全相同。
这是我的工作 docker run
命令:
docker run -it --rm \
--network=host \
-v /Developer/MyProject/:/source \
nosinovacao/dotnet-sonar:latest \
bash -c \
"cd source \
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin \
/k:MyProjectKey /name:MyProject /version:v1.2.3 \
/d:sonar.host.url="http://localhost:9000/" \
&& dotnet build MyProject.sln -c Release \
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end"
和docker-compose
:
version: "3.8"
services:
dotnetscanner:
entrypoint: /bin/bash
command: -c "
cd source
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin
/k:MyProjectKey /name:MyProject /version:v1.2.3
/d:sonar.host.url="http://localhost:9000/"
&& dotnet build MyProject.sln -c Release \
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end"
image: nosinovacao/dotnet-sonar:latest
volumes:
- "/Developer/MyProject/:/source"
network_mode: host
docker图像使用SonarScanner for MSBuild 5.0.4
和MSBuild version 16.8.3+39993bd9d for .NET
。
如何使 SonarScanner 与 docker-compose
一起工作?
提前致谢。
编辑:
似乎传递参数有问题,当我在 docker-compose
中明确定义不存在的项目时,我得到:
dotnetscanner_1 | MSBUILD : error MSB1008: Only one project can be specified.
dotnetscanner_1 | Switch:
当我对 docker run
执行相同操作时,错误消息中的 Switch:
不为空:
MSBUILD : error MSB1009: Project file does not exist.
Switch: NonExistingProject.csproj
原来是多行参数导致了问题。
要解决此问题,可以将 command
参数作为单行传递或使用以下语法:
version: "3.8"
services:
dotnetscanner:
command: >
sh -c "cd source && dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin /k:ProjectKey /name:Project /version:v1.2.2
/d:sonar.host.url="http://localhost:9000/"
&& dotnet build -c Release
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end"
image: nosinovacao/dotnet-sonar:latest
volumes:
- "/Project:/source"
network_mode: host
我正在尝试使用 SonnarScanner for .NET 使用 docker 和 nosinovacao/dotnet-sonar image 进行代码分析,但是,我无法使用 docker-compose
构建项目,而当我使用 docker run
参数相同
该解决方案由几个子解决方案组成,似乎在使用 docker-compose
时 MS Build 在构建整个解决方案时存在一些问题,因为我收到 MSBUILD : error MSB1008: Only one project can be specified.
错误。
当使用 docker run
时,会出现一条消息 Determining projects to restore...
,然后正确构建解决方案。
我不明白这是什么问题,因为我使用的图像和参数完全相同。
这是我的工作 docker run
命令:
docker run -it --rm \
--network=host \
-v /Developer/MyProject/:/source \
nosinovacao/dotnet-sonar:latest \
bash -c \
"cd source \
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin \
/k:MyProjectKey /name:MyProject /version:v1.2.3 \
/d:sonar.host.url="http://localhost:9000/" \
&& dotnet build MyProject.sln -c Release \
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end"
和docker-compose
:
version: "3.8"
services:
dotnetscanner:
entrypoint: /bin/bash
command: -c "
cd source
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin
/k:MyProjectKey /name:MyProject /version:v1.2.3
/d:sonar.host.url="http://localhost:9000/"
&& dotnet build MyProject.sln -c Release \
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end"
image: nosinovacao/dotnet-sonar:latest
volumes:
- "/Developer/MyProject/:/source"
network_mode: host
docker图像使用SonarScanner for MSBuild 5.0.4
和MSBuild version 16.8.3+39993bd9d for .NET
。
如何使 SonarScanner 与 docker-compose
一起工作?
提前致谢。
编辑:
似乎传递参数有问题,当我在 docker-compose
中明确定义不存在的项目时,我得到:
dotnetscanner_1 | MSBUILD : error MSB1008: Only one project can be specified.
dotnetscanner_1 | Switch:
当我对 docker run
执行相同操作时,错误消息中的 Switch:
不为空:
MSBUILD : error MSB1009: Project file does not exist.
Switch: NonExistingProject.csproj
原来是多行参数导致了问题。
要解决此问题,可以将 command
参数作为单行传递或使用以下语法:
version: "3.8"
services:
dotnetscanner:
command: >
sh -c "cd source && dotnet /sonar-scanner/SonarScanner.MSBuild.dll begin /k:ProjectKey /name:Project /version:v1.2.2
/d:sonar.host.url="http://localhost:9000/"
&& dotnet build -c Release
&& dotnet /sonar-scanner/SonarScanner.MSBuild.dll end"
image: nosinovacao/dotnet-sonar:latest
volumes:
- "/Project:/source"
network_mode: host