Java项目使用GitHub Actions实现CI/CD入门指南
现代软件开发离不开构建、测试和部署流程的自动化。CI/CD(持续集成/持续部署)是一套实践方法,使团队能够快速、安全地将变更交付到生产环境。对于Java项目,最便捷的工具之一是GitHub Actions——无需额外搭建服务器的内置CI/CD系统。
本文将带您逐步为Java应用搭建流水线:从编译、运行测试到发布制品。您将学习如何使用Maven、JUnit和GitHub Actions创建可靠的交付流程。
1. GitHub Actions基础:工作流结构
GitHub Actions基于工作流——存储在.github/workflows文件夹中的YAML格式配置文件。每个工作流包含一个或多个在虚拟机(运行器)上执行的作业。
对于Java项目,典型的工作流包含以下步骤:
- 代码检出 — 克隆仓库
- 设置JDK — 安装所需Java版本
- 缓存 — 缓存Maven/Gradle依赖以加速构建
- 构建与测试 — 编译并运行测试
- 部署 — 发布制品(可选)
我们来看一个Java 17搭配Maven的基础配置示例:
name: Java CI with Maven
on: push: branches: [ "main" ] pull_request: branches: [ "main" ]
jobs: build: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: maven
- name: Build with Maven run: mvn -B package --file pom.xml
- name: Run tests run: mvn test
- name: Upload JAR artifact uses: actions/upload-artifact@v4 with: name: app-jar path: target/*.jar该工作流在每次向main分支推送或发起拉取请求时运行。它会构建项目、运行测试并将JAR文件保存为制品。
2. 进阶配置:测试与代码质量
简单构建只是开始。在实际项目中,控制代码质量至关重要。让我们在工作流中添加静态分析和报告生成的步骤。
首先,集成JaCoCo来测量测试代码覆盖率。在pom.xml中添加插件:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.11</version> <executions> <execution> <goals><goal>prepare-agent</goal></goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals><goal>report</goal></goals> </execution> </executions></plugin>现在,通过添加覆盖率检查并发布报告来更新工作流:
- name: Run tests with coverage run: mvn verify
- name: Upload JaCoCo report uses: actions/upload-artifact@v4 with: name: coverage-report path: target/site/jacoco/您还可以添加诸如Checkstyle或SpotBugs之类的代码检查工具。以下是Checkstyle的示例:
- name: Checkstyle run: mvn checkstyle:check这些步骤将帮助自动识别项目中的问题