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 una vez que finaliza tu compilación, agrega un campo images a tu archivo de configuración de la compilación que esté orientado a una o más imágenes de la manera siguiente:

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 de docker y pasa argumentos para invocar el comando push de la manera siguiente:

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 de descripción de la 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 la configuración de tu compilación de la manera siguiente:

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 de acceso de uno o más artefactos de la manera siguiente:

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.

Almacena artefactos en Cloud Build Artifacts

Cloud Build Artifacts te permite almacenar artefactos en un servicio de repositorio integrado y escalable. Está disponible como una actualización Alfa y admite paquetes Maven y npm durante el período Alfa. Puedes administrar el acceso al repositorio con la IAM, así como interactuar con los repositorios a través de gcloud, GCP Console y las herramientas del paquete nativo. Cloud Build Artifacts se integra en Cloud Build y otros sistemas de IC/EC. Para unirte al grupo Alfa, completa el formulario de registro.

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 varios artefactos, puedes usar caracteres comodín de gsutil en paths para especificar varios archivos.

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