En esta página, se explica cómo 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:
- Administra los metadatos de los contenedores y busca vulnerabilidades con Artifact Analysis.
- Aplica políticas de implementación con la autorización binaria.
- Usa la transmisión de imágenes en Google Kubernetes Engine, que es particularmente beneficioso para imágenes de contenedores grandes.
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 bucket 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 bucket de Cloud Storage o una carpeta dentro del bucket donde Cloud Build debe almacenar el artefacto, comogs://mybucket
ogs://mybucket/myproject/builds
. Para encontrar los nombres de los buckets existentes, consulta cómo enumerar buckets o crear un bucket nuevo.[ARTIFACT_PATH]
: ruta 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 configuraste mediante el campodir
.
JSON
{
"artifacts": {
"objects": {
"location": [
"[STORAGE_LOCATION]"
],
"paths": [
[
"[ARTIFACT_PATH]"
],
[
"[ARTIFACT_PATH]"
],
"..."
]
}
}
}
En donde,
[STORAGE_LOCATION]
: Un bucket de Cloud Storage o una carpeta dentro del bucket donde Cloud Build debe almacenar el artefacto, comogs://mybucket
ogs://mybucket/myproject/builds
. Para encontrar los nombres de los buckets existentes, consulta cómo enumerar buckets o crear un bucket nuevo.[ARTIFACT_PATH]
: ruta 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 configuraste mediante el campodir
.
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 bucket 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 formatogs://[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 Google Cloud 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"
]
}
}
}
¿Qué sigue?
- Obtén más información sobre cómo compilar proyectos de
Go
. - Obtén más información sobre cómo iniciar una compilación de forma manual y mediante activadores.
- Obtén más información para solucionar errores de compilación.