写点什么

Github Action 快速上手指南

用户头像
Zhendong
关注
发布于: 2021 年 02 月 20 日
Github Action 快速上手指南

前言


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


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


关注我


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


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


各大平台都能找到我



原创文章主要内容


  • 后端开发实战

  • 后端技术面试

  • 算法题解/数据结构/设计模式

  • 生活感悟


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



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


发布于: 2021 年 02 月 20 日阅读数: 17
用户头像

Zhendong

关注

还未添加个人签名 2020.07.17 加入

还未添加个人简介

评论

发布
暂无评论
Github Action 快速上手指南