目录
什么是 GitHub Actions 缓存
在CI/CD的工作流中,GitHub Actions 缓存是一种用来存储中间文件和依赖的机制,可以显著提高构建和测试的速度。通过利用缓存,开发者可以避免每次构建时都从头开始下载依赖和构建资源。
缓存的优势
使用 GitHub Actions 缓存有很多好处:
- 提升性能:通过减少重复下载和构建时间,显著加快CI/CD的执行速度。
- 节省成本:缓存可以减少对网络带宽和API调用的需求,从而降低相关费用。
- 提高稳定性:在构建过程中,缓存提供了一致的依赖环境,避免了由于版本不一致带来的问题。
如何设置缓存
基本语法
使用缓存的基本语法非常简单,可以通过actions/cache
来实现。基本的结构如下:
yaml
-
name: Cache node modules uses: actions/cache@v2 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles(‘**/package-lock.json’) }} restore-keys: | ${{ runner.os }}-node- ${{ runner.os }}-
-
path: 指定要缓存的路径。
-
key: 缓存的唯一标识符,可以通过项目文件的哈希值来生成。
-
restore-keys: 用于定义一个或多个用于恢复缓存的键。这样可以在找不到特定缓存时使用其他键进行恢复。
示例工作流
下面是一个简单的示例工作流,展示了如何在Node.js项目中使用缓存:
yaml name: Node.js CI
on: [push, pull_request]
jobs: build: runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Cache node modules
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
${{ runner.os }}-
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
缓存的失效策略
GitHub Actions中的缓存并不是永恒的。当某些条件满足时,缓存可能会失效:
- 键不匹配:如果缓存的
key
不匹配,则会创建新的缓存。 - 失效时间:缓存会在特定的失效时间后自动删除,具体取决于GitHub的策略。
- 依赖更新:如果
package-lock.json
或其他依赖文件发生变化,缓存会被视为过期。
常见问题
1. GitHub Actions的缓存有什么限制?
GitHub Actions对缓存的大小和数量有限制:
- 每个存储库的缓存大小限制为5GB。
- 每个存储库最多可以拥有 100 个缓存。
2. 如何排查缓存未命中的问题?
如果发现缓存未命中,可以通过以下方法进行排查:
- 确认
key
的生成逻辑是否正确。 - 检查相关文件(如
package-lock.json
)是否发生了变化。 - 查看Actions的运行日志,确保缓存步骤执行成功。
3. GitHub Actions缓存可以用于什么类型的文件?
几乎所有类型的文件都可以使用缓存,尤其是:
- 构建工具(如Gradle、Maven等)的依赖。
- 语言特定的依赖(如NPM、Pip等)。
- 编译生成的文件,以避免重复编译。
最佳实践
在使用 GitHub Actions 缓存时,遵循以下最佳实践可以进一步提升性能:
- 选择性缓存:只缓存最常用的依赖,避免无用缓存浪费空间。
- 版本控制:通过将
key
与版本信息结合,可以有效管理缓存。 - 定期清理:定期检查和清理不再需要的缓存,以释放存储空间。
通过有效利用GitHub Actions中的缓存机制,开发者能够提升构建效率和稳定性,从而在日常开发中获得更好的体验。