main에 푸시하는 등 Git 저장소에 구성 변경사항을 푸시할 때마다 실행되는 자동 Image Builder 파이프라인을 구성할 수 있습니다.
저장소 이벤트에 따라 빌드를 자동화하면 코드 검토 또는 병합 시 Cloud Build가 맞춤 OS 이미지를 Compute Engine 및 Artifact Registry에 즉시 검증, 빌드, 게시합니다.
시작하기 전에
- 환경 준비의 환경 설정 단계를 완료합니다.
- Terraform을 사용하여 파이프라인을 배포하거나 저장소에서 빌드를 자동화하려면 Cloud Build 저장소 (
2nd gen) 또는 Developer Connect 연결 링크를 사용하여 GitHub, GitLab 또는 Bitbucket 저장소를 연결하세요. - 저장소에
cloudbuild.yaml오케스트레이션 파일,imagebuilder.yaml레시피 파일, 참조된 빌드 스크립트가 포함되어 있는지 확인합니다. - Terraform을 사용하려면 Terraform CLI 버전 1.3 이상을 설치하세요.
-
아직 인증을 설정하지 않았다면 설정합니다.
인증은 Cloud de Confiance by S3NS 서비스 및 API에 액세스하기 위해 ID를 확인합니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.
이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.
gcloud
-
Google Cloud CLI를 설치한 후 제휴 ID로 gcloud CLI에 로그인합니다. 로그인한 후 다음 명령어를 실행하여 Google Cloud CLI를 초기화합니다.
gcloud init
-
- 기본 리전 및 영역을 설정합니다.
-
Google Cloud CLI를 설치합니다.
-
gcloud CLI에서 제휴 ID를 사용하도록 구성합니다.
자세한 내용은 제휴 ID로 gcloud CLI에 로그인을 참고하세요.
-
사용자 계정에 대한 로컬 인증 사용자 인증 정보를 만듭니다.
gcloud auth application-default login
인증 오류가 반환되고 외부 ID 공급업체(IdP)를 사용하는 경우 제휴 ID로 gcloud CLI에 로그인했는지 확인합니다.
Terraform
로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치하고 초기화한 후 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정합니다.
자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
필요한 역할
저장소 이벤트 트리거를 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
- Cloud Build 편집자(
roles/cloudbuild.builds.editor) - 서비스 계정 사용자(
roles/iam.serviceAccountUser)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
저장소 자동화 구성
gcloud CLI 또는 Terraform을 사용하여 저장소 이벤트 트리거를 구성할 수 있습니다. 다음 탭 중 하나를 선택하여 저장소 트리거를 구성합니다.
gcloud
gcloud builds
triggers create 명령어를 사용하고 연결된 2세대 저장소 링크 (--repository)를 직접 가리켜 자동 저장소 트리거를 만들 수 있습니다.
gcloud builds triggers create repository \
--name="TRIGGER_NAME" \
--repository="projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/REPO_NAME" \
--branch-pattern="^main$" \
--build-config="CLOUDBUILD_YAML_PATH" \
--service-account="projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL" \
--substitutions="_GCS_WORKDIR=gs://STAGING_BUCKET/workdir/,_IMAGE_BUILDER_CONFIG_PATH=RECIPE_PATH,_SERVICE_ACCOUNT=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL,_IMAGE_OUTPUT_PATH=image-builder/binaryOut" \
--region=REGION \
--project=PROJECT_ID
다음을 바꿉니다.
TRIGGER_NAME: 트리거의 이름입니다(예:git-push-custom-os-builder).PROJECT_ID: 프로젝트 ID입니다.REGION: 저장소 연결이 호스팅되고 이미지 맞춤설정 파이프라인 작업이 실행되는 리전입니다(예:us-central1).CONNECTION_NAME: Developer Connect 연결의 이름입니다(예:github-connection).REPO_NAME: 연결된 Git 저장소 이름입니다.CLOUDBUILD_YAML_PATH: 로컬 디렉터리의cloudbuild.yaml에 대한 상대 경로입니다.SERVICE_ACCOUNT_EMAIL: 빌드 서비스 계정의 정확한 이메일 주소입니다.STAGING_BUCKET: Cloud Storage 스테이징workdir버킷 이름RECIPE_PATH: 저장소에서imagebuilder.yaml의 상대 경로입니다.
Terraform
Terraform을 사용하여 자동 저장소 트리거를 구성하려면 다음 단계를 완료하세요.
main.tf구성 파일에 트리거 리소스를 추가합니다.resource "google_cloudbuild_trigger" "repository_trigger" { name = "TRIGGER_NAME" location = "REGION" project = "PROJECT_ID" description = "Triggers custom OS image builds on repository push events" repository_event_config { repository = "projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME/repositories/REPO_NAME" push { branch = "^main$" } } filename = "CLOUDBUILD_YAML_PATH" substitutions = { _GCS_WORKDIR = "gs://STAGING_BUCKET/workdir/" _IMAGE_BUILDER_CONFIG_PATH = "RECIPE_PATH" _SERVICE_ACCOUNT = "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_EMAIL" } }다음을 바꿉니다.
TRIGGER_NAME: 트리거의 이름(예:git-push-custom-os-builder)PROJECT_ID: 프로젝트 ID입니다.REGION: 저장소 연결이 호스팅되는 Cloud de Confiance 리전입니다(예:us-central1).CONNECTION_NAME: Developer Connect 연결의 이름입니다(예:github-connection).REPO_NAME: 연결된 Git 저장소 이름입니다.CLOUDBUILD_YAML_PATH: 로컬 디렉터리의cloudbuild.yaml에 대한 상대 경로입니다.STAGING_BUCKET: Cloud Storage 스테이징 버킷 이름입니다.RECIPE_PATH: 저장소에서imagebuilder.yaml의 상대 경로입니다.SERVICE_ACCOUNT_EMAIL: 빌드 서비스 계정의 이메일 주소입니다.
업데이트된 Terraform 구성을 배포합니다.
terraform plan terraform apply
전체 다중 파일 Terraform 인프라 프로젝트 구조를 검토하려면 Terraform을 사용하여 파이프라인 만들기 및 관리를 참고하세요.
다음 단계
- Cloud Scheduler를 사용하여 보안 패치를 위해 주기적으로 맞춤 OS 이미지 빌드를 예약하는 방법을 알아봅니다.
- 지원되는 맞춤설정 작업(
Shell,FileCopy,UpdateKernelCommandLine,InstallGPU)을 살펴봅니다.