SonarScanner for .NET in Docker - 解决方案使用`docker run`构建,但不使用`docker-compose`

问题描述

我正在尝试使用带有 nosinovacao/dotnet-sonar image 的 docker 使用 SonnarScanner for .NET 进行代码分析,但是,我无法使用 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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...