Criar um arquivo de configuração do build

Nesta página, descrevemos como criar um arquivo de configuração do build que você pode usar para iniciar um build 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 do build se estiver iniciando builds usando a ferramenta de linha de comandogcloud ou gatilhos de build. É possível gravar o arquivo de configuração da versão usando a sintaxe YAML ou JSON.

Antes de começar

Leia Visão geral da configuração do build para saber mais sobre os campos que podem ser incluídos em um arquivo de configuração do build.

Como criar uma configuração de compilação

Confira nas etapas a seguir como criar um arquivo de configuração de compilação básico. Cada um dos campos no arquivo de configuração do build define uma parte da tarefa que você quer executar. O único campo obrigatório no arquivo de configuração do build é o campo name de uma etapa. Todos 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 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 sua comunidade de desenvolvedores fornece várias imagens de contêiner com ferramentas e linguagens comuns instaladas. É possível usar qualquer uma dessas imagens (também conhecidas como Cloud Builders) ou qualquer imagem publicamente disponível em uma etapa de build. 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 builder no campo name tiver um entrypoint, args na lista serão usados para acessar esse entrypoint. Se o criador no campo name não tiver um entrypoint, o primeiro elemento em args é usado como o entrypoint.

    Estes são os elementos do exemplo a seguir:

    • build é o entrypoint para o cloud builder do Docker.
    • -t é a tag do Docker.
    • us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image é o nome da imagem a ser criada no Artifact Registry. A etapa do build usa a substituição padrão para o ID do projeto, portanto, esse valor é automaticamente substituído no tempo de compilação.
    • . é o local do código-fonte, que indica que o código-fonte está no diretório de trabalho atual.

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: ['build', '-t', 'us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image', '.']
      
  5. 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 do build do docker para invocar o comando docker push a fim de enviar o build da imagem da etapa anterior ao Artifact Registry.
    • Uma etapa do build para o comando do SDK do Google Cloud com o entrypoint gcloud especificado, que cria uma instância do Compute Engine a partir da imagem do contêiner no Artifact Registry. O campo env está incluído para especificar a zona e a região do Compute Engine.

       - 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. Inclua outros campos de configuração do build. É possível configurar ainda mais o build com a inclusão de campos como machineType, tags, ou timeout. Para ver a lista completa de campos que você pode incluir no arquivo de configuração do build, consulte Visão geral da configuração do build.

    No exemplo a seguir, a etapa de build gcr.io/google.com/cloudsdktool/cloud-sdk expira após 240 segundos.

      - 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'
    

    Veja o seguinte snippet para o exemplo completo de um arquivo de configuração do build básico:

    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'

    No exemplo, as imagens de contêiner são armazenadas no Artifact Registry. Se o build 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 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 sua comunidade de desenvolvedores fornece várias imagens de contêiner com ferramentas e linguagens comuns instaladas. É possível usar qualquer uma dessas imagens (também conhecidas como Cloud Builders) ou qualquer imagem publicamente disponível em uma etapa de build. 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 builder no campo name tiver um entrypoint, args na lista serão usados para acessar esse entrypoint. Se o criador no campo name não tiver um entrypoint, o primeiro elemento em args é usado como o entrypoint.

    Estes são os elementos do exemplo a seguir:

    • build é o entrypoint para o cloud builder do Docker.
    • -t é a tag do Docker.
    • us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/my-image é o nome da imagem a ser criada no Artifact Registry. A etapa do build usa a substituição padrão para o ID do projeto, portanto, esse valor é automaticamente substituído no tempo de compilação.
    • . é o local do código-fonte, que indica que o código-fonte está no diretório de trabalho atual.

      {
         "steps": [
            {
               "name": "gcr.io/cloud-builders/docker",
               "args": [
                  "build",
                  "-t",
                  "us-central1-docker.pkg.dev/${PROJECT_ID}/my-docker-repo/myimage",
                  "."
               ]
            }
         ]
      }
      
  5. 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 do build do docker para invocar o comando docker push a fim de enviar o build da imagem da etapa anterior ao Artifact Registry.
    • Uma etapa do build para o comando do SDK do Google Cloud com o entrypoint gcloud especificado, que cria uma instância do Compute Engine a partir da imagem do contêiner no Artifact Registry. O campo env está incluído para especificar a zona e a região do Compute Engine.

            {
               "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. Inclua outros campos de configuração do build. É possível configurar ainda mais o build com a inclusão de campos como machineType, tags, ou timeout. Para ver a lista completa de campos que você pode incluir no arquivo de configuração do build, consulte Visão geral da configuração do build.

    No exemplo a seguir, a etapa de build gcr.io/google.com/cloudsdktool/cloud-sdk expira após 240 segundos.

          {
             "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"
             ]
          }
    

    Veja o seguinte snippet para o exemplo completo de um arquivo de configuração do build básico:

    {
       "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"
             ]
          }
       ]
    }
    

    No exemplo, as imagens de contêiner são armazenadas no Artifact Registry. Se o build 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