前言

各位读者,新年快乐,我是过了年匆忙赶回上海努力搬砖的蛮三刀。

Github之前更新了一个Action功能(应该是很久以前了),可以实现很多自动化操作。用来替代用户自己设置的自动化脚本(比如:钩子+Jenkins)。

由于平时根本不会有需求用到它,毕竟平时都在用公司的CI/CD流程,所以一直没有机会玩Action。

借着春节放假,就自己写个小Demo体验一下。

本文通过实现一个提交代码后自动执行Junit单元测试并输出测试报告的自动化流程小Demo,来快速上手Github Action。

Github Action 是什么?

如果你对Github Action完全没有概念,我推荐先去看一下CI/CD(持续集成/持续交付)的概念:

https://www.redhat.com/zh/topics/devops/what-is-ci-cd

Github Action官方文档中对自身的定义:

在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

用人话说,就是你可以给你的代码仓库部署一系列自动化脚本,在你进行了提交/合并分支等操作后,自动执行脚本。

阮一峰Github Action指南中的介绍:

大家知道,持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。

很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。

如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。这就是 GitHub Actions 最特别的地方。

GitHub Actions 有一些自己的术语:

  • workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
  • job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
  • step(步骤):每个 job 由多个 step 构成,一步步完成。
  • action (动作):每个 step 可以依次执行一个或多个命令(action)。

看这些介绍和定义,其实比较枯燥,我们直接来看代码实现,在代码中来理解这些定义和指令。

快速上手

给仓库创建新文件夹.github/workflow

首先,用你自己的任意GitHub仓库,在仓库内添加文件夹.github/workflow 或者.github/workflows

一个库可以有多个 workflow 文件。GitHub 只要发现.github/workflows目录里面有.yml文件,就会自动运行该文件。

撰写你的workflow

一个yml脚本便是Action的核心了,我们新建一个blank.yml,内容如下:

我在代码里做了一些注释,帮助大家理解每个指令的含义。

整个脚本大致的流程如下:

  • 指定在push或者pull request时触发脚本执行
  • 拉取ubuntu最新版的镜像
  • 缓存Maven依赖目录,避免每次都下载全量依赖包,加快执行速度
  • 安装Java8
  • 指定pom.xml文件路径,随后用Maven编译项目
  • 运行Junit单元测试

给项目撰写单元测试代码

ok,写完脚本,我们需要来编写一些测试代码,让Junit有事可做。

我使用了自己的一个仓库,上面有完整的action脚本和测试类代码,供参考:

https://github.com/qqxx6661/awesome-utils

这是一个Maven仓库,我们在test文件夹内加入测试代码。

上面的测试代码测试的是下面的一个静态方法:

提交代码,触发Github Action执行

将代码commit并push后,点开你的仓库主页,点击Action标签:

可以看到已经有了执行信息。

接着看下我们的Action到底有没有执行,点开Action标签,已经发现了Junit:

可以进行脚本代码的在线编辑:

点进本次commit执行的记录,可以看到,action顺利完成了几个步骤:

点开Maven的构建日志,可以看到我们第一次跑action,所有的依赖还是即时下载的:

单元测试运行的日志输出正常:

为了试验Maven的依赖包是否能够使用到缓存,我们再写几个单元测试,然后commit:

可以看到,新的action日志里直接开始了编译,不再需要下载全量的包:

单元测试页成功执行:

至此,我们的简易入门教程便结束了。

还有很多功能等待探索

当然,这还只是Action的冰山一角,其能做的事情远不止于此:

  • 编译打包代码
  • 自动上传至公有云/App容器
  • 单元测试/代码覆盖率测试/文档同步/发布版本

等着你们的探索。

参考

https://docs.github.com/cn/actions/guides/building-and-testing-python#publishing-to-package-registries

http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html

关注我

我是一名奋斗在一线的互联网后端开发工程师。

平时主要关注后端开发,数据安全,边缘计算等方向,欢迎交流。

各大平台都能找到我

原创文章主要内容

  • 后端开发实战
  • 后端技术面试
  • 算法题解/数据结构/设计模式
  • 生活感悟

个人公众号:后端技术漫谈

如果文章对你有帮助,求各位大佬点赞支持一下,你的点赞和在看是我更新的动力~

Github Action 快速上手指南的更多相关文章

  1. Rancher 快速上手指南操作(1)

    Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...

  2. UnityShader快速上手指南(三)

    简介 这一篇还是一些基本的shader操作:裁剪.透明和法向量的应用 (纠结了很久写不写这些,因为代码很简单,主要是些概念上的东西) 先来看下大概的效果图:(从左到右依次是裁剪,透明,加了法向量的透明 ...

  3. [转]Rancher 快速上手指南操作(1)

    本文转自:http://www.cppblog.com/zhiyewang/archive/2016/03/17/213053.aspx Rancher 快速上手指南操作(1)该指南知道用户如何快速的 ...

  4. Markdown快速上手指南

    Markdown快速上手指南 1.Markdown介绍 markdown可以实现快速html文档编辑,格式优没,并且不需要使用html元素. markdown采用普通文本的形式,例如读书笔记等易于使用 ...

  5. UnityShader快速上手指南(一)

    简介 引言 其实网上有很多shader教程,但是大概看了下,也不知是网上各位大神已经脱离了代码层面的高度还是啥原因.貌似没有找到从代码方面作为入门讲解的,导致了shader对于苦逼程序员入门有一定要求 ...

  6. Mac快速上手指南

    上周刚入手了2017版MacBookPro,预装macOS High Sierra.第一次接触Mac系统,经过一周的使用,简单总结下与Windows相比最常用的功能,快速上手. 1.Mac键盘实现Ho ...

  7. UnityShader快速上手指南(二)

    简介 前一篇介绍了如果编写最基本的shader,接下来本文将会简单的深入一下,我们先来看下效果吧 呃,gif效果不好,实际效果是很平滑的动态过渡 实现思路 1.首先我们要实现一个彩色方块 2.让色彩动 ...

  8. IDEA 快速上手指南(全配置)(Day_23)

    Idea快速入门指南 1.安装 1.1.安装 我们使用的是2017.3.4版本: 双击打开, 选择一个目录,最好不要中文和空格: 然后选择桌面快捷方式,请选择64位: 然后选择安装: 开始安装: 然后 ...

  9. NodeJS 基于 Dapr 构建云原生微服务应用,从 0 到 1 快速上手指南

    Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架.Dapr 确保开发人员专注 ...

随机推荐

  1. SpringMVC 中 @ControllerAdvice 注解

    SpringMVC 中 @ControllerAdvice 注解 1.@ControllerAdvice 1.1 全局异常处理 1.2 全局数据绑定 1.3 全局数据预处理 原文地址: 江南一点雨:S ...

  2. Flink-v1.12官方网站翻译-P010-Fault Tolerance via State Snapshots

    通过状态快照进行容错 状态后台 Flink管理的键控状态是一种碎片化的.键/值存储,每项键控状态的工作副本都被保存在负责该键的任务管理员的本地某处.操作员的状态也被保存在需要它的机器的本地.Flink ...

  3. IDLE怎么将主题修改成Darcula样式?

    摘要:每个人都有自己心中理想的编辑器主题,我更倾向于Darcula,你们呢? 想必没用过Darcula主题的朋友,会好奇它是何方神圣?   是不是很赏心悦目,代码这冰冷的东西也变得生龙活虎? 我最近在 ...

  4. easyx学习心得

    前几天算法课的实验要求实现可视化,搞了半天没动咋实现,然后有大佬说用easyx,,,我寻思着也没教这玩意咋用啊.然后很烦躁的上网找教程,发现没有教怎么使用的,都说有一本说明书(链接),自己调用函数就可 ...

  5. Java 窗口 小马图像窗口

    写在前面: eclipse接着爽到 全是借鉴的,东改西改,而且记不住原网址了 两个月前写的,忘了思路,嗯,It just works 运行效果: 图像随便选(放到*jar所在目录*\\pictures ...

  6. Codeforces Round #345 (Div. 1) A. Watchmen (数学,map)

    题意:给你\(n\)个点,求这\(n\)个点中,曼哈顿距离和欧几里得距离相等的点对数. 题解: 不难发现,当两个点的曼哈顿距离等于欧几里得距离的时候它们的横坐标或者纵坐标至少有一个相同,可以在纸上画一 ...

  7. 洛谷 P6225 [eJOI2019]异或橙子 (树状数组)

    题意:有\(n\)个数,起始值均为\(0\),进行\(q\)次操作,每次输入三个数,如果第一个数为\(1\),则将第\(i\)个数修改为\(j\),如果为\(2\),则求区间\([l,r]\)内的所有 ...

  8. JavaScript——七(继承)

    一. 这个样子这个student的类型是person,这个样子写虽然继承了,但是是把父类的属性继承在了student的原型上 为了使student的类型改成他自己就需要加一句"student ...

  9. 牛客编程巅峰赛S1第3场 - 青铜&白银 A.位数求和

    题意:求所有\(n\)位数每位之和等于\(m\)的数的和. 题解:数据范围非常小,我们可以直接暴力枚举\(t\)到\(10*t\)的所有数字,逐位分解判断即可. 代码: class Solution ...

  10. .net core mvc 获取Web根目录和内容根目录的物理路径

    从ASP.NET Core RC2开始,可以通过注入 IHostingEnvironment 服务对象来取得Web根目录和内容根目录的物理路径,如下所示: using Microsoft.AspNet ...