Kotlin 与 GitHub Actions 的 CI/CD 入门
在现代开发中,构建、测试和部署流程的自动化已成为专业方法中不可或缺的一部分。对于 Kotlin 项目,无论是 Android 应用、基于 Ktor 的后端服务还是多平台库,配置 CI/CD(持续集成 / 持续部署) 都能显著缩短产品交付时间并降低错误风险。
GitHub Actions 是一个强大且灵活的工具,内置于 GitHub 生态系统中。它允许您创建自定义流水线,这些流水线可在推送、创建拉取请求或按计划自动触发。在本文中,我们将详细介绍 Kotlin 的 CI/CD 完整配置流程:从基本代码检查到自动部署。
GitHub Actions 基础:结构与语法
在深入 Kotlin 特定内容之前,理解 GitHub Actions 的基本概念很重要。流水线在 YAML 文件中描述,这些文件存储在您仓库的 .github/workflows/ 目录中。
工作流程的关键元素
- Event(事件): 触发流水线的触发器(push、pull_request、release 等)。
- Job(任务): 在同一 runner(虚拟机)上执行的一组步骤。
- Step(步骤): 具体操作——执行命令、运行脚本或使用现成的 action。
- Runner: 执行环境(Ubuntu、Windows、macOS)。
文件 kotlin-ci.yml 的基本结构:
name: Kotlin CI
on:
push:
branches: [ main, develop ]
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'
- name: Build with Gradle
run: ./gradlew build
Kotlin 的 CI 配置:构建、测试和代码检查
第一个也是最重要的阶段是持续集成。它确保每一段新代码都能通过编译并且不会破坏现有测试。
Gradle 依赖缓存
为了加速构建,务必使用缓存。没有缓存,每次运行都会重新下载所有库。
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
运行测试和代码风格检查
添加运行单元测试和 linter(detekt 或 ktlint)的步骤。这有助于保持代码质量。
- name: Run tests
run: ./gradlew test
- name: Run linter
run: ./gradlew detekt
Kotlin 项目的完整 CI 工作流程示例
jobs:
test:
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'
- name: Cache Gradle
uses: actions/cache@v3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
- name: Build and test
run: ./gradlew check
持续部署:Kotlin 应用的自动部署
成功集成之后,就进入了部署阶段。对于 Kotlin 项目,这可能意味着将库发布到 Maven Central、在服务器上部署后端或为 Android 构建 APK。
部署基于 Ktor 的后端服务
假设我们有一个基于 Ktor 框架的 Kotlin 应用。我们希望自动