github action初体验实现maven项目自动ci test

这里是weihubeats ,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

什么是 github action

GitHub Actions是GitHub提供的一种持续集成/持续交付(CI/CD)工具,它可以帮助开发者自动化软件开发流程中的各种任务,如构建、测试、部署等。通过在代码仓库中配置和定义工作流程(Workflow),GitHub Actions可以在特定的事件触发时执行一系列的操作

这么解释有点官方。最简单只直观的解释就是我们每次提交一些大型开源项目的时候,就会有一个这个玩意

就是你定义一些规则,比如在给master 提交代码或者pr的时候就触发一些单元测试之类的ci等。

官方文档

一些概念

  • workflow(工作流程):Workflow是一组自动化任务的集合,定义了在特定事件发生时应该执行的操作。它由一个YAML文件定义,包括触发事件、执行的任务、依赖关系等
  • job(任务):Job是Workflow中的一个独立执行单元,可以包含一系列的任务。一个Workflow可以包含一个或多个Job,它们可以并行或串行执行
  • step(步骤):Step是Job中的一个独立任务,它定义了要执行的操作,如构建代码、运行测试、部署应用等。一个Job可以包含一个或多个Step,它们按顺序执行
  • action(动作):Action是可重用的任务单元,可以在Workflow中被引用和执行。它可以是自定义的脚本、命令,也可以是由GitHub社区或第三方提供的现成的动作
  • Event(事件):Event是触发Workflow执行的事件,如代码提交、Pull Request创建、Issue更新等。Workflow可以根据不同的事件触发执行不同的操作
  • Runner(运行器):Runner是执行Workflow中任务的环境,可以是GitHub托管的虚拟机或用户自己搭建的物理机或虚拟机。Runner负责执行Workflow中定义的任务

实现提交pr自动触发运行单元测试

本次我们的目标是实现一个提交pr自动触发运行单元测试的功能

项目源码:github.com/weihubeats/...

创建工作流目录

github 自己仓库创建一个.github/workflows目录。

这样在.github/workflows下的yml文件会被自动识别为action,然后会根据我们定义为规则运行这个action

创建junit workflow

  • junit_test.yml
yml 复制代码
# action name
name: Test with Junit

# 什么时候触发这个workflow
on:
  # push 到master分之的时候 这里可以指定多个
  push:
    branches:
      - master
  # pull request 到master分之的时候, 这里可以指定多个
  pull_request:
    branches:
      - master

# 一个workflow可以由多个job组成,多个job可以并行运行
jobs:
  junit:
    strategy:
      matrix:
        # 指定jdk 版本。可以指定多个版本 比如[8,11,17]
        java: [11]
        # 指定运行 os 版本 也是多个
        os: [ 'windows-latest', 'ubuntu-latest' ]
    # 运行环境,这里就是上面定义的多个 os
    runs-on: ${{ matrix.os }}

    steps:
      # 将job的工作目录指向$GITHUB_WORSPACES checkout@v2比较旧不推荐使用
      - name: Checkout codes
        uses: actions/checkout@v3
      # 设置jdk环境
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}
      # 设置maven 仓库缓存 避免每次构建时都重新下载依赖
      - name: Cache local Maven repository
        uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      - name: Test with Maven
        run: mvn clean test -B -U

不带注释的源码可以在这里下载:github.com/weihubeats/...

测试效果

这里我简单写一个pr然后提交看会不会自动触发action

可以看到自动触发了maven的test

我这里故意写一个不会通过的单测

提交后马上出发了test。这里有代码冲突我们先不管

可以看到马上就是ci test失败了。这样就能增加我们项目稳定性

注意maven-surefire-plugin不要配置<skipTests>true</skipTests>

总结

总的来说不管是开源项目还是私有项目,想要项目更稳定,可能还是需要各种单元测试来保证的。

这次我们只是配置了单元测试,实际有大量场景需要集成测试,后续有空再研究下集成测试吧

相关推荐
来自旧金山的勇士27 分钟前
WSL->Ubunut安装Redis
后端
大葱白菜29 分钟前
Java Set 集合详解:从基础语法到实战应用,彻底掌握去重与唯一性集合
java·后端
大葱白菜30 分钟前
Java Map 集合详解:从基础语法到实战应用,彻底掌握键值对数据结构
java·后端
小猪乔治爱打球36 分钟前
[Golang修仙之路] 算法专题:回溯(递归)
后端·面试
昵称为空C44 分钟前
SpringBoot数据存储时区选择,符合国际化和特定时区方案
spring boot·后端
小诸葛的博客1 小时前
istio如何自定义重试状态码
云原生·github·istio
MrLi01041 小时前
在git中同时配置gitcode和github访问权限
git·github·gitcode
小怪兽会微笑1 小时前
如何上传github(解决git的时候输入正确的账号密码,但提示认证失败)
git·github
ldj20202 小时前
SpringBoot为什么使用new RuntimeException() 来获取调用栈?
java·spring boot·后端
超龄超能程序猿2 小时前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud