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>

总结

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

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

相关推荐
javadaydayup11 分钟前
MyBatis 映射值报错的罪魁祸首竟然是 Lombok 的 @Builder?
后端
一 乐13 分钟前
景区管理|基于springboot + vue景区管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
superman超哥17 分钟前
Rust 减少内存分配策略:性能优化的内存管理艺术
开发语言·后端·性能优化·rust·内存管理·内存分配策略
BingoGo18 分钟前
CatchAdmin 2025 年终总结 模块化架构的进化之路
后端·开源·php
C_心欲无痕34 分钟前
git - git push同时推送GitHub和Gitee两个远程仓库
git·gitee·github
superman超哥35 分钟前
Rust 并发性能调优:线程、异步与无锁的深度优化
开发语言·后端·rust·线程·异步·无锁·rust并发性能
superman超哥36 分钟前
Rust Trait 对象与动态分发权衡:性能与灵活性的深度权衡
开发语言·后端·rust·rust trait·对象与动态发布·性能与灵活性
独断万古他化41 分钟前
【Spring Web MVC 入门实战】实战三部曲由易到难:加法计算器 + 用户登录 + 留言板全流程实现
java·后端·spring·mvc
FIT2CLOUD飞致云1 小时前
汇报丨1Panel开源面板2025年终总结
linux·运维·服务器·开源·github·1panel
while(1){yan}1 小时前
Spring日志
java·后端·spring