微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SonarScanner for .NET 在 GitHub Actions (.NET 5)

如何解决SonarScanner for .NET 在 GitHub Actions (.NET 5)

我正在尝试在我的 GitHub Actions 构建中使用 SonarCloud 来分析我的代码并为我的单元测试生成代码覆盖率。我正在 Visual Studio 2019 中开发 .NET 5 解决方案。

起初,我正在尝试 SonarCloud GitHub 操作 (https://github.com/SonarSource/sonarcloud-github-action),但日志告诉我使用 SonarScanner for .NET。 我已经按照文档设置了我的工作流程文件https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/。 我在工作流中使用了 dotnet-sonarscanner 全局工具。

工作流程如下所示:

jobs:
  BuildLinux:
    runs-on: ubuntu-latest

    steps:
      - name: 'Checkout Github Action'
        uses: actions/checkout@master
        with:
          # disabling shallow clone is recommended for improving relevancy of reporting
          fetch-depth: 0
        
      - name: Setup dotnet
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}
     
      - name: Install Sonar global tool
        run: dotnet tool install --global dotnet-sonarscanner

      - name: Begin Sonar scan
        run: dotnet sonarscanner begin /k:"MySonarProject" /d:sonar.login=${{ secrets.soNAR_TOKEN }}

      - name: Build and run unit tests
        run: |
          cd src
          dotnet restore "MySolution.sln"
          cd MyAPI
          dotnet build --no-restore
          cd -
          cd MyApiUnitTests
          dotnet build --no-restore
          dotnet test --no-build --no-restore --verbosity normal -p:CollectCoverage=true -p:CoverletoutputFormat=opencover
          
      - name: End Sonar scan
        run: dotnet sonarscanner end /d:sonar.login=${{ secrets.soNAR_TOKEN }}

运行此版本时,在“开始声纳扫描”步骤中出现以下错误。全局工具安装成功。

SonarScanner for MSBuild 5.2.1
Using the .NET Core version of the Scanner for MSBuild
Pre-processing started.
Preparing working directories...
05:54:44.604  Updating build integration targets...
05:54:44.688  Failed to request and parse 'http://localhost:9000/api/server/version': Connection refused (localhost:9000)
Unhandled exception. System.Net.Http.HttpRequestException: Connection refused (localhost:9000)
 ---> System.Net.sockets.socketException (111): Connection refused
   at System.Net.sockets.socket.Awaitablesocketasynceventargs.ThrowException(SocketError error,CancellationToken cancellationToken)
   at System.Net.sockets.socket.Awaitablesocketasynceventargs.System.Threading.Tasks.sources.IValueTaskSource.GetResult(Int16 token)
   at System.Net.sockets.socket.<ConnectAsync>g__WaitForConnectWithCancellation|283_0(Awaitablesocketasynceventargs SAEa,ValueTask connectTask,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.DefaultConnectAsync(SocketshttpconnectionContext context,CancellationToken cancellationToken)
   at System.Net.Http.ConnectHelper.ConnectAsync(Func`3 callback,DnsEndPoint endPoint,HttpRequestMessage requestMessage,CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(Func`3 callback,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.ConnectAsync(HttpRequestMessage request,Boolean async,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.GethttpconnectionAsync(HttpRequestMessage request,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.SendWithRetryAsync(HttpRequestMessage request,Boolean doRequestAuth,CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage request,HttpCompletionoption completionoption,Boolean emitTelemetryStartStop,CancellationToken cancellationToken)
   at SonarScanner.MSBuild.PreProcessor.WebClientDownloader.Download(String url,Boolean logPermissionDenied)
   at SonarScanner.MSBuild.PreProcessor.sonarWebService.<>c__displayClass18_0.<<DownloadServerVersion>b__0>d.MoveNext()
--- End of stack trace from prevIoUs location ---
   at SonarScanner.MSBuild.PreProcessor.sonarWebService.DoLogExceptions[T](Func`1 op,String url)
   at SonarScanner.MSBuild.PreProcessor.sonarWebService.DownloadServerVersion()
   at SonarScanner.MSBuild.PreProcessor.sonarWebService.GetServerVersion()
   at SonarScanner.MSBuild.PreProcessor.sonarWebService.WarnIfSonarQubeVersionIsDeprecated()
   at SonarScanner.MSBuild.PreProcessor.TeamBuildPreProcessor.DoExecute(ProcessedArgs localSettings)
   at SonarScanner.MSBuild.PreProcessor.TeamBuildPreProcessor.Execute(String[] args)
   at SonarScanner.MSBuild.BootstrapperClass.PreProcess()
   at SonarScanner.MSBuild.BootstrapperClass.Execute()
   at SonarScanner.MSBuild.Program.Execute(String[] args,ILogger logger)
   at SonarScanner.MSBuild.Program.Execute(String[] args)
   at SonarScanner.MSBuild.Program.Main(String[] args)
   at SonarScanner.MSBuild.Program.<Main>(String[] args)

构建在 ubuntu-latest 上运行,我也尝试过 windows-latest。结果一样。

我该如何解决这个问题?我可以首先在 GitHub Actions 中像这样使用 Sonar 扫描器吗?

解决方法

日志显示它尝试连接到 SonarQube 的本地实例,而不是 SonarCloud。您需要配置其他参数以连接到 SonarCloud:/d:sonar.host.url=https://sonarcloud.io/o:<your organization>。请参阅 SonarCloud version of task documentation 和 SonarCloud required parameters

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。