이 페이지에서는 Artifact Registry 저장소에 빌드된 아티팩트를 저장하도록 Cloud Build를 구성하는 방법을 설명합니다.
시작하기 전에
- Artifact Registry에 대상 저장소가 없으면 새 저장소를 만듭니다.
Cloud Build와 저장소가 다른 프로젝트에 있거나 빌드를 실행하는 데 사용자 지정 서비스 계정을 사용하는 경우 저장소가 있는 프로젝트의 빌드 서비스 계정에 Artifact Registry 작성자 역할을 부여합니다.
기본 Cloud Build 서비스 계정에는 동일한 Google Cloud 프로젝트의 저장소로 다음 작업을 수행할 수 있는 액세스 권한이 있습니다.
- 아티팩트 업로드 및 다운로드
- Artifact Registry에서 gcr.io 저장소 만들기
Docker 빌드 구성
대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다.
빌드를 구성하려면 다음 안내를 따르세요.
빌드 구성 파일에 이미지를 빌드하고 태그를 지정하는 단계를 추가합니다.
steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ] images: - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'
이 스니펫은 Cloud Build 대체 항목을 사용합니다. 이 방식은 동일한 빌드 구성 파일을 사용하여 테스트, 스테이징 또는 프로덕션과 같은 다양한 환경의 저장소에 이미지를 내보내려는 경우에 유용합니다.
${_LOCATION}
,${_REPOSITORY}
,${_IMAGE}
는 저장소 위치, 저장소 이름, 이미지에 대한 사용자 정의 대체 항목입니다. 이러한 변수의 값은 빌드 시 지정합니다.$PROJECT_ID
는 Cloud Build가 빌드의 Google Cloud 프로젝트 ID로 확인하는 기본 대체 항목입니다.gcloud builds submit
명령어를 실행하면 Cloud Build가 gcloud 세션에서 활성 프로젝트 ID를 사용합니다.- 빌드 트리거를 사용하면 Cloud Build는 Cloud Build가 실행 중인 프로젝트의 ID를 사용합니다.
또는 빌드 시 프로젝트 ID를 지정할 수 있도록
$PROJECT_ID
대신 사용자 정의 대체 항목을 사용할 수 있습니다.
빌드를 실행할 준비가 되면 사용자 정의 대체 항목 값을 지정합니다. 예를 들어 이 명령어는 다음을 대체합니다.
us-east1
: 저장소 위치my-repo
: 저장소 이름my-image
: 이미지 이름
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
Go 빌드 구성
대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다. 다음 안내에서는 Go 모듈을 Go 저장소에 업로드하도록 빌드를 구성하는 방법을 설명합니다.
빌드를 구성하려면 다음 안내를 따르세요.
빌드의 Go 저장소에 Go 모듈을 업로드하려면 빌드 구성 파일에 다음 단계를 추가합니다.
steps: - name: gcr.io/cloud-builders/gcloud args: - 'artifacts' - 'go' - 'upload' - '--project=$PROJECT_ID' - '--location=${_LOCATION}' - '--repository=${_REPOSITORY}' - '--module-path=${_MODULE_PATH}' - '--version=$TAG_NAME'
빌드 구성 파일에는 Cloud Build 대체 항목이 포함됩니다. 이 방식은 동일한 빌드 구성 파일을 사용하여 테스트, 스테이징 또는 프로덕션과 같은 다양한 환경의 저장소에 패키지를 업로드하려는 경우에 유용합니다.
${_LOCATION}
,${_REPOSITORY}
,${_MODULE_PATH}
는 저장소 위치, 저장소 이름, 모듈 경로에 대한 사용자 정의 대체 항목입니다. 이러한 변수의 값은 빌드 시 지정합니다.$PROJECT_ID
및$TAG_NAME
은 Cloud Build가 다음으로 대체하는 기본 대체 항목입니다.$PROJECT_ID
는 빌드의 Google Cloud 프로젝트 ID로 대체됩니다.gcloud builds submit
명령어를 실행하면 Cloud Build가 gcloud 세션에서 활성 프로젝트 ID를 사용합니다.- 빌드 트리거를 사용하면 Cloud Build는 Cloud Build가 실행 중인 프로젝트의 ID를 사용합니다.
또는 빌드 시 프로젝트 ID를 지정할 수 있도록
$PROJECT_ID
대신 사용자 정의 대체 항목을 사용할 수 있습니다.$TAG_NAME
은 Git 태그를 버전 번호로 사용하는 Go 규칙을 지원하기 위해 태그 이름으로 대체됩니다.
Go 저장소에서 패키지를 설치하려면 빌드 구성 파일에 다음 단계를 추가합니다.
- 저장소 위치의 리전 Artifact Registry 엔드포인트를
.netrc
파일에 추가합니다. - 사용자 인증 정보 도우미 도구를 실행하여 OAuth 토큰을 새로고침합니다.
go run
명령어를 실행합니다.go build
로 변경하여 모듈을 컴파일하거나,go test
로 변경하여 테스트를 실행하거나,go mod tidy
로 변경하여 종속 항목을 다운로드할 수 있습니다.
go
명령어 단계의 경우 비공개 종속 항목을 호스팅하는 Artifact Registry 저장소로GOPROXY
가 설정됩니다. 모듈에 공개 종속 항목이 있는 경우 공개 프록시를 쉼표로 구분된GOPROXY
목록에 추가할 수 있습니다.steps: - name: golang entrypoint: go args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'add-locations', '--locations=${_LOCATION}'] env: # Set GOPROXY to the public proxy to pull the credential helper tool - 'GOPROXY=https://proxy.golang.org' - name: golang entrypoint: go args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'refresh'] env: # Set GOPROXY to the public proxy to pull the credential helper tool - 'GOPROXY=https://proxy.golang.org' - name: golang entrypoint: go args: ['run', '.'] env: - 'GOPROXY=https://${_LOCATION}-go.pkg.dev/${_PROJECT_ID}/${_REPOSITORY}' options: env: # Disable GO sumdb checks for private modules. - 'GONOSUMDB=${_MODULE_PATH}'
- 저장소 위치의 리전 Artifact Registry 엔드포인트를
빌드를 실행할 준비가 되면 사용자 정의 대체 항목 값을 지정합니다. 예를 들어 이 명령어는 다음을 대체합니다.
us-east1
: 저장소 위치my-project
: 프로젝트 IDmy-repo
: 저장소 이름example.com/greetings
: 모듈 경로
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
Java 빌드 구성
대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다. 다음 안내에서는 자바 패키지를 Maven 저장소에 업로드하도록 빌드를 구성하는 방법을 설명합니다.
빌드를 구성하려면 다음 안내를 따르세요.
Maven의 인증을 설정합니다.
pom.xml
파일에 올바른 대상 프로젝트와 저장소를 지정해야 합니다.Cloud Build 빌드 구성 파일에 Maven으로 패키지를 업로드하는 단계를 추가합니다.
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']
빌드 구성 파일이 준비되면 다음 명령어를 사용하여 빌드를 시작합니다.
gcloud builds submit
Node.js 빌드 구성
대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다. 다음 안내에서는 Node.js 패키지를 npm 저장소에 업로드하도록 빌드를 구성하는 방법을 설명합니다.
빌드를 구성하려면 다음 안내를 따르세요.
Node.js 프로젝트의
.npmrc
파일에 Artifact Registry 저장소를 추가합니다. 파일은package.json
파일이 있는 디렉터리에 있습니다.@SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY:always-auth=true
저장소의 인증을 위해 액세스 토큰을 새로고침하는 스크립트를 프로젝트의
package.json
파일에 추가합니다."scripts": { "artifactregistry-login": "npx google-artifactregistry-auth" }
빌드 구성 파일에 패키지를 저장소에 업로드하는 단계를 추가합니다.
steps: - name: gcr.io/cloud-builders/npm args: ['run', 'artifactregistry-login'] - name: gcr.io/cloud-builders/npm args: ['publish', '${_PACKAGE}']
${_PACKAGE}
은 Node.js 프로젝트 디렉터리를 나타내는 Cloud Build 대체 항목입니다. 빌드 실행 명령어를 실행할 때 디렉터리를 지정할 수 있습니다.예를 들어 이 명령어는
src
디렉터리에서 패키지를 업로드합니다.gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_PACKAGE="src" .
Python 빌드 구성
대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다. 다음 안내에서는 Python 패키지를 Python 저장소에 업로드하고 pip를 사용하여 패키지를 설치하도록 빌드를 구성하는 방법을 설명합니다.
Python 애플리케이션을 빌드하고 컨테이너화한 후 Docker 저장소로 푸시하려면 Cloud Build 문서의 Python 애플리케이션 빌드를 참조하세요.
빌드를 구성하려면 다음 안내를 따르세요.
Cloud Build 빌드 구성 파일이 있는 디렉터리에서 다음 종속 항목이 포함된
requirements.txt
라는 파일을 만듭니다.twine keyrings.google-artifactregistry-auth
- Twine은 Artifact Registry에 패키지를 업로드하기 위한 것입니다.
- keyrings.google-artifactregistry-auth는 pip 및 Twine용 Artifact Registry로 인증을 처리하는 Artifact Registry 키링 백엔드입니다.
빌드의 Python 저장소에 Python 패키지를 업로드하려면 빌드 구성 파일에 다음 단계를 추가합니다.
steps: - name: python entrypoint: pip args: ["install", "-r", "requirements.txt", "--user"] - name: python entrypoint: python args: - '-m' - 'twine' - 'upload' - '--repository-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/' - 'dist/*'
이 스니펫의 첫 번째 단계로 Twine 및 Artifact Registry 키링 백엔드를 설치합니다. 두 번째 단계에서는 빌드된 Python 파일을
dist
하위 디렉터리에 업로드합니다.requirements.txt
및 빌드된 Python 파일의 경로가 스니펫과 일치하지 않으면 경로를 조정합니다.저장소 경로에는 Cloud Build 대체 항목이 포함됩니다. 이 방식은 동일한 빌드 구성 파일을 사용하여 테스트, 스테이징 또는 프로덕션과 같은 다양한 환경의 저장소에 패키지를 업로드하려는 경우에 유용합니다.
${_LOCATION}
및${_REPOSITORY}
는 저장소 위치, 저장소 이름, 패키지 이름에 대한 사용자 정의 대체 항목입니다. 이러한 변수의 값은 빌드 시 지정합니다.$PROJECT_ID
는 Cloud Build가 빌드의 Google Cloud 프로젝트 ID로 확인하는 기본 대체 항목입니다.gcloud builds submit
명령어를 실행하면 Cloud Build가 gcloud 세션에서 활성 프로젝트 ID를 사용합니다.- 빌드 트리거를 사용하면 Cloud Build는 Cloud Build가 실행 중인 프로젝트의 ID를 사용합니다.
또는 빌드 시 프로젝트 ID를 지정할 수 있도록
$PROJECT_ID
대신 사용자 정의 대체 항목을 사용할 수 있습니다.
Python 저장소에서 패키지를 설치하려면
pip install
명령어를 실행하는 단계를 빌드 구성 파일에 추가합니다.steps: - name: python entrypoint: pip args: - 'install' - '--index-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/' - '${_PACKAGE}' - '--verbose'
이 스니펫에는 패키지 이름에 대한 추가
${_PACKAGE}
대체 항목이 포함됩니다.빌드를 실행할 준비가 되면 사용자 정의 대체 항목 값을 지정합니다. 예를 들어 이 명령어는 다음을 대체합니다.
us-east1
: 저장소 위치my-repo
: 저장소 이름my-package
: 패키지 이름
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .