使用 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_EPOCH
BuildKit 支持的更多信息,请参阅
BuildKit 文档。