1. GitHub Actions 的 workflow/job/step/runner 模型如何组织,actions/cache 与依赖缓存如何加速 Maven/Gradle 构建
请说明 GitHub Actions 中 workflow、job、step 与 runner 的层次组织方式,以及 actions/cache 与本地依赖缓存如何显著加速 Maven 或 Gradle 的构建过程?
- GitHub Actions 的抽象层级:workflow(工作流)→ job(任务)→ step(步骤)→ runner(运行器)
- 本地 ~/.m2 或 ~/.gradle 缓存目录的持久化与命中
- actions/cache 的 key 与 restore-keys 设计
GitHub Actions 中一个 workflow 是仓库 .github/workflows/ 下的 YAML 文件,内含多个 job;job 并行执行,通过 needs 建立依赖;每个 job 运行在独立的 runner 上,由多个 step 顺序组成,step 是执行命令或 action 的最小单元。Maven 构建非常依赖缓存,因为每次编译都要解析依赖并下载到本地仓库。actions/cache 能把 ~/.m2/repository(Maven)或 ~/.gradle/caches(Gradle)缓存到 GitHub 存储,后续 job 通过 restore-keys 复用,避免重复下载第三方依赖。key 的粒度过细(如每次 commit)会导致命中率低,过粗则可能复用陈旧依赖,因此常用 cache: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 使 POM 变化时才重建缓存。
缓存的本质是本地仓库的持久化,Maven 的 -o(离线)、-U(强制更新)与 updatePolicy 共同决定缓存何时失效。仅缓存依赖还不够,还应考虑 Maven 的 -T 并行构建以缩短编译时间。
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- run: mvn -B -ntp package