github action cache

如果不知道github action 是什么,建议不要继续阅读。

github action cache 官方手册
github action cache 首页

action cache 可以做什么

action cache 可以帮助我们缓存一些action生成的数据。一次action的job执行成功,我们可以指定缓存哪个目录或哪些目录的文件。

言外之意,job执行失败,是不会缓存数据的。

cache的key

缓存使用key来标识。key 是一个不超过512字符的字符串。可以自己定义,简单的用法可以参考下面例子中的key。
这里的hashFiles是计算指定文件的sha256值。

key的示例:
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles(‘deps/init/oceanbase.el7.x86_64.deps’) }}

共享

缓存不仅仅是key一致就可以使用了,有一些限制。通常不同的代码分支、tag、不同的操作系统都不能使用同一个缓存。
但是也有例外,比如

  • 默认分支(通常是master或main)的缓存可以让其它分支使用。
  • 如果指定enableCrossOsArchive为true就可以跨操作系统使用。

TIPS

  • 缓存的总大小不能超过10G,否则会触发淘汰。
  • 超过7天没有访问的缓存会被删除。
  • 缓存可以手动删除,在action页面可以找到cache管理页面。
  • 缓存的匹配不仅仅使用key唯一值匹配,还可以有一些其它的匹配规则,具体的参考文档中的restore-keys
  • 缓存的操作可以拆分成存储和恢复两个动作,这样可以处理更复杂的场景,具体可以参考 action/cache的说明。

一个例子(例子来自 OceanBase):

name: Compile

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  ubuntu-x86_64:
    runs-on: ubuntu-20.04
    steps:
    - uses: actions/checkout@v3

    - name: Install environment
      shell: bash
      run: sudo apt-get install -y git wget rpm rpm2cpio cpio make build-essential binutils m4 libtool-bin language-pack-en

    - name: Cache deps
      id: cache-deps
      uses: actions/cache@v3
      env:
        cache-name: cache-deps
      with:
        key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('deps/init/oceanbase.el7.x86_64.deps') }}
        # 缓存的数据放在哪个目录。
        # 如果没有命中,job执行完成后,会把这个目录的数据打包缓存起来。
        # 如果命中了,就把缓存的数据恢复到这个目录中
        path: deps/3rd
        enableCrossOsArchive: true
        
    - name: Build init
      # 判断如果判断没有命中,就执行某个动作
      if: steps.cache-deps.outputs.cache-hit != 'true'
      run: bash build.sh init
      
    - name: Build project
      shell: bash
      run: |
        bash build.sh debug
        cd build_debug && make -j4
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐