GitHub Actions로 재현 가능한 빌드하기
GitHub Actions로 재현 가능한 빌드하기 (Reproducible builds with GitHub Actions)
SOURCE_DATE_EPOCH는 빌드 도구가 재현 가능한 출력을 만들도록 지시하는 표준화된 환경 변수예요. 빌드에 이 환경 변수를 설정하면 이미지 인덱스, 구성, 파일 메타데이터의 타임스탬프가 지정된 Unix 시간을 반영하게 돼요.
출처: 문서
본문
env 속성으로 빌드 단계에 SOURCE_DATE_EPOCH를 설정할 수 있어요.
Unix epoch 타임스탬프 (Unix epoch timestamps)
SOURCE_DATE_EPOCH를 0(Unix epoch)으로 설정해요:
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Build
uses: docker/build-push-action@v7
with:
tags: user/app:latest
env:
SOURCE_DATE_EPOCH: 0
bake를 쓸 때도 env로 설정할 수 있어요:
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Build
uses: docker/bake-action@v7
env:
SOURCE_DATE_EPOCH: 0
Git 커밋 타임스탬프 (Git commit timestamps)
재현 가능한 빌드를 위해 Git 커밋 타임스탬프를 사용할 수도 있어요. SOURCE_DATE_EPOCH를 Git 커밋 시간에 맞추면 같은 커밋에서 빌드하면 항상 같은 결과가 나와요:
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: ...
이렇게 하면 동일한 소스·커밋에서 빌드할 때마다 바이트까지 같은 이미지가 재현돼요.