Almacena artefactos de compilación en Cloud Storage

En esta página, se explica cómo puedes almacenar artefactos de compilación en Cloud Storage.

Recomendamos usar Artifact Registry para almacenar artefactos de compilación. Artifact Registry es un producto de Google Cloud que puedes integrar en Cloud Build para almacenar y administrar de forma segura tus artefactos en repositorios privados o públicos. Almacenar artefactos en Artifact Registry te permite hacer lo siguiente:

Si deseas obtener instrucciones para configurar Cloud Build a fin de almacenar imágenes y paquetes de tus compilaciones en Artifact Registry, consulta Almacena artefactos en Artifact Registry.

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:

Plantilla de

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 de acceso a uno o más artefactos [ARTIFACT_PATH] está relacionado con tu directorio de trabajo. Puede ser /workspace, que es el directorio de trabajo predeterminado de Cloud Build o el directorio de trabajo que estableciste 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 de acceso a uno o más artefactos [ARTIFACT_PATH] está relacionado con tu directorio de trabajo. Puede ser /workspace, que es el directorio de trabajo predeterminado de Cloud Build o el directorio de trabajo que estableciste 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]/:

Plantilla de

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]/:

Plantilla de

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]:

Plantilla de

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:

Plantilla de

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/):

Plantilla de

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

¿Qué sigue?