Almacenar artefactos de compilación en Cloud Storage

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

Te recomendamos que uses Artifact Registry para almacenar artefactos de compilación. Artifact Registry es unGoogle Cloud producto que puedes integrar con Cloud Build para almacenar y gestionar de forma segura tus artefactos en repositorios privados o públicos. Almacenar artefactos en Artifact Registry te permite hacer lo siguiente:

Para obtener instrucciones sobre cómo configurar Cloud Build para almacenar paquetes e imágenes de tus compilaciones en Artifact Registry, consulta Almacenar artefactos en Artifact Registry.

Almacenar artefactos en Cloud Storage

Para almacenar artefactos que no sean contenedores en Cloud Storage, añade un campo artifacts en el archivo de configuración de compilación con la ubicación del segmento en el que se va a almacenar el artefacto y la ruta a uno o varios artefactos:

YAML

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

Dónde,

  • [STORAGE_LOCATION]: un segmento de Cloud Storage o una carpeta del segmento en el que Cloud Build debe almacenar el artefacto, como gs://mybucket o gs://mybucket/myproject/builds. Para ver los nombres de los segmentos, consulta Listar segmentos o Crear un segmento.
  • [ARTIFACT_PATH]: ruta a uno o varios artefactos. [ARTIFACT_PATH] es relativa a tu directorio de trabajo. Puede ser /workspace, que es el directorio de trabajo predeterminado de Cloud Build, o el directorio de trabajo que hayas definido con el campo dir.

JSON

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

Dónde,

  • [STORAGE_LOCATION]: un segmento de Cloud Storage o una carpeta del segmento en el que Cloud Build debe almacenar el artefacto, como gs://mybucket o gs://mybucket/myproject/builds. Para ver los nombres de los segmentos ya creados, consulta listar segmentos o crear un segmento.
  • [ARTIFACT_PATH]: ruta a uno o varios artefactos. [ARTIFACT_PATH] es relativa a tu directorio de trabajo. Puede ser /workspace, que es el directorio de trabajo predeterminado de Cloud Build, o el directorio de trabajo que hayas definido con el campo dir.

Ten en cuenta las siguientes advertencias al almacenar artefactos en Cloud Storage:

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

  • Puedes subir tantos artefactos como quieras, pero solo puedes especificar hasta cien rutas de artefactos.

  • Si sube un artefacto a un bucket que ya tiene un artefacto con el mismo nombre, el nuevo artefacto sustituirá al anterior. Puede habilitar Versiones de objetos en su cubo si no quiere que el artefacto más reciente sustituya a un artefacto con el mismo nombre.

Una vez que la compilación se haya completado correctamente, podrá consultar los resultados de la subida en el archivo de manifiesto JSON, que se encuentra en [STORAGE_LOCATION]/artifacts-$BUILD_ID.json.

El archivo de manifiesto JSON tiene los siguientes campos:

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

Ejemplos de artefactos

En los siguientes ejemplos se muestra cómo puede usar el campo Artifacts en un archivo de configuración de compilación. En todos estos ejemplos, sustituye [VALUES_IN_BRACKETS] por los valores correspondientes.

Subir archivos y carpetas

El archivo de configuración de compilación que se muestra a continuación 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 de 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 puede subir los artefactos a una ruta de directorio válida en el segmento. 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"
            ]
        }
    }
}

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

Cuando subas varios artefactos, puedes usar caracteres comodín 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 van a compilar. A continuación, sube cualquier .class archivo al segmento 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"
            ]
        }
    }
}

Usar variables de sustitución en la ubicación del contenedor

Puedes usar variables de sustitución para especificar una carpeta dentro del segmento de Cloud Storage. Si la carpeta que has especificado no existe, Cloud Build la creará.

En el ejemplo siguiente se suben los artefactos a una ruta de Cloud Storage que incluye el nombre del proyecto desde el que se ha ejecutado la compilación (por ejemplo, gs://mybucket/myproject/): Google Cloud

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

Siguientes pasos