阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用GitHub实现简单的CI/CD

479次阅读
没有评论

共计 3961 个字符,预计需要花费 10 分钟才能阅读完成。

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

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

  • CI&CD
  • 常用的持续集成工具
  • GitHub 市场简介
  • 使用 AppVeyor 实现持续集成
  • 使用 Codecov 显示代码覆盖率
  • 小结

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 实现简单的 CI/CD

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

使用 AppVeyor 实现持续集成

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

使用 GitHub 实现简单的 CI/CD

2. 添加项目:

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

添加需要的仓库:

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

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

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

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

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

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

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

自动部署的 Release 内容:

使用 GitHub 实现简单的 CI/CD

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

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

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

效果:

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

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

使用 Codecov 显示代码覆盖率

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

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

2. 修改 appveyor.yml 文件:

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

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

使用 GitHub 实现简单的 CI/CD

 

  使用 GitHub 实现简单的 CI/CD

结果:

使用 GitHub 实现简单的 CI/CD

小结

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

本��永久更新链接地址:https://www.linuxidc.com/Linux/2018-10/154824.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3961字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7974338
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...