빌드 구성 파일 만들기

이 페이지에서는 Cloud Build에서 빌드를 시작하는 데 사용할 수 있는 빌드 구성 파일 작성 방법을 설명합니다.

빌드 구성 파일은 Cloud Build가 작업을 수행하는 데 필요한 필드를 정의합니다. gcloud 명령줄 도구 또는 빌드 트리거를 사용하여 빌드를 시작하려면 빌드 구성 파일이 필요합니다. 빌드 구성 파일은 YAML 또는 JSON 구문을 사용하여 작성할 수 있습니다.

시작하기 전에

빌드 구성 개요를 읽고 빌드 구성 파일에 포함할 수 있는 필드에 대해 알아보세요.

빌드 구성 만들기

다음 단계에서는 기본 빌드 구성 파일을 만드는 방법을 설명합니다. 빌드 구성 파일의 각 필드는 수행하려는 작업의 일부를 정의합니다. 빌드 구성 파일의 유일한 필수 필드는 단계의 name 필드입니다. 다른 입력란은 선택사항입니다.

YAML

  1. 빌드 구성 파일을 만듭니다. 프로젝트 루트 디렉터리에 cloudbuild.yaml이라는 파일을 만듭니다. 이는 Cloud Build 구성 파일입니다.

  2. 단계 필드를 추가합니다. 빌드 구성 파일의 steps 섹션에는 Cloud Build에서 수행할 빌드 단계가 포함되어 있습니다.

    steps:
    
  3. 첫 번째 단계를 추가합니다. steps: 아래에 name 필드를 추가하고 작업을 실행할 컨테이너 이미지를 가리키도록 지정합니다. Cloud Build와 개발자 커뮤니티는 일반적인 도구와 언어가 설치된 몇 가지 컨테이너 이미지를 제공합니다. 빌드 단계에서 이러한 이미지(Cloud 빌더라고도 함) 또는 공개적으로 사용 가능한 이미지를 사용할 수 있습니다. 빌드 단계에서 사용할 수 있는 다양한 유형의 컨테이너 이미지에 대한 자세한 내용은 Cloud 빌더를 참조하세요.

    다음 스니펫은 Docker를 실행하는 컨테이너 이미지인 docker 빌더 gcr.io/cloud-builders/docker가 있는 빌드 단계를 보여줍니다.

    steps:
    - name: 'gcr.io/cloud-builders/docker'
    
  4. 단계 인수를 추가합니다. 단계의 args 필드는 인수 목록을 가져오고 name 필드로 참조되는 빌더에 전달합니다. name 필드의 빌더에 진입점이 있으면 목록의 args가 해당 진입점에 액세스하는 데 사용됩니다. name 필드의 빌더에 진입점이 없으면 args의 첫 번째 요소가 진입점으로 사용됩니다.

    아래 예시를 참조하세요.

    • build는 Docker 클라우드 빌더의 진입점입니다.
    • -t는 Docker 태그입니다.
    • us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image는 Artifact Registry에 빌드할 이미지의 이름입니다. 빌드 단계는 프로젝트 ID의 기본 대체를 사용하므로 이 값은 빌드 시간에 자동으로 대체됩니다.
    • .는 소스 코드가 현재 작업 디렉터리에 있음을 나타내는 소스 코드 위치입니다.

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image', '.']
      
  5. 단계를 더 추가합니다. 추가 name 필드를 포함하고 Cloud 빌더를 가리키도록 지정하여 빌드 구성 파일에 원하는 수의 빌드 단계를 추가할 수 있습니다.

    다음 스니펫에는 빌드 구성 파일에 대한 두 가지 추가 단계가 포함되어 있습니다.

    • docker push 명령어를 호출하고 이전 단계의 이미지 빌드를 Artifact Registry에 푸시하는 docker 빌드 단계
    • gcloud 진입점이 지정된 Google Cloud SDK 명령어의 빌드 단계: Artifact Registry의 컨테이너 이미지에서 Compute Engine 인스턴스를 만듭니다. Compute Engine 영역과 리전을 지정하기 위해 env 필드가 포함됩니다.

       - name: 'gcr.io/cloud-builders/docker'
         args: ['push', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image']
       - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
         entrypoint: 'gcloud'
         args: ['compute', 'instances', 'create-with-container', 'my-vm-name', '--container-image', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image']
         env:
         - 'CLOUDSDK_COMPUTE_REGION=us-central1'
         - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
      
  6. 추가 빌드 구성 필드를 포함합니다. machineType, tags 또는 timeout과 같은 필드를 포함하여 빌드를 추가로 구성할 수 있습니다. 빌드 구성 파일에 포함할 수 있는 필드의 전체 목록은 빌드 구성 개요를 참조하세요.

    다음 예시에서 gcr.io/google.com/cloudsdktool/cloud-sdk 빌드 단계는 240초 후에 타임아웃됩니다.

      - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
        entrypoint: 'gcloud'
        timeout: 240s
        args: ['compute', 'instances', 'create-with-container', 'my-vm-name', '--container-image', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image']
        env:
        - 'CLOUDSDK_COMPUTE_REGION=us-central1'
        - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
    

    기본 빌드 구성 파일의 전체 예시는 다음 스니펫을 참조하세요.

    steps:
      # Docker Build
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 
               'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage', 
               '.']
    
      # Docker Push
      - name: 'gcr.io/cloud-builders/docker'
        args: ['push', 
               'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage']
    
      # Entrypoint, timeout and environment variables
      - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
        entrypoint: 'gcloud'
        timeout: 240s
        args: ['compute', 'instances', 
               'create-with-container', 'my-vm-name',
               '--container-image', 
               'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage']
        env:
          - 'CLOUDSDK_COMPUTE_REGION=us-central1'
          - 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'

    이 예시에서는 컨테이너 이미지가 Artifact Registry에 저장됩니다. 빌드가 컨테이너가 아닌 아티팩트를 생성하면 artifacts 필드를 사용하여 Cloud Storage에 저장할 수 있습니다. 이 작업을 수행하는 방법에 대한 지침은 이미지 및 아티팩트 저장을 참조하세요.

JSON

  1. 빌드 구성 파일을 만듭니다. 프로젝트 루트 디렉터리에 cloudbuild.json이라는 파일을 만듭니다. 이는 Cloud Build 구성 파일입니다.

  2. 단계 필드를 추가합니다. 빌드 구성 파일의 steps 섹션에는 Cloud Build에서 수행할 빌드 단계가 포함되어 있습니다.

    {
       "steps":
    }
    
  3. 첫 번째 단계를 추가합니다. steps: 아래에 name 필드를 추가하고 작업을 실행할 컨테이너 이미지를 가리키도록 지정합니다. Cloud Build와 개발자 커뮤니티는 일반적인 도구와 언어가 설치된 몇 가지 컨테이너 이미지를 제공합니다. 빌드 단계에서 이러한 이미지(Cloud 빌더라고도 함) 또는 공개적으로 사용 가능한 이미지를 사용할 수 있습니다. 빌드 단계에서 사용할 수 있는 다양한 유형의 컨테이너 이미지에 대한 자세한 내용은 Cloud 빌더를 참조하세요.

    다음 스니펫은 Docker를 실행하는 컨테이너 이미지인 docker 빌더 gcr.io/cloud-builders/docker가 있는 빌드 단계를 보여줍니다.

    {
       "steps": [
          {
             "name": "gcr.io/cloud-builders/docker"
          }
       ]
    }
    
  4. 단계 인수를 추가합니다. 단계의 args 필드는 인수 목록을 가져오고 name 필드로 참조되는 빌더에 전달합니다. name 필드의 빌더에 진입점이 있으면 목록의 args가 해당 진입점에 액세스하는 데 사용됩니다. name 필드의 빌더에 진입점이 없으면 args의 첫 번째 요소가 진입점으로 사용됩니다.

    아래 예시를 참조하세요.

    • build는 Docker 클라우드 빌더의 진입점입니다.
    • -t는 Docker 태그입니다.
    • us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image는 Artifact Registry에 빌드할 이미지의 이름입니다. 빌드 단계는 프로젝트 ID의 기본 대체를 사용하므로 이 값은 빌드 시간에 자동으로 대체됩니다.
    • .는 소스 코드가 현재 작업 디렉터리에 있음을 나타내는 소스 코드 위치입니다.

      {
         "steps": [
            {
               "name": "gcr.io/cloud-builders/docker",
               "args": [
                  "build",
                  "-t",
                  "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage",
                  "."
               ]
            }
         ]
      }
      
  5. 단계를 더 추가합니다. 추가 name 필드를 포함하고 Cloud 빌더를 가리키도록 지정하여 빌드 구성 파일에 원하는 수의 빌드 단계를 추가할 수 있습니다.

    다음 스니펫에는 빌드 구성 파일에 대한 두 가지 추가 단계가 포함되어 있습니다.

    • docker push 명령어를 호출하고 이전 단계의 이미지 빌드를 Artifact Registry에 푸시하는 docker 빌드 단계
    • gcloud 진입점이 지정된 Google Cloud SDK 명령어의 빌드 단계: Artifact Registry의 컨테이너 이미지에서 Compute Engine 인스턴스를 만듭니다. Compute Engine 영역과 리전을 지정하기 위해 env 필드가 포함됩니다.

            {
               "name": "gcr.io/cloud-builders/docker",
               "args": [
                  "push",
                  "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
               ]
            },
            {
               "name": "gcr.io/google.com/cloudsdktool/cloud-sdk",
               "entrypoint": "gcloud",
               "args": [
                  "compute",
                  "instances",
                  "create-with-container",
                  "my-vm-name",
                  "--container-image",
                  "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
               ],
               "env": [
                  "CLOUDSDK_COMPUTE_REGION=us-central1",
                  "CLOUDSDK_COMPUTE_ZONE=us-central1-a"
               ]
            }
      
  6. 추가 빌드 구성 필드를 포함합니다. machineType, tags 또는 timeout과 같은 필드를 포함하여 빌드를 추가로 구성할 수 있습니다. 빌드 구성 파일에 포함할 수 있는 필드의 전체 목록은 빌드 구성 개요를 참조하세요.

    다음 예시에서 gcr.io/google.com/cloudsdktool/cloud-sdk 빌드 단계는 240초 후에 타임아웃됩니다.

          {
             "name": "gcr.io/google.com/cloudsdktool/cloud-sdk",
             "entrypoint": "gcloud",
             "timeout": "240s",
             "args": [
                "compute",
                "instances",
                "create-with-container",
                "my-vm-name",
                "--container-image",
                "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
             ],
             "env": [
                "CLOUDSDK_COMPUTE_REGION=us-central1",
                "CLOUDSDK_COMPUTE_ZONE=us-central1-a"
             ]
          }
    

    기본 빌드 구성 파일의 전체 예시는 다음 스니펫을 참조하세요.

    {
       "steps": [
          {
             "name": "gcr.io/cloud-builders/docker",
             "args": [
                "build",
                "-t",
                "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage",
                "."
             ]
          },
          {
             "name": "gcr.io/cloud-builders/docker",
             "args": [
                "push",
                "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
             ]
          },
          {
             "name": "gcr.io/google.com/cloudsdktool/cloud-sdk",
             "entrypoint": "gcloud",
             "timeout": "240s",
             "args": [
                "compute",
                "instances",
                "create-with-container",
                "my-vm-name",
                "--container-image",
                "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage"
             ],
             "env": [
                "CLOUDSDK_COMPUTE_REGION=us-central1",
                "CLOUDSDK_COMPUTE_ZONE=us-central1-a"
             ]
          }
       ]
    }
    

    이 예시에서는 컨테이너 이미지가 Artifact Registry에 저장됩니다. 빌드가 컨테이너가 아닌 아티팩트를 생성하면 artifacts 필드를 사용하여 Cloud Storage에 저장할 수 있습니다. 이 작업을 수행하는 방법에 대한 지침은 이미지 및 아티팩트 저장을 참조하세요.

다음 단계