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:
- Gestiona los metadatos de los contenedores y busca vulnerabilidades en ellos con Artifact Analysis.
- Implementa políticas de despliegue con autorización binaria.
- Usa la transmisión de imágenes en Google Kubernetes Engine, lo que resulta especialmente útil para las imágenes de contenedor de gran tamaño.
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, comogs://mybucket
ogs://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 campodir
.
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, comogs://mybucket
ogs://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 campodir
.
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 formatogs://[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
- Consulta cómo crear proyectos de
Go
. - Consulta cómo iniciar una compilación manualmente y con activadores.
- Consulta cómo solucionar errores de compilación.