WEBBOOK CHAPTER

CI/CD, 서버실에서 클라우드까지: 7장. 재현 가능한 build의 변수를 줄인다

7장. 재현 가능한 build의 변수를 줄인다

lockfile, compiler·runtime version, base image digest, locale, timezone, file order, build timestamp를 통제한다. Java는 Maven/Gradle wrapper와 toolchain, Node는 lockfile과 npm ci, container는 digest-pinned base를 사용한다. 같은 source가 byte-for-byte 동일한 결과를 내지 못하더라도 차이를 설명할 metadata가 있어야 한다.


export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
npm ci
npm test
npm run build
sha256sum dist/*

의존성 cache는 입력 key가 정확할 때만 속도를 준다. branch 이름만 cache key로 쓰면 오염된다. lockfile hash, OS, architecture, tool version을 포함하고 cache miss가 build 실패가 되지 않게 한다. cache와 artifact를 같은 것으로 취급하지 않는다.