使用 GitHub Actions 进行可重复构建

SOURCE_DATE_EPOCH是一个 标准化环境变量 ,用于指示构建工具生成可重现的输出。为构建设置环境变量使图像索引、配置和文件元数据中的时间戳反映指定的 Unix 时间。

env要在 GitHub Actions 中设置环境变量,请使用构建步骤中的内置属性。

Unix 纪元时间戳

以下示例将SOURCE_DATE_EPOCH变量设置为 0(Unix 纪元)。


name: ci

on:
  push:
    branches:
      - "main"

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/build-push-action@v5
        with:
          context: .
          tags: user/app:latest
        env:
          SOURCE_DATE_EPOCH: 0
name: ci

on:
  push:
    branches:
      - "main"

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@v4
        env:
          SOURCE_DATE_EPOCH: 0

Git 提交时间戳

以下示例设置SOURCE_DATE_EPOCH为 Git 提交时间戳。


name: ci

on:
  push:
    branches:
      - "main"

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
      - name: Build
        uses: docker/build-push-action@v5
        with:
          context: .
          tags: user/app:latest
        env:
          SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}
name: ci

on:
  push:
    branches:
      - "main"

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
      - name: Build
        uses: docker/bake-action@v4
        env:
          SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}

附加信息

有关SOURCE_DATE_EPOCHBuildKit 支持的更多信息,请参阅 BuildKit 文档