이 페이지에서는 Cloud Storage에서 빌드 아티팩트를 저장하는 방법을 설명합니다.
빌드 아티팩트를 저장하려면 Artifact Registry를 사용하는 것이 좋습니다. Artifact Registry는 Cloud Build와 통합하여 아티팩트를 비공개 또는 공개 저장소에 안전하게 저장하고 관리할 수 있는 Google Cloud 제품입니다. Artifact Registry에 아티팩트를 저장하면 다음을 수행할 수 있습니다.
- Artifact Analysis를 사용하여 컨테이너 메타데이터를 관리하고 컨테이너 취약점을 스캔합니다.
- Binary Authorization으로 배포 정책을 적용합니다.
- Google Kubernetes Engine에서 이미지 스트리밍 사용은 대형 컨테이너 이미지에 특히 유용합니다.
Artifact Registry에서 빌드의 패키지와 이미지를 저장하도록 Cloud Build를 구성하는 방법은 Artifact Registry에 아티팩트 저장을 참조하세요.
Cloud Storage에 아티팩트 저장
Cloud Storage에 컨테이너가 아닌 아티팩트를 저장하려면 artifacts
필드를 아티팩트를 저장할 버킷의 위치와 하나 이상의 아티팩트에 대한 경로와 함께 빌드 구성 파일에 추가합니다.
YAML
artifacts:
objects:
location: [STORAGE_LOCATION]
paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]
각 항목의 의미는 다음과 같습니다.
[STORAGE_LOCATION]
: Cloud Storage 버킷 또는 Cloud Build가 아티팩트를 저장해야 하는 버킷 내 폴더(예:gs://mybucket
또는gs://mybucket/myproject/builds
) 기존 버킷 이름을 찾으려면 버킷 나열 또는 새 버킷 만들기를 참조하세요.[ARTIFACT_PATH]
: 하나 이상의 아티팩트에 대한 경로.[ARTIFACT_PATH]
는 작업 디렉터리를 기준으로 합니다. 이는 Cloud Build의 기본 작업 디렉터리인/workspace
이거나dir
필드를 사용하여 설정한 작업 디렉터리일 수 있습니다.
JSON
{
"artifacts": {
"objects": {
"location": [
"[STORAGE_LOCATION]"
],
"paths": [
[
"[ARTIFACT_PATH]"
],
[
"[ARTIFACT_PATH]"
],
"..."
]
}
}
}
각 항목의 의미는 다음과 같습니다.
[STORAGE_LOCATION]
: Cloud Storage 버킷 또는 Cloud Build가 아티팩트를 저장해야 하는 버킷 내 폴더(예:gs://mybucket
또는gs://mybucket/myproject/builds
) 기존 버킷 이름을 찾으려면 버킷 나열 또는 새 버킷 만들기를 참조하세요.[ARTIFACT_PATH]
: 하나 이상의 아티팩트에 대한 경로.[ARTIFACT_PATH]
는 작업 디렉터리를 기준으로 합니다. 이는 Cloud Build의 기본 작업 디렉터리인/workspace
이거나dir
필드를 사용하여 설정한 작업 디렉터리일 수 있습니다.
Cloud Storage에 아티팩트를 저장할 때 다음 주의사항에 유의하세요.
아티팩트를 업로드할 버킷은 하나만 지정할 수 있으며 본인이 버킷의 소유자여야 합니다. 버킷의 유효한 디렉터리 경로를 지정할 수 있습니다.
원하는 수의 아티팩트를 업로드할 수 있지만 아티팩트 경로는 최대 100개까지만 지정할 수 있습니다.
이름이 동일한 아티팩트가 이미 있는 버킷에 아티팩트를 업로드하면 기존의 아티팩트가 새 아티팩트로 바뀝니다. 기존 아티팩트가 이름이 동일한 최신 아티팩트로 바뀌지 않도록 하려면 버킷에 객체 버전 관리를 사용 설정하면 됩니다.
빌드가 성공적으로 완료되면 [STORAGE_LOCATION]/artifacts-$BUILD_ID.json
에 있는 JSON 매니페스트 파일에서 업로드 결과를 찾을 수 있습니다.
JSON 매니페스트 파일에는 다음과 같은 필드가 있습니다.
location
: 이는 아티팩트가 저장되는 Cloud Storage 내 위치를 지정하며,gs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]
형식입니다. 생성 번호를 사용하여 Cloud Storage 버킷의 데이터 버전을 고유하게 식별할 수 있습니다.file_hash
: 해시 유형과 값을 지정합니다. 해시 유형은 항상 2이며 MD5 해시가 수행되었음을 지정합니다.
아티팩트 예시
다음 예시에서는 빌드 구성 파일에서 Artifacts
필드를 사용하는 방법을 보여줍니다. 이 모든 예시에서 [VALUES_IN_BRACKETS]
는 적절한 값으로 바꾸세요.
파일 및 폴더 업로드
아래의 빌드 구성 파일은 helloworld.class
를 gs://[STORAGE_LOCATION]/
에 업로드합니다.
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['HelloWorld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"HelloWorld.class"
]
}
}
}
둘 이상의 아티팩트를 업로드하려면 각 아티팩트의 경로를 쉼표로 구분하여 지정하세요. 다음 예시는 HelloWorld.java
, HelloWorld.class
, cloudbuild.yaml
을 gs://[STORAGE_LOCATION]/
에 업로드합니다.
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"HelloWorld.java",
"HelloWorld.class",
"cloudbuild.yaml"
]
}
}
}
버킷의 유효한 디렉터리 경로에 아티팩트를 업로드할 수도 있습니다. 다음 예시는 HelloWorld.java
및 HelloWorld.class
를 gs://[BUCKET_NAME]/[FOLDER_NAME]
에 업로드합니다.
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'
paths: ['HelloWorld.java', 'HelloWorld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[BUCKET_NAME]/[FOLDER_NAME]",
"paths": [
"HelloWorld.java",
"HelloWorld.class"
]
}
}
}
와일드 카드 문자를 사용하여 둘 이상의 아티팩트 업로드
여러 아티팩트를 업로드할 때 paths
에 와일드 카드 문자를 사용하여 여러 파일을 지정할 수 있습니다.
다음 예시에서는 classes
라는 파일을 인수로 사용합니다. 여기에는 컴파일할 .java
파일의 이름이 포함되어 있습니다. 그런 다음 .class
파일을 지정된 Cloud Storage 버킷에 업로드합니다.
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['@classes']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['*.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"@classes"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"*.class"
]
}
}
}
버킷 위치에 대체 변수 사용
대체 변수를 사용하여 Cloud Storage 버킷 내에서 폴더를 지정할 수 있습니다. 지정한 폴더가 없으면 Cloud Build에서 자동으로 폴더를 만듭니다.
아래 예시에서는 빌드가 실행된 Google Cloud 프로젝트의 이름이 포함된 Cloud Storage 경로에 아티팩트를 업로드합니다(예: gs://mybucket/myproject/).
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['@classes']
artifacts:
objects:
location: 'gs://[BUCKET_NAME]/$PROJECT_ID'
paths: ['helloworld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"@classes"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[BUCKET_NAME]/$PROJECT_ID",
"paths": [
"helloworld.class"
]
}
}
}
다음 단계
Go
프로젝트 빌드 방법 알아보기- 트리거를 사용하여 수동으로 빌드를 시작하는 방법 알아보기
- 빌드 오류 문제 해결 방법 알아보기