Kotlin 项目的 CI/CD:GitHub Actions 高级应用

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

GitHub Actions 上 Kotlin 项目的高级 CI/CD



自动化构建、测试和部署是现代 Kotlin 应用开发中至关重要的环节。如果您已经掌握了基本的 CI/CD 配置,那么是时候进阶到高级技术了。本文将深入探讨如何充分利用 GitHub Actions 来优化 Kotlin 项目:矩阵构建、智能缓存、并行测试以及灵活的部署。



1. 矩阵构建:在多个版本和操作系统上进行测试



GitHub Actions 最强大的功能之一就是矩阵策略(strategy.matrix)。它允许您使用不同的参数运行同一个工作流。对于 Kotlin 来说,如果您需要支持多个 JVM 版本或目标平台(例如 JVM + Native),这项功能不可或缺。



Kotlin Multiplatform 项目的矩阵构建示例:



name: Matrix Build Kotlinon: [push, pull_request]

jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] java: [11, 17, 21] kotlin-version: [1.9.22, 2.0.0] fail-fast: false # 当某个构建失败时,不停止其他构建

steps: - uses: actions/checkout@v4

- name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: 'temurin'

- name: Validate Gradle wrapper uses: gradle/wrapper-validation-action@v2

- name: Build with Gradle run: ./gradlew build -Dkotlin.version=${{ matrix.kotlin-version }}


建议:

  • 使用 fail-fast: false,这样即使某个组合失败,也不会丢失其他组合的结果。
  • 仅将矩阵限制为相关的版本,以避免浪费不必要的 Actions 运行时间。
  • 对于 Windows,请务必配置正确的 Gradle 路径,并检查换行符(CRLF)。


2. Gradle 和依赖项的智能缓存



基于 Gradle 的 Kotlin 项目在每次运行 CI 时可能会下载数十兆字节的依赖项。如果没有缓存,构建将需要 5-10 分钟,而有了缓存,只需 30-40 秒。请使用内置的缓存操作。



steps:  - uses: actions/cache@v4    with:      path: |        ~/.gradle/caches        ~/.gradle/wrapper        build/      key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}      restore-keys: |        ${{ runner.os }}-gradle-

- name: Build with Gradle run: ./gradlew build --build-cache --no-daemon


高级技巧:

  • 将 gradle.lockfile 的哈希值添加到缓存键中(如果您使用 --write-locks)——这可以确保在依赖项版本更改时缓存失效。
  • 使用 Gradle 提供的 gradle-build-action(操作:gradle/gradle-build-action@v3)——它会自动管理缓存并支持 --build-cache。
  • 不要缓存 ~/.gradle/daemon——这可能会导致不同守护进程版本之间的冲突。


3. 并行测试与动态分片



对于包含数百个测试的大型项目,执行时间可能成为瓶颈。GitHub Actions 允许通过将测试分成多个分片来并行运行。这对于 Kotlin + JUnit 5 尤其有用。



按分片划分测试的示例:



jobs:  test:    runs-on: ubuntu-latest    strategy:      matrix:        shard: [1, 2, 3, 4]  # 4 个并行分片    steps:      - uses: actions/checkout@v4      - name: Set up JDK 17        uses: actions/setup-java@v4        with:          java-version: '17'          distribution: 'temurin'

博客

书籍推荐