使用 GitHub Actions 進行可重現的建置

SOURCE_DATE_EPOCH 是一個 標準化環境變數,用於指示建置工具產生可重現的輸出。 為建置設定環境變數會使映像檔索引、設定和檔案中繼資料中的時間戳記反映指定 Unix 時間。

若要在 GitHub Actions 中設定環境變數,請使用建置步驟中的內建 env 屬性。

Unix 時間戳記

以下範例將 SOURCE_DATE_EPOCH 變數設定為 0,即 Unix 紀元。


name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build
        uses: docker/build-push-action@v6
        with:
          tags: user/app:latest
        env:
          SOURCE_DATE_EPOCH: 0
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build
        uses: docker/bake-action@v5
        env:
          SOURCE_DATE_EPOCH: 0

Git Commit 時間戳記

以下範例將 SOURCE_DATE_EPOCH 設定為 Git Commit 時間戳記。


name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Get Git commit timestamps
        run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV

      - name: Build
        uses: docker/build-push-action@v6
        with:
          tags: user/app:latest
        env:
          SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Get Git commit timestamps
        run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV

      - name: Build
        uses: docker/bake-action@v5
        env:
          SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}

其他資訊

有關 BuildKit 中 SOURCE_DATE_EPOCH 支援的更多資訊,請參閱 BuildKit 文件