今日のインプット/アウトプット #15 2024-09-13

ルール

  • 毎日何かしら記録する。

  • どんな些細なことでもOK。レベル感気にしない

  • 書いたらtwitterにでもポストしておく

久々に2日連続ですよ。偉い。

Duolingo

いつもの

GItHub CI/CD実践ガイド

キャッシュ

name: Cache test
on: push
jobs:
    cache:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4
            - uses: actions/cache@v4
              with:
                key: test-${{ runner.os }}-${{ github.sha }}
                path: ${{ github.workspace }}/dummydayo
                restore-keys: test-${{ runner.os }}-
            - run: |
                if [[ -f "${GITHUB_WORKSPACE}/dummydayo" ]]; then exit 0; fi
                dd if=/dev/urandom of="${GITHUB_WORKSPACE}/dummydayo" bs=1M count=10
                sleep 30
            - run: ls -lh "${GITHUB_WORKSPACE}/dummydayo"

cacheアクションで任意のファイルをキャッシュできる。
key, pathはまあさっとわかる。
restore-keysが最初パッと用途がわからなかった。
キャッシュミス時のリストアキーを複数指定できるとのこと

復元のフローは以下とのこと

  • key キーで定義したキャッシュキーと、厳密に一致するキャッシュを探す

  • リストアキーの定義順に、プレフィックスが一致するキャッシュを探す

これがどういうときに効いてくるかというと、パッケージマネージャ。

公式の例がわかりやすい。

key: node-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
  node-${{ runner.os }}-

package-lockのhashがkeyになっていて、package-lock.jsonが変更されたされたときとかはキャッシュヒットしない。
つづいてrestore-keysで"node-${{ runner.os }}"を指定してるので以前のキャッシュが残っていればそちらが使われる。

へぇーと思って、社内のworkflow見たらちゃっかり設定されてた。
今まで知らずにやってた。ありがた。

キャッシュの利用制限と過去のポリシー

GitHubは、7日間以上アクセスされていないキャッシュエントリを削除します。 保存できるキャッシュの数に制限はありませんが、リポジトリ内のすべてのキャッシュの合計サイズは制限されています (最大 10 GB)。 リポジトリがその最大キャッシュ ストレージに達すると、キャッシュの削除ポリシーによって、リポジトリ内の最も古いキャッシュが削除されてスペースが作成されます。

https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy

10Gまで保存されて、古いものから消されていくと。

アーティファクト

name: Artifacts test
on: push
jobs:
    upload:
        runs-on: ubuntu-latest
        steps:
            - run: date > date_dayo.txt # アーティファクト作成
            - uses: actions/upload-artifact@v4
              with:
                name: uploaded_dayo
                path: date_dayo.txt
                retention-days: 3 # 保存期間ね
    download:
        runs-on: ubuntu-latest
        needs: [upload]
        steps:
            - uses: actions/download-artifact@v4
              with:
                name: uploaded_dayo # upload-artifactに指定したnameね
                path: downloaded_dayo
            - run: cat downloaded_dayo/date_dayo.txt

成果物としてアップロードして、別ジョブでダウンロードとかできる。buildしたイメージとかそういうやつをアップするのが多そう。

プライベートリポジトリではストレージ使用量が課金対象になるとのこと。
retention-daysが保存期間なので、なるべく短くしておく。
デフォルトは90日で、無期限設定はできない。

ワークフローの実行結果画面でダウンロード、削除もできる


この記事が気に入ったらサポートをしてみませんか?