Almacena artefactos de compilación

Si mediante la compilación se producen artefactos, como objetos binarios o tarballs, puedes optar por almacenarlos en Cloud Storage o en cualquier repositorio privado de terceros.

En esta página, se explica cómo almacenar artefactos de compilación en Cloud Storage. Para obtener información sobre el almacenamiento de imágenes de contenedor, consulta Compila imágenes de contenedor.

Almacena artefactos en Cloud Storage

Para almacenar artefactos en Cloud Storage que no estén en contenedores, agrega un campo artifacts a tu archivo de configuración de compilación con la ubicación del depósito para almacenar el artefacto y la ruta de acceso a 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 donde Cloud Build debe almacenar el artefacto, como gs://mybucket o gs://mybucket/some/folder.
  • [ARTIFACT_PATH]: ruta a uno o más artefactos [ARTIFACT_PATH] se relaciona con tu directorio de trabajo. Puede ser /workspace, que es el directorio de trabajo predeterminado de Cloud Build o el directorio de trabajo que estableces mediante el campo dir.

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 donde Cloud Build debe almacenar el artefacto, como gs://mybucket o gs://mybucket/some/folder.
  • [ARTIFACT_PATH]: ruta a uno o más artefactos [ARTIFACT_PATH] se relaciona con tu directorio de trabajo. Puede ser /workspace, que es el directorio de trabajo predeterminado de Cloud Build o el directorio de trabajo que estableces mediante el campo dir.

Ten en cuenta las siguientes advertencias sobre el almacenamiento de artefactos en Cloud Storage:

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

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

  • Si subes un artefacto a un bucket 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.

Una vez que la compilación se complete de forma correcta, podrás encontrar los resultados de la carga en el archivo de manifiesto JSON ubicado en [STORAGE_LOCATION]/artifacts-$BUILD_ID.json.

El archivo de manifiesto JSON contiene los siguientes campos:

  • 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 bucket 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 siguientes ejemplos, se muestra cómo puedes usar el campo Artifacts en un archivo de configuración de compilación. En todos los ejemplos, reemplaza [VALUES_IN_BRACKETS] por los valores correctos.

Sube archivos y carpetas

Mediante el siguiente archivo de configuración de compilación, se sube helloworld.class a 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 siguiente ejemplo, 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 bucket. En el siguiente ejemplo, 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 subas varios artefactos, puedes usar caracteres comodín de gsutil en paths para especificar varios archivos.

En el siguiente ejemplo, se toma como argumento un archivo llamado classes, que contiene los nombres de los archivos .java que se compilan. Luego, 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 bucket

Puedes usar variables de sustitución para especificar una carpeta dentro de un bucket de Cloud Storage. Si la carpeta que especificaste no existe, Cloud Build la creará.

En el siguiente ejemplo, se suben los artefactos a una ruta de acceso de Cloud Storage que incluye el nombre de tu proyecto de Cloud desde el que se ejecutó la compilación (p. ej., 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"
            ]
        }
    }
}

Almacena artefactos en Artifact Registry

Artifact Registry es la evolución de Container Registry. Permite almacenar artefactos en un servicio de repositorio integrado y escalable compatible con imágenes de Docker, paquetes de Maven y paquetes de npm. Si quieres obtener instrucciones para configurar Cloud Build a fin de almacenar artefactos de compilación en Artifact Registry, consulta Integración a Cloud Build. Para saber en qué se diferencia Artifact Registry de Container Registry cuando compilas imágenes de contenedor y almacenas artefactos, consulta Cambios de compilación e implementación en Google Cloud.

¿Qué sigue?