引言:为什么CI/CD对Kotlin项目至关重要
\n在现代Kotlin开发中,无论是基于Ktor的后端、Android应用还是多平台项目,手动执行重复性操作(构建、运行测试、代码风格检查)不仅浪费时间,而且容易出错。CI/CD(持续集成/持续部署)通过自动化从提交到生产环境的整个流程解决了这一问题。
\nGitHub Actions是一个内置的自动化工具,非常适合Kotlin项目。它允许您直接在仓库中创建流水线,无需第三方服务。在本文中,我们将详细介绍如何使用GitHub Actions为Kotlin配置完整的CI/CD,从基础构建到部署。
\n\n1. GitHub Actions与Kotlin基础
\nGitHub Actions基于工作流(workflow)运行——即定义步骤顺序的YAML文件。每个工作流由触发器(push、pull request、schedule)启动,并在runner的虚拟环境中执行。
\n对于Kotlin项目,标准技术栈包括:
\n- \n
- Gradle 或 Maven —— 构建系统; \n
- JUnit / Kotest —— 测试框架; \n
- Detekt / ktlint —— Kotlin代码检查工具。 \n
第一步是在仓库根目录下创建文件 .github/workflows/ci.yml。我们来看一个用于构建和测试的最小配置。
1.1 基础构建与测试
\n从一个简单的流水线开始,该流水线在每次推送到main分支或创建pull request时触发:
\nname: CI for Kotlin\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v3\n - name: Set up JDK 17\n uses: actions/setup-java@v3\n with:\n java-version: '17'\n distribution: 'temurin'\n - name: Grant execute permission for gradlew\n run: chmod +x gradlew\n - name: Build with Gradle\n run: ./gradlew build\n - name: Run tests\n run: ./gradlew test\n这段代码执行以下操作:克隆仓库,安装JDK 17(Kotlin 1.9+的推荐版本),使gradlew可执行,执行构建并运行测试。如果测试失败,流水线将停止并报错。
2. 高级配置:代码检查、缓存与构建矩阵
\n基础配置很好,但对于实际项目,还需要更多。我们将添加使用Detekt进行代码风格检查以及Gradle依赖缓存以加速运行。
\n\n2.1 Gradle缓存
\n没有缓存时,每次运行都会重新下载依赖,这可能需要2-5分钟。使用内置缓存:
\n- name: Cache Gradle packages\n uses: actions/cache@v3\n with:\n path: |\n ~/.gradle/caches\n ~/.gradle/wrapper\n key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}\n restore-keys: |\n ${{ runner.os }}-gradle-\n\n2.2 使用Detekt进行代码检查
\n添加一个代码检查任务。Detekt可以通过Gradle插件运行:
\n- name: Run Detekt\n run: ./gradlew detekt\n如果Detekt发现违规,流水线将以错误结束。这确保了“脏”代码不会进入仓库。
\n\n2.3 构建矩阵(Matrix Build)
\n如果您的项目支持多个Kotlin或JDK版本,请使用矩阵。这可以在不重复代码的情况下检查兼容性:
\njobs:\n build:\n strategy:\n matrix:\n java: [11, 17, 21]\n kotlin: [1.9.0, 2.0.0]\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - name: Set up JD