기본 빌드 구성 파일 만들기

이 페이지에서는 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 태그입니다.
    • gcr.io/my-project/my-image는 빌드할 이미지의 이름입니다.
    • .는 소스 코드의 위치입니다.

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
      
  5. 단계에 추가 필드를 포함합니다. 빌드 단계에 환경 변수 및 작업 디렉토리 같은 추가 필드를 포함하여 빌드 단계를 구성할 수 있습니다. 빌드 단계에 포함할 수 있는 모든 필드에 대한 설명은 빌드 단계를 참조하세요.

    다음 예시에서 500초 후 docker 단계가 시간 초과됨을 지정하기 위해 timeout 필드가 포함됩니다.

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
      timeout: 500s
    
  6. 단계를 더 추가합니다. 추가 name 필드를 포함하고 Cloud 빌더를 가리키도록 지정하여 빌드 구성 파일에 원하는 수의 빌드 단계를 추가할 수 있습니다.

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

    • docker push 명령어를 호출하고 이전 단계의 이미지 빌드를 Container Registry에 푸시하는 docker 빌드 단계.
    • Kubernetes Engine 클러스터에 이미지를 배포하는 kubectl set image 명령어를 호출하는 kubectl 빌드 단계. Compute Engine 영역과 Kubernetes Engine 클러스터를 지정하기 위해 env 필드가 포함됩니다.

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
        timeout: 500s
      - name: 'gcr.io/cloud-builders/docker'
        args: ['push', 'gcr.io/my-project/my-image']
      - name: 'gcr.io/cloud-builders/kubectl'
        args: ['set', 'image', 'deployment/my-deployment', 'my-container=gcr.io/my-project/my-image']
        env:
        - 'CLOUDSDK_COMPUTE_ZONE=us-east4-b'
        - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
      
  7. 추가 빌드 구성을 포함합니다. machineTypetags와 같은 필드를 포함하여 빌드를 추가로 구성할 수 있습니다. 빌드 구성 파일에 포함할 수 있는 필드의 전체 목록은 빌드 구성 개요를 참조하세요.

    다음 예시에서는 빌드에 다음 필드를 추가합니다.

    • machineType - 빌드를 실행할 가상 머신 크기를 지정합니다.
    • timeout - 빌드 제한시간을 지정합니다.
    • tags - 빌드에 주석을 답니다.

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
        timeout: 500s
      - name: 'gcr.io/cloud-builders/docker'
        args: ['push', 'gcr.io/my-project/my-image']
      - name: 'gcr.io/cloud-builders/kubectl'
        args: ['set', 'image', 'deployment/my-deployment', 'my-container=gcr.io/my-project/my-image']
        env:
        - 'CLOUDSDK_COMPUTE_ZONE=us-east4-b'
        - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
      options:
          machineType: 'N1_HIGHCPU_8'
      timeout: 660s
      tags: ['mytag1', 'mytag2']
      
  8. 빌드된 이미지와 아티팩트를 저장합니다. 빌드가 컨테이너 이미지를 생성하면 Container Registry에 저장하도록 선택할 수 있습니다. images 필드를 사용하여 이 작업을 수행할 수도 있습니다.

    다음 예에서는 docker 단계에서 빌드된 이미지를 Container Registry에 저장합니다.

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
      timeout: 500s
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/my-project/my-image']
    - name: 'gcr.io/cloud-builders/kubectl'
      args: ['set', 'image', 'deployment/my-deployment', 'my-container=gcr.io/my-project/my-image']
      env:
      - 'CLOUDSDK_COMPUTE_ZONE=us-east4-b'
      - 'CLOUDSDK_CONTAINER_CLUSTER=my-cluster'
    options:
        machineType: 'N1_HIGHCPU_8'
    timeout: 660s
    tags: ['mytag1', 'mytag2']
    images: ['gcr.io/my-project/myimage']
    

    빌드가 컨테이너가 아닌 아티팩트를 생성하면 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 태그입니다.
    • gcr.io/my-project/my-image는 빌드할 이미지의 이름입니다.
    • .는 소스 코드의 위치입니다.

      {
          "steps": [
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "build",
                  "-t",
                  "gcr.io/my-project/my-image",
                  "."
              ]
          }
          ]
      }
      
  5. 단계에 추가 필드를 포함합니다. 빌드 단계에 환경 변수 및 작업 디렉토리 같은 추가 필드를 포함하여 빌드 단계를 구성할 수 있습니다. 빌드 단계에 포함할 수 있는 모든 필드에 대한 설명은 빌드 단계를 참조하세요.

    다음 예시에서 500초 후 docker 단계가 시간 초과됨을 지정하기 위해 timeout 필드가 포함됩니다.

    {
        "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/my-project/my-image",
                "."
            ],
            "timeout": "500s"
        }
        ]
    }
    
  6. 단계를 더 추가합니다. 추가 name 필드를 포함하고 Cloud 빌더를 가리키도록 지정하여 빌드 구성 파일에 원하는 수의 빌드 단계를 추가할 수 있습니다.

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

    • docker push 명령어를 호출하고 이전 단계의 이미지 빌드를 Container Registry에 푸시하는 docker 빌드 단계.
    • Kubernetes Engine 클러스터에 이미지를 배포하는 kubectl set image 명령어를 호출하는 kubectl 빌드 단계. Compute Engine 영역과 Kubernetes Engine 클러스터를 지정하기 위해 env 필드가 포함됩니다.

      {
          "steps": [
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "build",
                  "-t",
                  "gcr.io/my-project/my-image",
                  "."
              ],
              "timeout": "500s"
          },
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "push",
                  "gcr.io/my-project/my-image",
              ],
          },
          {
              "name": "gcr.io/cloud-builders/kubectl",
              "args": [
                  "set",
                  "image",
                  "deployment/my-deployment",
                  "my-container=gcr.io/my-project/my-image"
              ],
              "env": [
                  "CLOUDSDK_COMPUTE_ZONE=us-east4-b",
                  "CLOUDSDK_CONTAINER_CLUSTER=my-cluster"
              ]
          }
          ]
      }
      
  7. 추가 빌드 구성을 포함합니다. machineTypetags와 같은 필드를 포함하여 빌드를 추가로 구성할 수 있습니다. 빌드 구성 파일에 포함할 수 있는 필드의 전체 목록은 빌드 구성 개요를 참조하세요.

    다음 예시에서는 빌드에 다음 필드를 추가합니다.

    • machineType - 빌드를 실행할 가상 머신 크기를 지정합니다.
    • timeout - 빌드 제한시간을 지정합니다.
    • tags - 빌드에 주석을 답니다.

      {
          "steps": [
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "build",
                  "-t",
                  "gcr.io/my-project/my-image",
                  "."
              ],
              "timeout": "500s"
          },
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "push",
                  "gcr.io/my-project/my-image",
              ],
          },
          {
              "name": "gcr.io/cloud-builders/kubectl",
              "args": [
                  "set",
                  "image",
                  "deployment/my-deployment",
                  "my-container=gcr.io/my-project/my-image"
              ],
              "env": [
                  "CLOUDSDK_COMPUTE_ZONE=us-east4-b",
                  "CLOUDSDK_CONTAINER_CLUSTER=my-cluster"
              ]
          }
          ],
          "options": {
              "machineType": "N1_HIGHCPU_8"
          },
          "timeout": "660s",
          "tags": [
              "mytag1",
              "mytag2"
          ]
      }
      
  8. 빌드된 이미지와 아티팩트를 저장합니다. 빌드가 컨테이너 이미지를 생성하면 Container Registry에 저장하도록 선택할 수 있습니다. images 필드를 사용하여 이 작업을 수행할 수도 있습니다.

    다음 예에서는 docker 단계에서 빌드된 이미지를 Container Registry에 저장합니다.

    {
        "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/my-project/my-image",
                "."
            ],
            "timeout": "500s"
        },
        {
                "name": "gcr.io/cloud-builders/docker",
                "args": [
                    "push",
                    "gcr.io/my-project/my-image",
                ],
        },
        {
            "name": "gcr.io/cloud-builders/kubectl",
            "args": [
                "set",
                "image",
                "deployment/my-deployment",
                "my-container=gcr.io/my-project/my-image"
            ],
            "env": [
                "CLOUDSDK_COMPUTE_ZONE=us-east4-b",
                "CLOUDSDK_CONTAINER_CLUSTER=my-cluster"
            ]
        }
        ],
        "options": {
            "machineType": "N1_HIGHCPU_8"
        },
        "timeout": "660s",
        "tags": [
            "mytag1",
            "mytag2"
        ],
        "images": [
            "gcr.io/my-project/myimage"
        ]
    }
    

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

다음 단계