Como criar um arquivo de configuração de build básico

Nesta página, descrevemos como criar um arquivo de configuração da versão que seja possível usar para iniciar uma versão no Cloud Build.

Um arquivo de configuração da versão define os campos necessários para o Cloud Build executar suas tarefas. Você precisará de um arquivo de configuração de versão, se estiver iniciando versões usando a ferramenta de linha de comando gcloud ou acionadores de versão. É possível gravar o arquivo de configuração da versão usando a sintaxe YAML ou JSON.

Antes de começar

Como criar uma configuração da versão

Confira nas etapas a seguir como criar um arquivo de configuração de compilação simples. Cada um dos campos no arquivo de configuração define uma parte da tarefa que você quer executar. O único campo obrigatório no arquivo de configuração de criação é o name de uma etapa, os outros campos são opcionais.

YAML

  1. Crie o arquivo de configuração de build. No diretório raiz do projeto, crie um arquivo com o nome cloudbuild.yaml. Esse é seu arquivo de configuração da versão do Cloud Build.

  2. Adicione o campo steps. A seção steps, no arquivo de configuração de versão, contém as etapas de criação que deverão ser realizadas pelo Cloud Build.

    steps:
    
  3. Adicione a primeira etapa. Em steps:, adicione um campo name e aponte-o para uma imagem de contêiner para executar sua tarefa. O Cloud Build e a respectiva comunidade de desenvolvedores fornecem várias imagens de contêiner com ferramentas e linguagens comuns instaladas. É possível usar qualquer uma dessas imagens, também conhecidas como Criadores de nuvem, ou qualquer imagem publicamente disponível em uma etapa da criação. Para receber informações sobre diferentes tipos de imagens de contêiner que podem ser usadas em uma etapa de criação, consulte Criadores de nuvem.

    O snippet a seguir mostra uma etapa de criação com um dockercriadorgcr.io/cloud-builders/docker que é uma imagem de contêiner em execução no Docker.

    steps:
    - name: 'gcr.io/cloud-builders/docker'
    
  4. Adicione os argumentos da etapa. O campo args de uma etapa recebe uma lista de argumentos e os transmite ao criador a que o campo name faz referência. Se o criador no campo name tiver um entrypoint, args na lista será usado para acessar esse entrypoint. Se o criador no campo name não tiver um entrypoint, o primeiro elemento em args será usado como o entrypoint.

    No exemplo a seguir:

    • build é o entrypoint para o cloud builder do Docker
    • -t é a tag do Docker
    • gcr.io/my-project/my-image é o nome da imagem a ser criada
    • . é o local do código-fonte

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
      
  5. Inclua todos os outros campos para a etapa. É possível adicionar mais campos à sua etapa de versão, como variáveis de ambiente e diretórios de trabalho, para configurar suas etapas de versão. Para ver uma descrição de todos os campos que podem ser incluídos em uma etapa da criação, consulte Etapas da criação.

    No exemplo a seguir, o campo timeout está incluído para especificar que a etapa docker expirará após 500s:

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/my-project/my-image', '.']
      timeout: 500s
    
  6. Adicione mais etapas. É possível adicionar qualquer número de etapas de versão ao arquivo de configuração de versão com a inclusão de campos name e o direcionamento deles para os criadores de nuvem.

    O snippet a seguir inclui mais duas etapas no arquivo de configuração de compilação:

    • uma etapa da criação do docker, para a invocar o comando docker push a fim de enviar a versão da imagem da etapa anterior ao Container Registry.
    • uma etapa da criação do kubectl para invocar o comando kubectl set image, que implanta a imagem em um cluster do Kubernetes Engine. O campo env está incluído para especificar a zona do Compute Engine e o cluster do Kubernetes Engine.

      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. Inclua configuração adicional da compilação. É possível configurar ainda mais a versão com a inclusão de campos como machineType e tags. Para ver a lista completa de campos que podem ser incluídos no arquivo de configuração de versão, consulte Visão geral da configuração de versão.

    O exemplo a seguir adiciona estes campos à build:

    • machineType que especifica o tamanho da máquina virtual para executar a build.
    • timeout que especifica o tempo que a versão leva para expirar.
    • tags para anotar a build.

      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. Armazene as imagens e os artefatos criados. Se a versão produzir imagens de contêiner, será possível armazená-las no Container Registry. Para isso, use o campo images.

    O exemplo a seguir armazena a imagem criada na etapa do Docker no 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']
    

    Se a versão produzir artefatos que não sejam de contêineres, eles poderão ser armazenados no Cloud Storage usando o campo artifacts. Para receber instruções sobre como fazer isso, consulte Como armazenar imagens e artefatos.

JSON

  1. Crie o arquivo de configuração de build. No diretório raiz do projeto, crie um arquivo com o nome cloudbuild.json. Esse é seu arquivo de configuração da versão do Cloud Build.

  2. Adicione o campo steps. A seção steps, no arquivo de configuração, contém as etapas de criação que serão executadas pelo Cloud Build.

    {
        "steps": [
        {
        }
        ]
    }
    
  3. Adicione a primeira etapa. Em "steps:", adicione um campo de nome e aponte-o para uma imagem de contêiner para executar sua tarefa. O Cloud Build e a comunidade de desenvolvedores dele fornecem várias imagens de contêiner com ferramentas e linguagens comuns instaladas. É possível usar qualquer uma dessas imagens, também conhecidas como Criadores de nuvem, ou qualquer imagem publicamente disponível em uma etapa da criação. Para receber informações sobre diferentes tipos de imagens de contêiner que podem ser usadas em uma etapa de criação, consulte Criadores de nuvem.

    O snippet a seguir mostra uma etapa de versão com um criador do Docker gcr.io/cloud-builders/docker, uma imagem de contêiner que executa o Docker.

    {
        "steps": [
        {
            "name": "gcr.io/cloud-builders/docker"
        }
        ]
    }
    
  4. Adicione os argumentos da etapa. O campo args de uma etapa recebe uma lista de argumentos e os transmite ao criador a que o campo name faz referência. Se o criador no campo name tiver um entrypoint, args na lista será usado para acessar esse entrypoint. Se o criador no campo name não tiver um entrypoint, o primeiro elemento em args será usado como o entrypoint.

    No exemplo a seguir:

    • build é o entrypoint para o cloud builder do Docker
    • -t é a tag do Docker
    • gcr.io/my-project/my-image é o nome da imagem a ser criada
    • . é o local do código-fonte

      {
          "steps": [
          {
              "name": "gcr.io/cloud-builders/docker",
              "args": [
                  "build",
                  "-t",
                  "gcr.io/my-project/my-image",
                  "."
              ]
          }
          ]
      }
      
  5. Inclua todos os outros campos para a etapa. É possível adicionar mais campos à sua etapa de versão, como variáveis de ambiente e diretórios de trabalho, para configurar suas etapas de versão. Para ver uma descrição de todos os campos que podem ser incluídos em uma etapa da criação, consulte Etapas da criação.

    No exemplo a seguir, o campo timeout está incluído para especificar que a etapa docker expirará após 500s:

    {
        "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/my-project/my-image",
                "."
            ],
            "timeout": "500s"
        }
        ]
    }
    
  6. Adicione mais etapas. É possível adicionar um número ilimitado de etapas de versão ao seu arquivo de configuração de versão ao incluir mais campos de nome e apontá-los para os criadores de nuvem.

    O snippet a seguir inclui mais duas etapas no arquivo de configuração de compilação:

    • uma etapa da criação do docker, para a invocar o comando docker push a fim de enviar a versão da imagem da etapa anterior ao Container Registry.
    • uma etapa da criação do kubectl para invocar o comando kubectl set image, que implanta a imagem em um cluster do Kubernetes Engine. O campo env está incluído para especificar a zona do Compute Engine e o cluster do Kubernetes Engine.

      {
          "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. Inclua configuração adicional da compilação. É possível configurar ainda mais a versão com a inclusão de campos como machineType e tags. Para ver a lista completa de campos que podem ser incluídos no arquivo de configuração de versão, consulte Visão geral da configuração de versão.

    O exemplo a seguir adiciona estes campos à build:

    • machineType que especifica o tamanho da máquina virtual para executar a build.
    • timeout que especifica o tempo que a versão leva para expirar.
    • tags para anotar a build.

      {
          "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. Armazene as imagens e os artefatos criados. Se a versão produzir imagens de contêiner, será possível armazená-las no Container Registry. Para isso, use o campo images.

    O exemplo a seguir armazena a imagem criada na etapa do Docker no 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"
        ]
    }
    

    Se a versão produzir artefatos que não sejam de contêineres, eles poderão ser armazenados no Cloud Storage usando o campo artifacts. Para receber instruções sobre como fazer isso, consulte Como armazenar imagens e artefatos.

A seguir