Inicia una compilación desde la línea de comandos y la API

En esta página, se describe cómo iniciar una compilación en Cloud Build de forma manual mediante la herramienta de línea de comandos de gcloud y la API de Cloud Build.

Antes de comenzar

Permisos de IAM obligatorios

Si quieres obtener instrucciones sobre cómo otorgar funciones de IAM, consulta Configura el acceso para miembros del proyecto.

Ejecuta compilaciones

gcloud

Usa un Dockerfile:

Tu Dockerfile contiene toda la información necesaria para compilar una imagen de Docker mediante Cloud Build.

Para ejecutar una solicitud de compilación mediante tu Dockerfile, ejecuta el siguiente comando desde el directorio que contiene el código de tu aplicación, Dockerfile, y cualquier otro elemento:

gcloud builds submit --tag gcr.io/project-id/image-name .

Aquí:

  • project-id es el nombre de tu proyecto de Cloud.
  • image-name es la imagen que se compilará.
  • . especifica que el código fuente se encuentra en el directorio de trabajo actual.

El nombre completo de la imagen que se compilará es gcr.io/project-id/image-name. En las imágenes enviadas a Container Registry, se usa el formato de nombre de registro.

Con el comando gcloud builds submit, se realiza lo siguiente:

  • Se comprime tu código de aplicación, Dockerfile y cualquier otro elemento del directorio actual, como lo indica .;
  • sube los archivos a un bucket de Cloud Storage;
  • inicia una compilación con los archivos subidos como entrada;
  • etiqueta la imagen mediante el nombre provisto; y
  • envía la imagen compilada a Container Registry.

A medida que la compilación avanza, su resultado se muestra en tu shell o ventana de terminal. Cuando se completa la compilación, debes ver un resultado similar al siguiente:

    DONE
    ---------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION STATUS
    $BUILD_ID                             2016-10-28T15:21:18+00:00  12S      SUCCESS

En el ejemplo anterior, $BUILD_ID es el identificador único de la compilación.

Usa el archivo de configuración de compilación de Cloud Build:

Para enviar una compilación mediante la configuración de compilación, ejecuta el siguiente comando:

    gcloud builds submit --config build-config source-code

Donde:

  • build-config es la ruta de acceso al archivo de configuración de compilación.
  • source-code es la ruta de acceso o URL del código fuente.

Cuando ejecutas gcloud builds submit por primera vez en un proyecto de Cloud, Cloud Build crea un bucket de Cloud Storage llamado [YOUR_PROJECT_NAME]_cloudbuild en ese proyecto. Cloud Build usa este bucket para almacenar cualquier código fuente que puedas usar en tus compilaciones. Cloud Build no borra automáticamente el contenido de este bucket. A fin de borrar los objetos que ya no utilizas para las compilaciones, puedes establecer la configuración del ciclo de vida en el bucket o borrar los objetos de forma manual.

Con el siguiente comando, se envía la solicitud de compilación cloudbuild.yaml mediante un código fuente archivado almacenado en un bucket de Cloud Storage.

    gcloud builds submit --config cloudbuild.yaml \
        gs://cloud-build-examples/node-docker-example.tar.gz

Puedes usar .. para especificar que el código fuente se encuentra en el directorio de trabajo actual:

    gcloud builds submit --config cloudbuild.yaml .

gcloudignore: cuando se incluye el código fuente para la compilación, el comando anterior sube todos los archivos del directorio especificado a Google Cloud Platform con el fin de compilar. Si deseas excluir ciertos archivos del directorio, puedes incluir un archivo con el nombre .gcloudignore en el directorio de carga de nivel superior. Los archivos que este especifique se ignorarán. Si no hay ningún archivo .gcloudignore presente en el directorio de carga de nivel superior, pero sí un archivo .gitignore, la herramienta de gcloud generará un archivo .gcloudignore compatible con Git que respeta tus archivos .gitignore. Para obtener más información, consulta la documentación de gcloudignore.

Si no tienes el código fuente para pasar a tu compilación, usa la marca --no-source, en la que build-config es la ruta de acceso al archivo de configuración de compilación:

    gcloud builds submit --config build-config --no-source

API

Para enviar la solicitud de compilación mediante curl en un grupo de trabajadores predeterminado, sigue estos pasos:

  1. Crea un archivo llamado request.json con el siguiente contenido:

    {
        "source": {
            "storageSource": {
                "bucket": "cloud-build-examples",
                "object": "node-docker-example.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/$PROJECT_ID/my-image",
                "."
            ]
        }],
        "images": [
            "gcr.io/$PROJECT_ID/my-image"
        ]
    }
    

    En esta solicitud de compilación, Cloud Build llama al paso de compilación docker con los argumentos build -t gcr.io/$PROJECT_ID/cb-demo-img ..

    El nombre completo de la imagen que se compilará es gcr.io/$PROJECT_ID/cb-demo-img. En las imágenes enviadas a Container Registry, se usa el formato de nombre de registro.

    La fuente del código para la compilación está en un archivo tar comprimido, node-docker-example.tar.gz. El archivo se almacena en un bucket de Cloud Storage con el nombre cloud-build-examples.

  2. Ejecuta el siguiente comando, en el que project-id es tu ID del proyecto de Cloud:

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/project-id/locations/global/builds
    

    En este comando, curl envía request.json en una llamada POST al extremo builds para el método de la API projects.builds.create.

    El comando muestra detalles sobre tu compilación en tu shell o ventana de terminal. El resultado es una respuesta JSON con un aspecto similar al siguiente:

    {
        "name": "operations/build/$PROJECT-ID/NmZhZW...",
        "metadata": {
            "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
            "build": {
                "id": $BUILD-ID,
                "status": "QUEUED",
                "source": {
                    "storageSource": {
                        "bucket": "cloud-build-examples",
                        "object": "node-docker-example.tar.gz"
                    }
                },
                "createTime": "2017-05-12T18:58:07.341526Z",
                "steps": [
                {
                    "name": "gcr.io/cloud-builders/docker",
                    "args": [
                        "build",
                        "-t",
                        "gcr.io/$PROJECT-ID/cb-demo-img",
                        "."
                    ]
                }
                ],
                "timeout": "600s",
                "images": [
                    "gcr.io/$PROJECT-ID/cb-demo-img"
                ],
                "projectId": $PROJECT-ID,
                "logsBucket": "gs://...",
                "sourceProvenance": {
                    "resolvedStorageSource": {
                        "bucket": "cloud-build-examples",
                        "object": "node-docker-example.tar.gz",
                        "generation": "..."
                    }
                },
                "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=$PROJECT-ID"
            }
        }
    }
    

    La respuesta JSON se modela mediante el recurso Operation en la API de Cloud Build. El campo metadata se modela mediante el recurso Build. El estado QUEUED indica que la compilación se encuentra a la espera de la ejecución.

Para enviar la solicitud de compilación mediante curl en un grupo de trabajadores personalizados, sigue estos pasos:

  1. Crea un archivo llamado request.json con el siguiente contenido:

    {
        "source": {
            "storageSource": {
                "bucket": "cloud-build-examples",
                "object": "node-docker-example.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/$PROJECT_ID/my-image",
                "."
            ]
        }],
        "images": [
            "gcr.io/$PROJECT_ID/my-image"
        ]
    }
    

    En esta solicitud de compilación, Cloud Build llama al paso de compilación docker con los argumentos build -t gcr.io/$PROJECT_ID/cb-demo-img ..

    El nombre completo de la imagen que se compilará es gcr.io/$PROJECT_ID/cb-demo-img. En las imágenes enviadas a Container Registry, se usa el formato de nombre de registro.

    La fuente del código para la compilación está en un archivo tar comprimido, node-docker-example.tar.gz. El archivo se almacena en un bucket de Cloud Storage con el nombre cloud-build-examples.

  2. Ejecuta el siguiente comando, en el que project-id es el ID del proyecto de Cloud y REGION es la región en la que creaste el grupo de trabajadores personalizados:

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/project-id/REGION/global/builds
    

    En este comando, curl envía request.json en una llamada POST al extremo builds para el método de la API projects.builds.create.

¿Qué sigue?