1. ホーム
  2. github

[解決済み] GitHub のアクションでステップをキャッシュするには?

2022-03-08 15:58:54

質問

2つのステップからなるGitHubのアクションのワークフローがあるとします。

  1. アプリケーションの依存関係をダウンロードし、コンパイルします。
  2. アプリケーションのコンパイルとテスト

私の依存関係はほとんど変化しないので、コンパイルされた依存関係は、次にそのバージョンを指定するロックファイルを変更するまで、安全にキャッシュすることができるのです。

最初のステップの結果を保存して、将来のワークフローでそのステップをスキップできるようにする方法はありますか?

解決方法は?

キャッシュがネイティブにサポートされるようになりました。 キャッシュアクション . リポジトリ内のジョブとワークフローの両方で動作します。こちらもご覧ください。 https://help.github.com/en/actions/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows .

を考えてみましょう。 次のような例です。 :

name: GitHub Actions Workflow with NPM cache

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1

    - name: Cache NPM dependencies
      uses: actions/cache@v1
      with:
        path: ~/.npm
        key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.OS }}-npm-cache-

    - name: Install NPM dependencies
      run: npm install

ここで pathkey のパラメータは cache アクションは、キャッシュを識別するために使用されます。

オプションの restore-keys は、部分一致へのフォールバックの可能性のために使用されます (すなわち、もし package-lock.json が変更されると、以前のキャッシュが使用されます)。

キーに何らかの ID を付加する ( npm-cache この例では restore-keys フォールバックが使用され、複数の異なるキャッシュが存在する場合 (例: JS パッケージ用とシステムパッケージ用) に使用します。そうでないと、あるキャッシュが他の無関係なキャッシュにフォールバックしてしまう可能性があります。同様に、OS プレフィックスはマトリックスビルドを使用する際に、異なるシステムのキャッシュが混同されないようにするために有用です。

また、再利用可能なキャッシュロジックを構築するために アクション/キャッシュ のようなものです。


<サブ 古い回答です。

<サブ 現在、ネイティブキャッシュはできません。 2019年11月中旬に実装予定 .

<サブ アーティファクトを使用することができます ( 1 , 2 で提案したように、ジョブ間(1つのワークフロー内)でディレクトリを移動させることができます。 GHコミュニティ掲示板 . ところが、これ。 は、ワークフローをまたいで機能しない .