빌드 아티팩트 저장

빌드가 바이너리 또는 tarball과 같은 아티팩트를 생성하는 경우, 이를 Cloud Storage 또는 비공개 타사 저장소에 저장하도록 선택할 수 있습니다.

이 페이지에서는 Cloud Storage에서 빌드 아티팩트를 저장하는 방법을 설명합니다. 컨테이너 이미지 저장에 대한 자세한 내용은 컨테이너 이미지 빌드를 참조하세요.

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/some/folder)
  • [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/some/folder)
  • [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.classgs://[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.yamlgs://[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.javaHelloWorld.classgs://[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"
            ]
        }
    }
}

와일드 카드 문자를 사용하여 둘 이상의 아티팩트 업로드

여러 아티팩트를 업로드할 때 pathsgsutil 와일드 카드 문자를 사용하여 여러 파일을 지정할 수 있습니다.

다음 예시에서는 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에서 자동으로 폴더를 만듭니다.

아래 예시에서는 빌드가 실행된 클라우드 프로젝트의 이름이 포함된 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"
            ]
        }
    }
}

Artifact Registry에 아티팩트 저장

Artifact Registry는 Container Registry의 후속 버전입니다. 이를 사용하면 Docker 이미지, Maven 패키지, npm 패키지가 지원되는 확장 가능한 통합 저장소 서비스에 아티팩트를 저장할 수 있습니다. Artifact Registry에서 빌드 아티팩트를 저장하기 위한 Cloud Build 구성에 대한 자세한 내용은 Cloud Build와 통합을 참조하세요. 컨테이너 이미지를 빌드하고 아티팩트를 저장할 때 Artifact Registry와 Container Registry의 차이점에 대해 알아보려면 Google Cloud에서 빌드 및 배포 변경사항을 참조하세요.

다음 단계