Almacena imágenes y artefactos

Si la compilación produce artefactos como imágenes de contenedor, binarios o tarballs, puedes elegir almacenarlos en Container Registry, Cloud Storage o cualquier repositorio de terceros privado.

En esta página, se explica cómo almacenar imágenes de contenedor en Container Registry y artefactos sin contendor en Cloud Storage.

Almacena imágenes en Container Registry

Para almacenar una imagen de contenedor en Container Registry después de completar tu compilación, agrega un campo images al archivo de configuración de la compilación que esté orientado a una o más imágenes:

YAML

images: [[IMAGE_NAME], [IMAGE_NAME], ...]

En el que [IMAGE_NAME] es el nombre de la imagen que quieres almacenar como gcr.io/myproject/myimage.

JSON

{
    "images": [
    [
        "IMAGE_NAME"
    ],
    [
        "IMAGE_NAME"
    ],
    "..."
    ]
}

En el que [IMAGE_NAME] es el nombre de la imagen que quieres almacenar como gcr.io/myproject/myimage.

En el ejemplo siguiente, se compila una imagen de Docker llamada myimage que se almacena en gcr.io/myproject/:

YAML

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
images: ['gcr.io/myproject/myimage']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/docker",
        "args": [
            "build",
            "-t",
            "gcr.io/myproject/myimage",
            "."
        ]
    }
    ],
    "images": [
        "gcr.io/myproject/myimage"
    ]
}

Para almacenar la imagen en Container Registry como parte de tu flujo de compilación, agrega un paso de compilación docker y pasa argumentos para invocar el comando push:

YAML

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', '[IMAGE_NAME]']

En el que [IMAGE_NAME] es el nombre de la imagen que quieres almacenar en Container Registry como gcr.io/myproject/myimage.

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/docker",
        "args": [
            "push",
            "[IMAGE_NAME]"
        ]
    }
    ]
}

En el que [IMAGE_NAME] es el nombre de la imagen que quieres almacenar en Container Registry como gcr.io/myproject/myimage.

En el ejemplo siguiente, se compila una imagen de Docker llamada myimage y, para almacenar la imagen, se agrega otro paso de compilación de Docker y se envía la imagen a Container Registry:

YAML

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/myproject/myimage']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/docker",
        "args": [
            "build",
            "-t",
            "gcr.io/myproject/myimage",
            "."
        ]
    },
    {
        "name": "gcr.io/cloud-builders/docker",
        "args": [
            "push",
            "gcr.io/myproject/myimage"
        ]
    }
    ]
}

La diferencia entre el uso del campo images y el comando de Docker push es que, si usas el campo images, la imagen almacenada se mostrará en los resultados de la compilación. Esto incluye la página Descripción de compilación para una compilación en GCP Console, los resultados de Build.get() y los resultados de gcloud builds list. Sin embargo, si usas el comando de Docker push para almacenar la imagen de compilación, esta no se mostrará en los resultados de la compilación.

Para almacenar una imagen como parte de tu flujo de compilación y mostrarla en los resultados de la compilación, usa el comando de Docker push y el campo images en tu configuración de compilación:

YAML

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', '[IMAGE_NAME]']
images: ['[IMAGE_NAME]']

En el que [IMAGE_NAME] es el nombre de la imagen, como gcr.io/myproject/myimage.

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/docker",
        "args": [
            "push",
            "[IMAGE_NAME]"
        ]
    }
    ],
    "images": [
        "[IMAGE_NAME]"
    ]
}

En el que [IMAGE_NAME] es el nombre de la imagen, como gcr.io/myproject/myimage.

En el ejemplo siguiente, se compila una imagen de Docker llamada myimage y se almacena como parte del flujo de la compilación una vez terminada:

YAML

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/myproject/myimage', '.']
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/myproject/myimage']
images: ['gcr.io/myproject/myimage']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/docker",
        "args": [
            "build",
            "-t",
            "gcr.io/myproject/myimage",
            "."
        ]
    },
    {
        "name": "gcr.io/cloud-builders/docker",
        "args": [
            "push",
            "gcr.io/myproject/myimage"
        ]
    }
    ],
    "images": [
        "gcr.io/myproject/myimage"
    ]
}

Almacena artefactos en Cloud Storage

Para almacenar artefactos sin contenedores en Cloud Storage, agrega un campo artifacts a tu archivo de configuración de la compilación con la ubicación del depósito para almacenar el artefacto y la ruta en uno o más artefactos:

YAML

artifacts:
  objects:
    location: [STORAGE_LOCATION]
    paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]

En donde,

  • [STORAGE_LOCATION]: un depósito de Cloud Storage o una carpeta dentro del depósito en la que Cloud Build debe almacenar el artefacto, como gs://mybucket o gs://mybucket/some/folder
  • [ARTIFACT_PATH]: ruta a uno o más artefactos

JSON

{
    "artifacts": {
        "objects": {
            "location": [
                "[STORAGE_LOCATION]"
            ],
            "paths": [
            [
                "[ARTIFACT_PATH]"
            ],
            [
                "[ARTIFACT_PATH]"
            ],
            "..."
            ]
        }
    }
}

En donde,

  • [STORAGE_LOCATION]: un depósito de Cloud Storage o una carpeta dentro del depósito en la que Cloud Build debe almacenar el artefacto, como gs://mybucket o gs://mybucket/some/folder
  • [ARTIFACT_PATH]: ruta a uno o más artefactos

Solo puedes especificar un depósito para subir los artefactos y debes ser el propietario del depósito. Puedes especificar una ruta de directorio válida en el depósito.

Puedes subir cualquier cantidad de artefactos, pero solo puedes especificar hasta cien rutas de artefactos.

Si subes un artefacto a un depósito que ya tiene un artefacto con el mismo nombre, el nuevo reemplazará al existente. Puedes habilitar Control de versiones de objeto en tu depósito si no quieres que el artefacto nuevo reemplace al existente con el mismo nombre.

Después de completar la compilación con éxito, puedes encontrar los resultados cargados en el archivo de manifiesto JSON ubicado en [STORAGE_LOCATION]/artifacts-$BUILD_ID.json.

El archivo de manifiesto JSON contiene los campos siguientes:

  • location: especifica la ubicación en Cloud Storage donde se almacena el artefacto y tiene el formato gs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]. Puedes usar el número de generación para identificar de manera única una versión de los datos en el depósito de Cloud Storage.
  • file_hash: especifica el tipo de hash y el valor. El tipo de hash es siempre 2, lo que especifica que se realizó el hash MD5.

Ejemplos de artefactos

En los ejemplos siguientes, se muestra cómo puedes usar el campo Artifacts en el archivo de configuración de la compilación. En todos los ejemplos, reemplaza [VALUES_IN_BRACKETS] con los valores correctos.

Sube archivos y carpetas

El archivo de configuración de la compilación que se muestra a continuación sube helloworld.class al gs://[STORAGE_LOCATION]/:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.class"
            ]
        }
    }
}

Para subir más de un artefacto, especifica la ruta a cada artefacto separada por una coma. En el ejemplo siguiente, se suben HelloWorld.java, HelloWorld.class y cloudbuild.yaml a gs://[STORAGE_LOCATION]/:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class",
                "cloudbuild.yaml"
            ]
        }
    }
}

También puedes subir los artefactos a una ruta de directorio válida en el depósito. En el ejemplo siguiente, se suben HelloWorld.java y HelloWorld.class a gs://[BUCKET_NAME]/[FOLDER_NAME]:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'
    paths: ['HelloWorld.java', 'HelloWorld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/[FOLDER_NAME]",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class"
            ]
        }
    }
}

Usa caracteres comodín para subir más de un artefacto

Cuando subes muchos artefactos, puedes usar caracteres comodín de gsutil en paths para especificar archivos múltiples.

En el ejemplo siguiente, se toma como argumento un archivo llamado classes, que contiene los nombres del archivo .java para compilar. Después se sube cualquier archivo .class al depósito de Cloud Storage especificado:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['*.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "*.class"
            ]
        }
    }
}

Usa variables de sustitución en la ubicación del depósito

Puedes usar variables de sustitución para especificar una carpeta dentro de un depósito de Cloud Storage si la carpeta ya existe en el depósito. La compilación mostrará un error si la carpeta no existe.

En el ejemplo siguiente, se suben artefactos a una ruta de Cloud Storage que incluye el nombre de tu proyecto de GCP desde el que se ejecutó la compilación (como gs://mybucket/myproject/):

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/$PROJECT_ID'
    paths: ['helloworld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/$PROJECT_ID",
            "paths": [
                "helloworld.class"
            ]
        }
    }
}

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...