软件开发一般来说是一项团队作业,在本系列文章开始就提到过软件的编码是由一个团队“并行”完成的,为了保证编码任务正常完成,首先引入版本控制工具来完成代码管理,为了保证代码质量引入了代码分析器以及代码测试。

  版本控制工具可以保证代码有一个主版本,但代码分析和测试均是开发人员手动在本地完成的(通过编译、执行测试等方式),在进行代码分析和测试时可能并没有将本地代码更新到最新版本,这样就会出现一个问题,当多个开发人员向版本库提交代码时,无法保证最新代码库的代码是正确的,为了解决这个问题,提出了持续集成,持续集成的集成指的是持续的对多个开发人员编写的代码进行集成,本文从下面几个方面介绍持续集成以及基于Github进行持续集成实践:

CI&CD

  持续集成(Continuous integration,CI)指的是在开发过程中持续地将所有开发人员的代码合并到代码库的主线上,然后对该主线代码进行编译、测试运行等操作对代码进行检验,其目的是尽可能早的发现代码集成后导致的问题。
  实现持续集成的要点主要有:共享的代码库、自动化编译、自动化测试等,同时要保证合理的集成频率,一般持续集成的时机在于开发人员将代码提交到代码库时自动进行,但是如果提交过于频繁,那么应该使用时间间隔的形式进行持续集成。
  持续发布(Continuous delivery,CD)实际上是持续集成上的一个拓展,在持续集成的基础上将发布工作自动化,避免人为操作从而减少发布时间和发布时人为造成的错误。

常用的持续集成工具

  持续集成经过多年的发展,在不同的应用场景、平台/语言、商业化等因素下产生了许多持续集成工具,可参考(但不限于这些):  https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software
  比较常用的持续集成工具有:
  Jenkins
  Jenkins是一个开源的跨平台持续集成工具,它提供了GUI界面以及大量的拓展插件,通过GUI界面可以简单、快速的完成项目持续集成配置,更重要的是Jenkins支持所有的版本控制工具。
  项目地址:https://jenkins.io/

  TeamCity
  TeamCity是JetBrains公司开发的持续集成工具,它有免费和收费两种授权,免费版本的TeamCity拥有所有功能,其限制仅仅是只能创建100个编译配置和只能并行运行3个代理。
  项目地址:http://www.jetbrains.com/teamcity/

  GitLab
  GitLab是一个Git的代码管理工具,使用GitLab可以轻松的在Linux环境搭建一个Git的远程代码托管平台,同时GitLab中也内置的CI/CD功能。
  项目地址:https://about.gitlab.com/

  Travis CI
  Travis CI是一个持续集成托管平台,它为开源项目提供免费支持,但Travis CI不支持Windows下编译。
  项目地址:https://www.travis-ci.org/

  AppVeyor
  AppVeyor也是一个持续集成的托管平台,它支持Windows和Linux,并且AppVeyor可以对环境进行定制:https://www.appveyor.com/docs/build-environment/,是一个非常强大的CI工具,AppVeyor对开源项目提供免费支持。
  项目地址:https://www.appveyor.com/

  VSTS
  VSTS(Visual Studio Team Services)是微软的软件开发管理解决方案,它包含了代码版本管理、持续集成/发布、敏捷等特性,并且VSTS为5人以下团队提供了免费使用。
  项目地址:https://visualstudio.microsoft.com/zh-hans/team-services/

  总的来说持续集成工具分为可本地安装和平台托管两类,本地安装类型的工具适合有专用构建服务器资源的闭源项目(当然开源项目也可以使用),而托管平台则比较适合开源或者没有专用构建服务器资源的项目,使用上托管平台更加省心,这些工具需要根据实际情况来进行选用。

GitHub市场简介

  GitHub作为一个分布式的软件管理解决方案,它除了提供代码托管外,还通过应用市场的方式提供了拓展应用,这些应用主要用于持续继承、部署、测试、代码审查、项目管理等等,详情查看:https://github.com/marketplace/
  下图为Github市场中的CI工具:

  

  一般来说市场中提供的应用对于开源项目都是可以免费使用的,下面就介绍如何将Github上的开源项目使用其市场应用完成持续集成。

使用AppVeyor实现持续集成

  AppVeyor是一个支持自定义持续集成环境的CI工具,它对.Net程序的支持非常强大,同时对开源项目免费,所以AppVeyor是.Net Core项目持续集成的首选,下面就介绍如何使用AppVeyor完成持续基础:
  1. 在GitHub市场中找到AppVeyor,并完成安装:

  

  2. 添加项目:

  

  选择GitHub仓库,并完成授权:

  

  添加需要的仓库:

  

  点击“NEW BUILD”进行一次编译:

  

  从编译的信息可以看到,此次编译失败了,并且给出了相应的错误信息,这是由于编译环境导致的。

  3. 环境配置:
  将编译镜像选择为VS2017:

  

  在编译前先执行dotnet restore命令还原项目依赖:

  

  4. 开始一个新的编译:
  编译结果:

  

  从编译结果可以看出Appveyor不仅仅是完成了编译工作,而且还搜索了测试信息,并完成了测试。另外有一个要点是本项目中的测试是依赖数据库的,这就意味着Appveyor的编译环境提供了SQL Server数据的支持。

  5. 将编译后的内容发布到GitHub release:
  为xUnitTestDemo代码库添加一个Tag:

  

  然后Appveyor将会检测到代码库的变化,自动编译Tag,并将结果部署到Github的Release中:

  自动部署的Release内容:

  

  关于appveryor部署的更多信息参考:https://www.appveyor.com/docs/deployment/

  6. 将编译状态显示到GitHub上:
  Appveyor的Badges(标记)配置界面中可以获取到状态标记地址:

  

  将MarkDown的代码复制到项目的README.md文件中:

  

  效果:

  

  7. 导出appveyor.yml文件以及通过appveyor.yml来完成配置:
  上面的方法是通过Appveyor的Web界面上完成配置的,除此之外还可以通过appveyor.yml文件来完成配置,appveyor.yml文件可以自己创建或导出已有配置:
  导出已有配置:

  

  将appveyor.yml文件放置到代码根目录,并通过修改该文件来变更配置:

  

  上图在原有配置基础上修改为release的方式编译代码,并且指定生成结果目录,将结果进行压缩。
  更多appveyor.yml配置可参考:https://www.appveyor.com/docs/appveyor-yml/

使用Codecov显示代码覆盖率

  Codecov也是Github市场的一个应用,它用于生成代码覆盖率报告,codecov对C#的支持是基于OpenCover的(使用OpenCover检测代码覆盖率参考:好代码是管出来的——.Net Core中的单元测试与代码覆盖率),Codecov对Github的公开项目是免费的,下面就开始介绍如何使用codecov来实现测试代码覆盖率的统计:
  1. 安装Codecov:

  

  注:安装完成Codecov后,会有一个Upload Token用来将代码覆盖报告上传到Codecov,但Appveyor的公共仓库可以不需要:

  

  2. 修改appveyor.yml文件:

  

  添加使用choco管理器安装OpenCover及codecov,然后在test_script中添加代码覆盖率分析报告以及上传脚本。
  注:当上述变更push到Github后,Appveyor将开始自动编译并完成包括代码覆盖率报告生成、上传等所有工作,此时打开codecov页面将会看到报告信息:

  

  3. 在README.md文件中添加Codecov的标签:

  

  

  结果:

  

小结

  本文介绍了CI和CD的基本概念,前者目的在于尽可能早的发现多人开发时代码集成的错误,而后者目的是避免人为造成的错误,将一些重复的事情交由程序自动完成,既可以减少成本又可以提高正确率,现在流行的DevOps的基础之一就是自动化也就是CI和CD。
  另外本文还介绍了在Github上使用Appvoyer和Codecov工具实现了简单的持续集成,当把新代码推到GitHub仓库时,Appvoyer会自动的完成一系列构建操作。Appvoyer是一个非常强大的CI工具,对C#的支持也非常好可以选择VS版本(包括预览版),多种数据库(包括Linux下的SQL Server),所以在执行测试时依赖数据库的测试也能通过。
  下篇文章将介绍如何使用Jenkins完成本地CI服务器的搭建。

参考:
  https://en.wikipedia.org/wiki/Continuous_integration
  https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software
  https://en.wikipedia.org/wiki/Continuous_delivery
  https://cakebuild.net/
  https://docs.codecov.io/docs
  https://www.appveyor.com/docs/

本文链接:https://www.cnblogs.com/selimsong/p/9398738.html

好代码是管出来的——使用GitHub实现简单的CI/CD的更多相关文章

  1. 利用jenkens+github实现简单的CI/CD

    一  获取github accessToken 依次点击 settings----> Developer settings --->Personal access tokens  到这里如 ...

  2. Github Packages和Github Actions实践之CI/CD

    概述 Github在被微软收购后,不忘初心,且更大力度的造福开发者们,推出了免费私有仓库等大更新.近期又开放了packages和actions两个大招,经笔者试用后感觉这两个功能配合起来简直无敌. G ...

  3. 给大家推荐一款高大上的代码高亮插件(sublime,github风格)——highlight.js

    经常在一些大神博客里面看到非常好看的高亮代码,有sublime风格,GitHub风格等等.毫无疑问,好的高亮代码插件可以不仅仅让你的博文显得更高大上,更重要的是舒适的阅读体验.经过我在网上的一番搜罗, ...

  4. Git学习(2)-使用Git 代码将本地文件提交到 GitHub

    上次随笔写到git的安装和运用命令窗口创建本地版本库,这次主要讲一下用git代码将本地文件提交到GitHub上. 前提是有一个GitHub账号. 1.创建一个新的版本库,进入到你本地项目的根目录下(我 ...

  5. 使用pycharm开发代码上传到GitLab和GitHub

    使用pycharm开发代码上传到GitLab和GitHub 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我这里主要是针对局域网的自减的GitLab服务器,python开发工程师如 ...

  6. 将本地的代码推送到公网的github账号去

    将本地的代码推送到公网的github账号去 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近工作上需要用到github账号,拜读了一位叫廖雪峰的大神的文档,把git的前世今生说的 ...

  7. iOS:使用Github托管自己本地的项目代码方式二(客户端方式: Github Desktop)

    管理代码的地方主要有:Github(国外流行).CocoaChina.Cocoa4App.中国开源社区.CSDN.博客园.简书等等..... 前面已经介绍了如何使用命令行和Xcode将本地代码上传到G ...

  8. github:当你想要使用VSCODE开心提交代码时,出现Git:git@github.com:Permission denied(publickey)解决方案

    当你想要使用VSCODE开心提交代码时,出现Git:git@github.com:Permission denied(publickey)弹框 图片: 原因:电脑公钥(publickey)未添加至gi ...

  9. API Studio 5.1.2 版本更新:加入全局搜索、支持批量测试API测试用例、读取代码注解生成文档支持Github与码云等

    最近在EOLINKER的开发任务繁重,许久在博客园没有更新产品动态了,经过这些日子,EOLINKER又有了长足的进步,增加了更多易用的功能,比如加入全局搜索.支持批量测试API测试用例.读取代码注解生 ...

随机推荐

  1. .net Lambda表达式与Linq (LINQ TO object)

    Lambda表达式,是用来写匿名方法的. 在委托用得比较多,因为委托是传递方法的.   定义几个委托: public delegate void DoNoThing();//无参无返回值   publ ...

  2. arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)

    你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...

  3. 事务及其特性ACID

    一.事务的定义 事务是一组单元化的操作,这组操作可以保证要么全部成功,要么全部失败(只要有一个失败的操作,就会把其他已经成功的操作回滚). 一般所说的数据库事务,它是访问并可能更新数据库中各种数据项的 ...

  4. Ambari REST API 使用介绍 - How To: Use Swagger with Ambari (Explore Ambari REST)

    How To: Use Swagger with Ambari (Explore Ambari REST) Article Note : This feature is available from ...

  5. Linux集群时间同步方法

    方法1.ntp  平滑同步时间 (一)确认ntp的安装 1)确认是否已安装ntp [命令] rpm –qa | grep ntp 若只有ntpdate而未见ntp,则需删除原有ntpdate.如: n ...

  6. canvas百分比加载动画

    window.onload = function(){ var canvas = document.getElementById('canvas'), //获取canvas元素 context = c ...

  7. 0. VIM 系列 - 源码升级最新版本vim

    卸载原来的vim: $ sudo apt-get remove --purge vim $ suso apt-get clean 下载最新版本源码: $ git clone https://githu ...

  8. Python后台开发Django( 模板 与 值匹配 )

    模板文件(templates) 在setting.py中,设置模板存放位置 在APP中view的使用 from django.shortcuts import render #导入 def homex ...

  9. qml demo分析(maroon-小游戏)

    1.效果展示 这篇文章我还是分析一个qt源码中的qml程序,程序运行效果如下图所示. 图1  游戏开始 图2  游戏中 2.源码分析 这个游戏的源码文件比较多,为了能更清楚的了解整个代码,我先整体分析 ...

  10. ASP.NET Core WebApi中使用FluentValidation验证数据模型

    原文链接:Common features in ASP.NET Core 2.1 WebApi: Validation 作者:Anthony Giretti 译者:Lamond Lu 介绍 验证用户输 ...