이 페이지에서는 Cloud Build를 사용하여 Go 애플리케이션을 빌드 및 테스트하고, 아티팩트를 Artifact Registry에 업로드하고, 출처 정보를 생성하고, Cloud Storage에서 테스트 로그를 저장하는 방법을 설명합니다.
시작하기 전에
이 페이지의 안내에서는 Go에 익숙하다고 가정합니다. 또한 다음 사항도 적용됩니다.
-
Cloud Build, Cloud Run, Artifact Registry API를 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 포함된 서비스 사용량 관리자 IAM 역할(roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기. - 이 페이지에서
gcloud명령어를 실행하려면 Google Cloud CLI를 설치합니다. - Go 프로젝트를 준비합니다.
- Artifact Registry에 Go 저장소가 있습니다. 저장소가 없으면 새 저장소를 만듭니다.
- Cloud Storage에 테스트 로그를 저장하려면 Cloud Storage에서 버킷을 만듭니다.
- Cloud Run의 런타임 서비스 계정 ID를 알고 있어야 합니다.
커스텀 Cloud Build 서비스 계정 만들기
Google Cloud CLI에서 다음 명령어를 실행하여 커스텀 Cloud Build 서비스 계정을 만듭니다.
gcloud iam service-accounts create cloud-build-go \
--description="Build and test Go applications" \
--display-name="Cloud Build Go" \
--project="PROJECT_NAME"
이 서비스 계정을 사용하여 Go 애플리케이션을 빌드하고 테스트합니다.
IAM 권한 구성
Go 애플리케이션을 빌드하고 배포하는 데 필요한 권한으로 새 서비스 계정을 구성하려면 다음 안내를 따르세요.
-
콘솔에서 Cloud Build 권한 페이지로 이동합니다. Google Cloud settings
서비스 계정 메뉴로 이동하여
cloud-build-go서비스 계정을 선택합니다.다음 역할의 상태를 사용으로 설정합니다.
- Cloud Run 관리자 (
roles/run.admin): Cloud Build에서 Cloud Run에 새 서비스를 배포할 수 있도록 합니다.- 서비스 계정 사용자 역할 할당 패널에서 런타임 서비스 계정을 선택한 후 권한 부여를 클릭합니다. 이 구성을 사용하면 커스텀 Cloud Build 서비스 계정이 Cloud Run 관리형 서비스와 상호작용할 때 런타임 서비스 계정을 가장할 수 있습니다. 자세한 내용은 관리형 서비스의 Cloud Build 서비스 계정 가장 구성을 참고하세요.
- 스토리지 관리자 (
roles/storage.admin): Cloud Storage에서 읽기 및 쓰기를 사용 설정합니다. - Artifact Registry 작성자 (
roles/artifactregistry.writer): Artifact Registry에서 이미지를 가져오고 Artifact Registry에 쓸 수 있도록 합니다. - 로그 작성자 (
roles/logging.logWriter): 로그 항목을 Cloud Logging에 쓸 수 있도록 합니다. - Cloud Build 편집자 (
roles/cloudbuild.builds.editor): 서비스 계정에서 빌드를 실행할 수 있도록 합니다.
- Cloud Run 관리자 (
Go 빌드 구성
Docker Hub의 공개
golang 이미지는
Go 모듈을 사용한 빌드를 지원합니다.
Cloud Build 구성 파일에서 이 이미지를 빌드 단계로 사용하면 이미지 내에서 go 명령어를 호출할 수 있습니다. 이 빌드 단계로 전달된 인수
는 golang 도구로 바로 전달되어 이 이미지에 있는 모든 go 명령어
를 실행할 수 있도록 합니다.
이 섹션에서는 cloud-build-samples Git 저장소에서 Go 앱의 빌드 구성 파일 예시를 만드는 방법을 보여줍니다. 빌드 구성 파일에는 앱을 빌드하고, 단위 테스트를 추가하고, 테스트가 통과된 후 앱을 배포하는 단계가 포함되어 있습니다.
Go 애플리케이션 예시를 빌드하려면 다음 안내를 따르세요.
단위 테스트 구성: 애플리케이션에 단위 테스트를 정의한 경우 빌드 단계에서 다음 필드를 추가하여 테스트를 실행하도록 Cloud Build를 구성할 수 있습니다.
name: 사용자의 태스크에 대해 Docker Hub에서 golang 이미지를 사용하도록 이 필드의 값을golang으로 설정합니다.entrypoint: 이 필드의 값을/bin/bash로 설정합니다. 이렇게 하면 빌드 단계에서 직접 여러 줄로 구성된 bash 명령어를 실행할 수 있습니다.args: 빌드 단계의args필드는 인수 목록을 가져와서name필드로 참조되는 이미지에 전달합니다. 다음 예시에서args필드는 다음에 대한 인수를 가져옵니다.- 테스트 로그 형식 지정 도구를 실행하여 테스트 로그 출력을 다운로드합니다.
- 로그 출력을 인쇄합니다.
sponge.log에 테스트 결과를 저장합니다.sponge.log의 결과를 JUNIT XML 파일로 출력합니다. JUNIT XML 파일의 이름은 해당 빌드와 연관된 커밋 ID의 짧은 버전을 사용하여 생성됩니다. 이후의 빌드 단계는 이 파일의 로그를 Cloud Storage에 저장합니다.steps: # Run tests and save to file - name: golang:1.23 entrypoint: /bin/bash args: - -c - | go install github.com/jstemmer/go-junit-report/v2@latest 2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
Artifact Registry에 업로드: 구성 파일에서
goModules필드를 사용하여 애플리케이션 경로 및 Go 저장소를 Artifact Registry에 지정합니다.# Upload Go module to artifact registry artifacts: goModules: - repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'다음 값을 바꿉니다.
선택사항: 출처 생성 사용 설정
Cloud Build는 지속적 통합 파이프라인을 보호하는 데 도움이 되도록 검증 가능한 소프트웨어 아티팩트에 대한 공급망 등급(SLSA) 빌드 출처 메타데이터를 생성할 수 있습니다.
출처 생성을 사용 설정하려면 구성 파일의
options섹션에requestedVerifyOption: VERIFIED를 추가합니다.빌드가 완료되면 Artifact Registry에서 저장소 세부정보를 확인할 수 있습니다.
또한 빌드 출처 메타데이터를 확인하고 출처를 검증할 수 있습니다.
Cloud Storage에 테스트 로그 저장: 기존 버킷 위치 및 테스트 로그 경로를 지정하여 Cloud Storage에 테스트 로그를 저장하도록 Cloud Build 를 구성할 수 있습니다.
다음 빌드 단계는 JUNIT XML 파일에 저장한 테스트 로그를 Cloud Storage 버킷에 저장합니다.
# Save test logs to Google Cloud Storage artifacts: objects: location: gs://$_BUCKET_NAME/ paths: - ${SHORT_SHA}_test_log.xml다음 스니펫은 이전 단계의 전체 빌드 구성 파일을 보여줍니다.
steps: # Run tests and save to file - name: golang:1.23 entrypoint: /bin/bash args: - -c - | go install github.com/jstemmer/go-junit-report/v2@latest 2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml # Store golang modules in Google Artifact Registry artifacts: goModules: - repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'gcloud CLI를 사용하여 빌드를 시작하거나 빌드 트리거를 만듭니다.
Google Cloud CLI
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
--substitutions=_AR_REPO_NAME="AR_REPO_NAME"
트리거 제작
빌드 트리거 만들기의 단계를 따릅니다. 대체 변수 필드에서 Artifact Registry 저장소의 이름과 테스트 로그의 Cloud Storage 버킷 이름도 제공해야 합니다.
다음 단계
- Compute Engine에서 블루-그린 배포를 수행하는 방법을 알아봅니다.
- 빌드 오류 문제 해결 방법 알아보기.