使用 GitHub Actions 進行快取管理
目錄
此頁面包含使用 GitHub Actions 的快取儲存後端的範例。
**注意**
如需快取儲存後端的詳細資訊,請參閱快取儲存後端。
內嵌快取
在大多數情況下,您會想要使用內嵌快取匯出器。但是,請注意,`inline` 快取匯出器僅支援 `min` 快取模式。要使用 `max` 快取模式,請使用具有 `cache-to` 選項的登錄檔快取匯出器單獨推送映像檔和快取,如登錄檔快取範例所示。
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: user/app:latest
cache-from: type=registry,ref=user/app:latest
cache-to: type=inline
登錄檔快取
您可以使用登錄檔快取匯出器從登錄檔上的快取資訊清單或(特殊)映像檔設定匯入/匯出快取。
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: user/app:latest
cache-from: type=registry,ref=user/app:buildcache
cache-to: type=registry,ref=user/app:buildcache,mode=max
GitHub 快取
快取後端 API
**實驗性**
此快取匯出器為實驗性。如果您遇到任何問題,請在BuildKit 儲存庫上提供意見回饋。
GitHub Actions 快取匯出器後端使用 GitHub 快取 API 來擷取和上傳快取 Blob。因此,您應該只在 GitHub Action 工作流程中使用此快取後端,因為 url
($ACTIONS_CACHE_URL
) 和 token
($ACTIONS_RUNTIME_TOKEN
) 屬性只會在工作流程環境中填入。
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: user/app:latest
cache-from: type=gha
cache-to: type=gha,mode=max
快取掛載
BuildKit 預設不會在 GitHub Actions 快取中保留快取掛載。如果您希望將快取掛載放入 GitHub Actions 快取並在建置之間重複使用,您可以使用 reproducible-containers/buildkit-cache-dance
提供的解決方案。
此 GitHub Action 會建立臨時容器,以便使用您的 Docker 建置步驟提取和注入快取掛載資料。
以下範例顯示如何將此解決方案用於 Go 專案。
build/package/Dockerfile
中的 Dockerfile 範例
FROM golang:1.21.1-alpine as base-build
WORKDIR /build
RUN go env -w GOMODCACHE=/root/.cache/go-build
COPY go.mod go.sum ./
RUN --mount=type=cache,target=/root/.cache/go-build go mod download
COPY ./src ./
RUN --mount=type=cache,target=/root/.cache/go-build go build -o /bin/app /build/src
...
CI action 範例
name: ci
on:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: user/app
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Go Build Cache for Docker
uses: actions/cache@v4
with:
path: go-build-cache
key: ${{ runner.os }}-go-build-cache-${{ hashFiles('**/go.sum') }}
- name: Inject go-build-cache
uses: reproducible-containers/buildkit-cache-dance@4b2444fec0c0fb9dbf175a96c094720a692ef810 # v2.1.4
with:
cache-source: go-build-cache
- name: Build and push
uses: docker/build-push-action@v6
with:
cache-from: type=gha
cache-to: type=gha,mode=max
file: build/package/Dockerfile
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
有關此解決方案的更多資訊,請參閱 GitHub 儲存庫