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 a 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 del contenedor y busca vulnerabilidades en el contenedor con Artifact Analysis.
- Aplica políticas de implementación con la autorización binaria.
- Usar la transmisión de imágenes en Google Kubernetes Engine, lo que es particularmente beneficioso para las imágenes de contenedores grandes.
Obtén 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:
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, comogs://mybucket
ogs://mybucket/myproject/builds
. Para encontrar los nombres de los buckets existentes, consulta Cómo ver la lista de buckets o Cómo crear un bucket nuevo.[ARTIFACT_PATH]
: ruta a uno o más artefactos[ARTIFACT_PATH]
es en relación 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 con el campodir
.
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, comogs://mybucket
ogs://mybucket/myproject/builds
. Para encontrar los nombres de los buckets existentes, consulta cómo ver la lista de buckets o cómo crear un bucket nuevo.[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 que configuraste con ladir
.
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 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 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 (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"
]
}
}
}
¿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.