GitHub的dotnet core CI实践(.net core + xUnit + OpenCover + Appveyor + Coveralls.net)

最近利用业余时间实现.ner core 版本的 casbin ,即 Casbin.NET。之前的CI都使用的是公司搭建的jenkinsgitlab-runner,对开源社区的工具链并不是很熟悉,在casbin的原作者(hsluoyz )的“要求”下,只能被迫在项目的README.md加入下面这些徽标:

NOTE:其实我只加了coverage 和 appveyor build 徽章。

使用的工具和平台如下:

  1. Appveyor
  2. OpenCover
  3. coveralls
  4. coveralls.net
  5. dotnet core 2.x

Appveyor 和 coveralls的注册以及github授权就略过不提。然后,只需要在项目中放入.appveyor.yml 配置文件配置就算是完成了。此处关注配置文件和实际过程中碰到的一些坑。

.appveyor.yml

version: ‘{build}‘
image: Visual Studio 2017
skip_tags: true
pull_requests:
  do_not_increment_build_number: true
dotnet_csproj:
  patch: true
  file: ‘**\*.csproj‘
  version: ‘{version}‘
  package_version: ‘{version}‘
environment:
  COVERALLS_REPO_TOKEN:
     secure: Ggx6TlzRHUhBJzBlXHLQOepde26ODej0NODgNKlczHfB3/jqTZMf8Ro123i1pVPz
build_script:
  - dotnet build -c Release
test_script:
- ps: >-
?
    nuget install xunit.runner.console -OutputDirectory packages -Version 2.3.1

    nuget install OpenCover -OutputDirectory packages -Version 4.7.922
?
    dotnet tool install coveralls.net --version 1.0.0 --tool-path tools
?
    cd .\NetCasbin.UnitTest\bin\Release\netcoreapp2.0
?
    ..\..\..\..\packages\OpenCover.4.7.922\tools\OpenCover.Console.exe -target:dotnet.exe "-targetargs:""..\..\..\..\packages\xunit.runner.console.2.3.1\tools\netcoreapp2.0\xunit.console.dll"" "".\NetCasbin.UnitTest.dll"" -noshadow -appveyor" -filter:"+[NetCasbin]*  -[NetCasbin.UnitTest]*" -register:user -oldStyle -output:..\..\..\..\opencoverCoverage.xml

    cd ..\..\..\..\ 

    $coveralls = ".\tools\csmacnz.coveralls.exe"
?
    & $coveralls --opencover -i opencoverCoverage.xml --repoToken $env:COVERALLS_REPO_TOKEN --commitId $env:APPVEYOR_REPO_COMMIT --commitBranch $env:APPVEYOR_REPO_BRANCH --commitAuthor $env:APPVEYOR_REPO_COMMIT_AUTHOR --commitEmail $env:APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL --commitMessage $env:APPVEYOR_REPO_COMMIT_MESSAGE --jobId $env:APPVEYOR_JOB_ID

  1. 错误1:
System.IO.FileNotFoundException: Could not load file or assembly ‘System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a‘. The system cannot find the file specified.
System.IO.FileNotFoundException: Could not load file or assembly ‘System.Runtime, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a‘. The system cannot find the file specified.
Committing...

导致这个错误的原因很简单,使用正确的包版本(nuget install xunit.runner.console -OutputDirectory packages -Version 2.3.1),还有就是单元测试项目NetCasbin.UnitTest.csproj 的目标平台过高<TargetFrameworks>netcoreapp2.1</TargetFrameworks> ,改成<TargetFrameworks>netcoreapp2.0</TargetFrameworks>

  1. 错误2:

    System.InvalidOperationException: Could not find/load any of the following assemblies: xunit.execution.dotnet.dll
    Committing...

    和错误1相同单元测试项目NetCasbin.UnitTest.csproj 的目标平台过高<TargetFrameworks>netcoreapp2.1</TargetFrameworks> ,改成<TargetFrameworks>netcoreapp2.0</TargetFrameworks>

  2. 错误3:
    Using Git Data Provider ‘Command line Arguments‘
    csmacnz.Coveralls.exe : Failed to upload to coveralls
    At line:9 char:1
    + & $coveralls --opencover -i opencoverCoverage.xml --repoToken $env:CO ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (Failed to upload to coveralls:String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
    
    UnprocessableEntity - Couldn‘t find a repository matching this job.
    Command executed with exception: UnprocessableEntity - Couldn‘t find a repository matching this job.
    ?

导致这个错误的原因其实是.appveyor.yml配置文件中定义的环境变量COVERALLS_REPO_TOKENsecure的值错误,正确的值应该是原始coveralls中项目的COVERALLS_REPO_TOKEN 的密文,appveyor也提供了加密的工具 https://ci.appveyor.com/tools/encrypt,将密文作为COVERALLS_REPO_TOKENsecure的值即可。

  1. 错误4:

    如果上面的问题都排除了还有下面的问题:

    Committing...
    No results, this could be for a number of reasons. The most common reasons are:
        1) missing PDBs for the assemblies that match the filter please review the
        output file and refer to the Usage guide (Usage.rtf) about filters.
        2) the profiler may not be registered correctly, please refer to the Usage
        guide and the -register switch.

那需要在项目的.csproj文件中加入<DebugType>full</DebugType>

最后要说的是,营造一个好的.net core生态需要每一位喜欢c#语言的coder参与者,这里希望能够通过github 的CI实践,抛砖引玉,吸引更多的参与者加入到开源社区。

下一篇文章:一个权限引擎的作用,Cabin.NET的使用

原文地址:https://www.cnblogs.com/centcore/p/11146488.html

时间: 2024-10-08 20:50:39

GitHub的dotnet core CI实践(.net core + xUnit + OpenCover + Appveyor + Coveralls.net)的相关文章

使用 dotnet watch 开发 ASP.NET Core 应用程序

使用 dotnet watch 开发 ASP.NET Core 应用程序 原文:Developing ASP.NET Core applications using dotnet watch作者:Victor Hurdugaci翻译:谢炀(Kiler)校对:刘怡(AlexLEWIS).许登洋(Seay) 介绍 dotnet watch 是一个开发阶段在源文件发生变动的情况下使用 dotnet 命令的工具. 当代码发生变动的时候可以用来执行编译,运行测试,或者发布操作. 在本教程中,我们将使用一个

【dotnet跨平台】微软昨天宣布正式发布.NET Core RC2和.NET Core SDK Preview 1,还有Entity Framework Core RC2

?? [dotnet跨平台]微软昨天宣布正式发布.NET Core RC2和.NET Core SDK Preview 1,还有Entity Framework Core RC2 期待已经的版本终于在昨天发布了 微软昨天宣布正式发布.NET Core RC2和.NET Core SDK Preview 1:https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-net-core-rc2/ 微软昨天宣布正式发布Entity Fra

EF Core 快速上手——EF Core 入门

EF Core 快速上手--EF Core 介绍 本章导航 从本书你能学到什么 对EF6.x 程序员的一些话 EF Core 概述 1.3.1 ORM框架的缺点 第一个EF Core应用 ??本文是对<Entity framework in action>部分章节的翻译,某些场景也会附上笔者实践的Demo.尽管很认真的斟酌,但是水平有限,还请各位批评和斧正. ??Entity Framework Core, 或者 EF Core,是一个方便软件工程师访问数据库的库.有很多方法来构建这样的一个库

第一个,net core项目,.net core入门介绍!!!

最近项目上开始使用.net core,新的项目,熟悉的东西比较多,现在花点时间来梳理一下,重头开始搭建一个.net core项目.哈哈,这个相对老手来说,估计会觉得小儿科,没事,也就当一次分享总结罢了,希望对有帮助的小伙伴有点帮助就好. 环境准备: 为了开发.net core,微软已经明确终止.net core 2.2,所以我们在实际开发中必须要用.net core3.1了吧,为了更好的使用,所以开发环境赶快升级上来:vs总得升级到vs2019了吧,.net core3.1赶紧装上.哈哈,其实想

【从0开始.NET CORE认证】-2 使用.Net Core Identity和EF Core

回顾 朋友们,距离上次从0开始.NET CORE认证-1发布已经过去一周了,上次第一篇文章,其实并没有涉及到Net Core Identity,就是简单的搭了一个项目,让大家对Identity中各种术语有个理解,明白他们出现的位置,已经他们出现能够达到某种功能.以及出现的位置顺序不同,则会出现什么不同的情况. 回顾一下上次写的主要的知识点 Authentication和Authorization 是什么,怎么解释他们 Claim和ClaimType又是什么,能举例子说明吗? ClaimsIden

什么是Asp.net Core?和 .net core有什么区别?

为什么要写这篇文章 写这篇文章有两个原因,第一个是因为新站点创建出来后一直空置着,所以写一篇文章放在这里.第二就是因为近来在做一些基于Asp.net core平台的项目开发,也遇到了一些问题,正好趁此机会写出来,一方面算是自己知识的一个备忘,另一方面也希望对其他朋友能有所帮助. 什么是Asp.Net core 我相信很多C# Developer已经对于.net core不算陌生了,就算没有正式使用相信也应该有所了解.微软在推出来.net core的同时为了方便一些原有的项目可以方便迁移,同时推出

Building a Web App with ASP.NET Core, MVC, Entity Framework Core, Bootstrap, and Angular

Since I have spent many years on Windows Application development in my first three years of software career.  I was interested in the C#, had tried to understand the basic knowledge about C#. The programs, the patterns, the object-oriented methodolog

ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 视图 花了几章节,终于把 ASP.NET Core MVC 中的 C 控制器涉及的七七八八了,本章节我们来学习下 V,也就是视图部分. ASP.NET Core MVC 应用程序中,没有任何内容像页面,并且在 URL 中指定路径时, 它也不包含与页面直接对应的任何内容. ASP.NET Core MVC 应用程序中最接近页面的东西被称为视图 是不是很拗口,哈哈,页面就是

ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程

原文:ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 Entity Framework Core 上一章节学习完了视图,其实我们应该立即着手讲解模型的,但 ASP.NET Core MVC 中的模型和 Entity Framework 有相当大的关系,所以,在此之前,我们先来讲讲 Entity Framework Core 和如何配置它 本章中,我们将设置和配置我们的应用程