Transferir datos entre los pasos de compilación

En esta página se explica cómo transferir datos entre los pasos de compilación. Si es la primera vez que usas Cloud Build, consulta primero el inicio rápido de compilación y la descripción general de la configuración de compilación.

Cloud Build ejecuta tus tareas como una serie de pasos de compilación, que se ejecutan en entornos aislados y en contenedores. Después de cada paso, el contenedor se descarta. De esta forma, puedes tener herramientas y entornos totalmente diferentes para cada paso y, de forma predeterminada, los datos creados en un paso no pueden contaminar el siguiente. Sin embargo, a veces es posible que necesites conservar el estado de un paso de una compilación para usarlo en pasos posteriores.

En estos casos, Cloud Build proporciona volúmenes, que son rutas de archivos de lectura y escritura que puedes adjuntar a cualquier paso de compilación. Los volúmenes conservan su contenido durante todo el proceso de compilación. Puedes definir tu propio volumen o usar /workspace, que es el volumen predeterminado que te proporciona Cloud Build. Antes de ejecutar una compilación, Cloud Build extrae el código fuente a /workspace. Todo lo que se escriba en los volúmenes definidos por el usuario y en /workspace en cualquier paso estará disponible para los pasos posteriores.

Transferir datos mediante espacios de trabajo

Para transferir datos entre los pasos de compilación, almacena los recursos que se hayan generado en el paso de compilación en /workspace. Estos recursos estarán disponibles para los pasos de compilación posteriores.

En el siguiente archivo de configuración de compilación de ejemplo, el primer paso de compilación almacena la cadena "First Value" en /workspace/first.txt y el valor 2 en /workspace/second.txt. El segundo paso de compilación lee e imprime los valores de /workspace/first.txt y /workspace/second.txt.

YAML

steps:
- id: "Store Values"
  name: ubuntu
  entrypoint: bash
  args:
    - -c
    - |
      # Save a value to persistent volume mount: "/workspace"
      echo "First Value" > /workspace/first.txt &&
      # Save another
      expr 1 + 1 > /workspace/second.txt
# In the next step, everything in the environment is discarded
# EXCEPT items in "/workspace"
- id: "Read Values"
  name: ubuntu
  entrypoint: bash
  args:
    - -c
    - |
      # Read from "/workspace"
      echo "First we saved " $(cat /workspace/first.txt) &&
      echo "Then we saved " $(cat /workspace/second.txt)

JSON

{
  "steps": [
  {
    "id": "Store Values",
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "echo \"First Value\" > /workspace/first.txt &&\nexpr 1 + 1 > /workspace/second.txt\n"
    ]
    },
    {
      "id": "Read Values",
      "name": "ubuntu",
      "entrypoint": "bash",
      "args": [
        "-c",
        "echo \"First we saved \" $(cat /workspace/first.txt) &&\necho \"Then we saved \" $(cat /workspace/second.txt)\n"
      ]
    }
    ]
}

Transferir datos mediante volúmenes especificados por el usuario

En lugar de usar el volumen /workspace predeterminado que proporciona Cloud Build, puedes definir tu propio volumen para conservar los datos entre los pasos de compilación.

Para definir y usar tu propio volumen, sigue estos pasos:

  • En el paso de compilación en el que quieras almacenar los datos, haz lo siguiente:
    • Añade un bloque volumes y define los siguientes campos:
      • name: asigna a este campo el nombre del volumen que quieras.
      • path: asigna a este campo la ruta del archivo en el que quieras almacenar los datos.
    • Almacena los datos en la ruta de archivo especificada en path.
  • En el paso de compilación en el que quieras usar los datos, haz lo siguiente:
    • Añade un bloque volumes con los valores de name y path.
    • Consume los datos de la ruta de archivo especificada en path.

En el siguiente ejemplo de archivo de configuración de compilación, el primer paso de compilación define un volumen llamado myvolume y almacena datos en /persistent_volume/file. El segundo paso de compilación imprime el valor almacenado en /persistent_volume/file.

YAML

steps:
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      echo "Hello, world!" > /persistent_volume/file
  volumes:
  - name: 'myvolume'
    path: '/persistent_volume'
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      cat /persistent_volume/file
  volumes:
  - name: 'myvolume'
    path: '/persistent_volume'

JSON

{
  "steps": [
  {
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "echo \"Hello, world!\" > /persistent_volume/file\n"
     ],
     "volumes": [
     {
       "name": "myvolume",
       "path": "/persistent_volume"
     }
     ]
  },
  {
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "cat /persistent_volume/file\n"
    ],
    "volumes": [
    {
      "name": "myvolume",
      "path": "/persistent_volume"
    }
    ]
  }
]
}

Siguientes pasos