【壹个小技巧】一看就会的CI/CD :Github Actions

什么是 CI/CD?

我这里先不说概念,先说一个平时开发的场景问题:

我们平时开发一个项目,经常会遇到这些“”问题:

就是如何保证自己的项目是正确的,至少拿给别人的时候,可以编译运行的?

或者说多人开发的时候,如何保证提交没有编译冲突?

或者如何做到快速自动化测试?

最后又是如何在服务器自动化部署的呢?

当然,我们这里不说平时公司的正规方案,肯定是一大推的集成方案。咱们就说一下平时自己是如何做的:

基本都是本地调试调试看看,或者是F6运行一下,然后提交,提交的时候,还不敢保证和本地的一样,可能拷贝的时候拷贝错了,或者少拷贝了一两个,然后就很尴尬。

那这个时候,如果有一个 Job 能够自动的将我们每次提交的代码做自动化编译,然后它自己进行测试,最后甚至可以自己去部署,嗯,就很美啦!

还真有!那这个时候就来说说常见的方案 —— CI/CD

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题。

具体而言,CI/CD 在整个应用生命周期内(从集成和测试阶段,到交付和部署)引入了持续自动化和持续监控。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。

             —— 资料来源于网上

它有以下几点好处:

持续集成持续交付持续部署持续测试

这个时候,你可能你会说,『妈耶,你今天不会讲这个吧,这么复杂,就算是明白了,我自己平时开发肯定用不到呀,甚至说自己开发很难去搞这么多东西,我平时只有 Github 一个代码管理,这么复杂,肯定搞不定』,没关系!我们在 Github 上也可以简单的实现 CI/CD 操作

Github 上如何进行 CI/CD 的操作?

我的 Blog.Core 项目在 Github 上也开源了一年多了,目前效果基本还行,每天少不了的就是被各种问:

群主,你的项目没有调试么?我本地下载下来都编译不通过?!

群主,你的项目能直接在服务器上部署么,我拷贝了发现运行不起来?!

等等,诸如此类。

后来我没办法了,就在Github上增加了一个第三方的插件—— Appveyor ,来简单的实现了 CI/CD 操作,通过注册账号,然后各种配置以后,可以实现,每次向 Github 提交,会自动编译,然后生成报告,而且他们第三方还提供了一个徽章,可以放到 README 里,很贴心,一直用着,(如果你也想用这个,可以留言,或者群里问我,我写个小步骤,或者自己网上随便百度百度吧,很简单,因为我以后不用这个了,具体看下文 ????)

但是,就在今天,我再提交代码的时候,发现爆红了,心情瞬间不爽:

这个肯定不是代码的问题,因为我都没有修改代码,怎么办呢,查看日志吧,这个不重要就不说了,反正就是说 Appveyor 地址什么的无法访问了,行吧,那我就不用你啦!

正在考虑是否要放弃的时候,想起来之前 Github 官方发的一个邮件:

大概意思是说,Github 官方将在十一月13号以后新增两个功能,其中一个就是 Github Actions,可以支持CI/CD了,哇塞!自家的东西,肯定想用,而且也是微软搞的,那要试一试!

使用 Github Actions 实现CI/CD

这个过程其实就很简单了,毕竟 Github 的操作都很人性化的,我们来快速的操作一遍,可以看我下边的步骤,当然可以看官网地址

https://help.github.com/cn/actions/automating-your-workflow-with-github-actions/about-continuous-integration),很人性化的提供了中文翻译:

1、打开我们的 Github 项目,在顶部有一个 Actions 的banner。

2、点击进去,会自动根据项目的内容,进行判断,找到合适的 Workflow 模板。因为我的项目的 NetCore 的,所以这里自动会给我们匹配 .NET Core 的workflow,如果你是其他项目,比如Java、python等,会有不同,当然我们自己也可以自定义模板。

3、点击 Set up this workflow ,可以看到已经有一些 yml 代码了,这个是 YAML 语法,感兴趣的自己研究下,学会基本的就行了,官方的学习地址:

(https://help.github.com/cn/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions)。

比如说,用空格表示代码块,然后用 - 表示数组,用 : 来表示键值对操作等等。

相应的代码操作:注意这里有一个错误,我故意这么写就是为了暴漏这个错误:

name: .NET Core
on: [push]
jobs: build:
runs-on: ubuntu-latest
steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 2.2.108 - name: Build with dotnet run: dotnet build --configuration Release

4、直接将这个文件 submit,可以看到会在 .github 下的 workflows 文件夹下,生成一个dotnetcore.yml 文件。

与此同时,我们的项目已经正式的在后台进行自动编译了,目前是过程中,黄色的圆点:

5、刚刚我说过了,上边官方给我们默认的 workflow 模板有一个错误,也不是错误,就是不太合适的地方,会报错,但是,会有很详细的日志报告,我们来看看:

相信每一个只要开发过 netcore 的都知道这个错误,没错!就是 SDK 的版本不一致导致的,我们只需要改一下那个 .yml 文件中的 dotnet 版本就行了,不懂的请回看。

版本改成 3.0.100 即可。

6、如果Build失败,会通过邮件提醒。

我认为这个特别合理,因为之前用第三方的时候,比如Appveroy,是没有提醒功能的,我们push到Github的时候,只能慢慢的等待,看日志了。但是 Github Actions 提供了发送错误日志的功能:

7、最后可以看到绿色的成功的标志,也会有编译列表!

是不是很方便!而且里边有很详细的日志文档,可以提供一个月,我们可以下载和查看,我们项目中的警告等,也会列出来,很方便:

可以来一个小徽章

上边咱们说完了,但是总感觉少点儿什么,没错,就是没办法实时在 README 页面里,查看编译状态,GitHub 也想到啦,他们提供了一个徽章api:

https://github.com/<OWNER>/<REPOSITORY>/workflows/<WORKFLOW_NAME>/badge.svg

就比如我的是这样的:

[![Build status](https://github.com/anjoy8/blog.core/workflows/.NET%20Core/badge.svg)]()

最终的展示效果:

是不是又简单又很方便的!而且我们点击这个徽章,还可以看到之前的提交记录和详细日志:

只有这么多了么?

当然不是,Github Actions 还有很多很多的内容,值得我们去学习和研究,比如这些:

本文也仅仅是一个小技巧,详细在微软的带领下,Github也会越来越好!

更多精彩小技巧,欢迎联系我哟。

???? 这里是 Github Actions 官网地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hyper-V虚拟机自动添加检查点和导出备份

背景说明笔者使用Hyper-V在内部搭建了大量的环境和系统&#xff0c;比如&#xff1a;k8s内部集群Azure Devops Server(TFS>VSTS>Azure Devops Server)SharePoint…大部分基本上都是用于内部研究、测试等场景&#xff0c;但是为了避免很多麻烦&#xff0c;必要的备份还是必…

哈夫曼树详解

一、哈夫曼树的定义 &#xff08;1&#xff09;简单路径长度 所谓树的简单路径长度&#xff0c;是指从树的跟节点到每个节点的路径长度之和。 完全二叉树是简单路径长度更小的二叉树。 &#xff08;2&#xff09;加权路径长度 所谓树的加权路径长度&#xff0c;是指树中所以带…

深入理解.NET Core的基元(三) - 深入理解runtimeconfig.json

原文&#xff1a;Deep-dive into .NET Core primitives, part 3: runtimeconfig.json in depth作者&#xff1a;Nate McMaster[1]译文&#xff1a;深入理解.NET Core 的基元&#xff08;三&#xff09; - 深入 runtimeconfig.json作者&#xff1a;Lamond Lu前情回顾深入理解.NE…

B-树、B+树、B*树详解

一、B树 B树是一种多路搜索树&#xff08;并不是二叉的&#xff09;&#xff0c;性质如下&#xff1a; 1、定义任意非叶子结点最多只有M个儿子&#xff1b;且M>2&#xff1b; 2、根结点的儿子数为[2, M]&#xff1b; 3、除根结点以外的非叶子结点的儿子数为[M/2, M]&#…

微软正在开发基于Rust的安全编程语言

此前&#xff0c;微软表示正探索将 Rust 作为 C 和 C 的安全替代方案&#xff0c;并且也对外展示了使用 Rust 重写 Windows 组件的体验。根据微软的说法&#xff0c;Rust 是一种从根本上考虑安全性的编程语言&#xff0c;他们将尝试使用 Rust 重写各种产品&#xff0c;因为在过…

堆树(最大堆、最小堆)详解

一、堆树的定义 堆树的定义如下&#xff1a; &#xff08;1&#xff09;堆树是一颗完全二叉树&#xff1b; &#xff08;2&#xff09;堆树中某个节点的值总是不大于或不小于其孩子节点的值&#xff1b; &#xff08;3&#xff09;堆树中每个节点的子树都是堆树。 当父节点的键…

HttpClientFactory日志不好用,自己扩展一个?

前言.NetCore2.1新推出HttpClientFactory工厂类&#xff0c; 替代了早期的HttpClient&#xff0c;并新增了弹性Http调用机制 (集成Policy组件)。替换的初衷还是简单说下&#xff1a;① using(var client new HttpClient()) 调用Dispose()方法&#xff0c;并不会很快释放底层So…

树、二叉树简介

一、树的定义 树是由n&#xff08;n>1&#xff09;个有限节点组成一个具有层次关系的集合&#xff0c;它有如下特点&#xff1a; 1、每个节点有零个或多个子节点&#xff1b; 2、没有父节点的节点称为根节点&#xff1b; 3、每一个非根节点有且只有一个父节点&#xff1b; 4…

Quartz.net定时任务的使用及获取正在运行的JOB

定时任务管理类实现了如下功能&#xff1a;1、对定时任务进行管理 2、创建定时任务&#xff0c;需要给定时任务一个job的名称 3、判断给定的job的任务是否已存在 4、停止定时任务的功能namespace MyUKD.Quartz{ public class QuartzSchedulerMgr { private static readonly ILo…

漫谈认证与授权

漫谈认证与授权Intro认证与授权一直以来都是很多人在讨论的话题&#xff0c;之所以想这次谈一谈认证和授权&#xff0c;主要是因为最近看到许多文章都把认证和授权混为一谈&#xff0c;把认证方式当作是授权方式。所以想写篇文章谈谈我眼中的认证与授权。Authentication什么是认…

【译】gRPC vs HTTP APIs

本文翻译自 ASP.NET Blog | gRPC vs HTTP APIs&#xff0c;作者 James&#xff0c;译者 Edison Zhou。现在&#xff0c;ASP.NET Core使开发人员可以构建gRPC服务。gRPC是一个远程过程调用框架&#xff0c;专注于高性能和开发人员的生产力。ASP.NET Core 3.0中集成了gRPC&#x…

.NET Core 3.0 的新改进:针对分布式应用程序的故障诊断和监控

由于分布式应用是由多个组件组成的&#xff0c;且这些组件往往是由不同的团队拥有和操作&#xff0c;所以在与应用程序发生交互时&#xff0c;就会需要跨多个组件执行代码的分布式跟踪。如果用户遇到了问题&#xff0c;想要确定是哪个组件出现了差错&#xff0c;基本就是一件不…

【翻译】.NET Core3.1发布

.NET Core3.1发布我们很高兴宣布.NET Core 3.1的发布。实际上&#xff0c;这只是对我们两个多月前发布的.NET Core 3.0的一小部分修复和完善。最重要的是.NET Core 3.1是长期支持&#xff08;LTS&#xff09;版本&#xff0c;并且将支持三年。和过去一样&#xff0c;我们希望花…

JVM(1)——JVM内存分区

一、JVM简介 JVM&#xff0c;即Java虚拟机&#xff08;Java Virtual Machine&#xff09;&#xff0c;一种能够运行Java bytecode的虚拟机&#xff0c;是Java实现跨平台的基础。 引入Java语言虚拟机后&#xff0c;Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚…

使用Azure Pipelines从GitHub发布NuGet包

[本文目录]ps: 阅读本文大概需要20分钟欢迎大家点击上方公众号链接关注我&#xff0c;了解新西兰码农生活什么是 YAML?name/value 名称/值collections 集合multiple data types 复合数据类型comments 注释Pipelines 的 YAML 结构在 Azure DevOps Pipelines 中创建第一个任务为…

JVM(2)——JVM类加载机制

一、JVM类加载机制简介 虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这就是虚拟机的类加载机制。 在Java语言里面&#xff0c;类型的加载和连接过程都是在程序运…

PYPL 12月榜单发布,编程语言、IDE与数据库市场如何?

PYPL&#xff08;PopularitY of Programming Language&#xff0c;编程语言流行指数&#xff09;12 月份的榜单已经发布了。PYPL 是非常流行的参考指标&#xff0c;其榜单数据的排名均是根据榜单对象在 Google 上相关的搜索频率进行统计排名&#xff0c;原始数据来自 Google Tr…

JVM(3)——JVM类加载器

一、类加载器简介 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现&#xff0c;以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块被称为“类加载器”。 类加载器虽然只用于实现类的…

.NET Core应用框架AA介绍(二)

AA的开源地址https://github.com/ChengLab/AAFrameWork AA框架是一个基础应用框架&#xff0c;是建立在众多大家熟知的流行工具之上并与之集成。比如&#xff1a;ASP.NET Core、Automapper、Dapper、Dapper-FluentMap、RabbitMQ、Redis、MassTransit、Log4net等等大家可以很方便…

JVM(4)——对象访问

一、对象创建过程在Java语言中&#xff0c;对象是如何访问的呢&#xff1f;对象访问在Java语言中无处不在&#xff0c;是最普通的程序行为&#xff0c;但即使是最简单的访问&#xff0c;也会涉及Java虚拟机栈、Java堆区、方法区。 对于下面这行代码&#xff0c; Object obj ne…