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.4MSBuild 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