packer build 명령어 레퍼런스
packer build 명령어 레퍼런스
packer build 명령어는 템플릿을 받아서 그 안의 모든 빌드를 실행해 아티팩트 세트를 생성해요. 템플릿에 지정된 여러 빌드는 달리 지정하지 않는 한 병렬로 실행되고, 만들어진 아티팩트는 빌드가 끝날 때 출력돼요.
출처: Packer 공식 문서
본문
참고: 2025년 8월 1일부터 많은 공식 HashiCorp 관리 Packer 플러그인의 소스가 GitHub 릴리스에서 공식 HashiCorp 릴리스 사이트인 releases.hashicorp.com으로 이동하고 있어요. 자세한 내용은 HashiCorp 관리 플러그인 설치를 참고해 주세요.
옵션 (Options)
-
-color=false- 색상 출력을 비활성화해요. 기본적으로 활성화돼 있어요. -
-debug- 병렬화를 비활성화하고 디버그 모드를 켜요. 디버그 모드는 builder에게 디버깅 정보를 출력하라고 표시해요. 디버그 모드의 정확한 동작은 builder에 달려 있는데, 일반적으로 builder는 각 단계 사이에서 멈추고 계속하기 전에 키보드 입력을 기다려요. 이렇게 하면 사용자가 상태 등을 검사할 수 있어요. -
-except=foo,bar,baz- 주어진 쉼표로 구분된 이름을 가진 것들을 제외한 모든 빌드와 post-processor를 실행해요. 레거시 JSON 템플릿에서는 구성 안에 특정name속성이 지정되지 않는 한 빌드 이름은 builder의 타입(예:docker,amazon-ebs,virtualbox-iso)을 기본값으로 해요. HCL2 템플릿에서 "name"은 source 블록의 "name" 라벨이에요(빌드 안의 source 정의가 "name" 구성 옵션을 추가하지 않는 한). 건너뛴 post-processor 다음에 오는 post-processor는 실행되지 않아요. post-processor는 배열 안에 중첩될 수 있으므로 다른 post-processor 체인은 여전히 실행될 수 있어요. 빈 이름을 가진 post-processor는 무시돼요. -
-force- 이전 빌드의 아티팩트가 빌드 실행을 막을 때 builder를 강제로 실행해요. 강제 빌드의 정확한 동작은 builder에 달려 있는데, 일반적으로 강제 빌드를 지원하는 builder는 이전 빌드의 아티팩트를 제거해요. 이렇게 하면 사용자가 그 아티팩트를 미리 수동으로 정리하지 않아도 빌드를 반복할 수 있어요. -
-on-error=cleanup(기본값),-on-error=abort,-on-error=ask,-on-error=run-cleanup-provisioner- 프로비저닝 중에 빌드가 실패했을 때 무엇을 할지 선택해요. 이 옵션은 프로비저너 실행 중의 빌드에만 영향을 주고 post-processor 실행 중에는 영향이 없어요. 프로비저너가 실패했을 때 시스템에서 인스턴스를 계속 실행해 둘지, 그리고 생성된 SSH 키 같은 관련 아티팩트를 유지할지와 관련되기 때문이에요.cleanup- 이전 단계들을 정리하고 임시 파일과 가상 머신을 삭제해요.abort- 어떤 정리도 하지 않고 종료해요. 다음 빌드에서-force를 써야 할 수도 있어요.ask- 프롬프트를 띄우고 정리할지, 중단할지, 아니면 실패한 단계를 재시도할지를 결정할 때까지 기다려요.run-cleanup-provisioner- 정의된 error-cleanup-provisioner가 있으면 그것을 제외하고는 어떤 정리도 하지 않고 중단·종료해요.
-
-only=foo,bar,baz- 주어진 쉼표로 구분된 이름을 가진 빌드만 실행해요. 레거시 JSON 템플릿에서는 구성 안에 특정name속성이 지정되지 않는 한 빌드 이름은 builder의 타입(예:docker,amazon-ebs,virtualbox-iso)을 기본값으로 해요. HCL2 템플릿에서 "name"은 source 블록의 "name" 라벨이에요(빌드 안의 source 정의가 "name" 구성 옵션을 추가하지 않는 한). -
-parallel-builds=N- 병렬로 실행할 빌드 수를 제한해요. 0은 제한 없음을 의미하고 기본값은 0이에요. -
-timestamp-ui- 각 UI 출력 앞에 RFC3339 타임스탬프를 붙이는 것을 활성화해요. -
-var- Packer 템플릿에 변수를 설정해요. 이 옵션은 여러 번 사용할 수 있어요. 빌드의 버전 번호를 설정할 때 유용해요. -
-var-file- 파일에서 템플릿 변수를 설정해요. -
-warn-on-undeclared-var- 이 플래그를 설정하면, 함께 제공되는variable블록이 없는 변수 정의 파일(.pkrvars.hcl |.pkrvars.json) 안의 각 할당에 대해 경고를 내요. 주어진 HCL2 템플릿에 비해 사용하지 않는 변수가 많이 담긴 var-file을 쓸 때 이런 일이 생길 수 있어요. HCL2 템플릿 빌드에서 var-file에 변수 값을 정의하는 것만으로는 Packer가 동작하기에 충분하지 않아요. 템플릿 파일pkr.hcl안에 그 변수에 대한variable블록 정의도 있어야 하거든요. 기본적으로packer build는 var-file에 선언되지 않은 변수가 하나 이상 있어도 경고하지 않아요. -
-skip-enforcement- HCP Packer가 강제하는(enforced) provisioner 주입을 건너뛰어요. 강제 provisioner는 HCP Packer 버킷에 연결된 버전이 지정된 provisioner 정의로, Packer가 빌드 중에 자동으로 적용해요. 자세한 내용은 강제 provisioner를 참고해 주세요.