Pasa datos entre pasos de compilación

En esta página, se explica cómo pasar datos entre los pasos de la compilación. Si eres nuevo en Cloud Build, primero lee la guía de 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 alojados en contenedores. Después de cada paso, el contenedor se descarta. Esto te permite tener herramientas y entornos completamente diferentes para cada paso y, de forma predeterminada, cualquier dato creado en un paso no puede contaminar el siguiente paso. Sin embargo, es posible que, a veces, debas conservar el estado de un paso de una compilación para usarlo en pasos posteriores.

Para estos casos, Cloud Build proporciona volúmenes, que son rutas de acceso de archivo de lectura y escritura que puedes adjuntar a cualquier paso de compilación. Los volúmenes retienen el contenido durante la compilación. Puedes definir tu propio volumen o usar /workspace, que es el volumen predeterminado que Cloud Build te proporciona. Todo lo que se escriba en los volúmenes definidos por el usuario o espacio de trabajo en cualquier paso estará disponible para los pasos posteriores.

Pasa datos mediante lugares de trabajo

Para pasar datos entre los pasos de la compilación, almacena los recursos generados en el paso de compilación en /workspace y estos recursos estarán disponibles para cualquier paso de compilación posterior.

En el siguiente archivo de configuración de compilación de ejemplo, el primer paso de compilación almacena la string “First Value” en /workspace/first.txt y el valor 2 en /workspace/second.txt. En el segundo paso de compilación, se leen y, luego, imprimen los valores en /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 on "/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"
      ]
    }
    ]
}

Pasa 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 datos entre los pasos de la compilación.

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

  • En el paso de compilación en el que deseas almacenar los datos, haz lo siguiente:
    • Agrega un bloque volumes y configura los siguientes campos:
      • name: Configura el valor de este campo con el nombre de volumen deseado.
      • path: Establece el valor de este campo en la ruta de acceso del archivo para almacenar tus datos.
    • Almacena los datos en la ruta de acceso del archivo especificada en path.
  • En el paso de compilación en el que deseas consumir los datos, haz lo siguiente:
    • Agrega un bloque volumes con los valores de name y path.
    • Consume los datos de la ruta de acceso del archivo especificada en path.

En el siguiente archivo de configuración de compilación de ejemplo, en el primer paso de compilación, se define un volumen llamado myvolume y se almacenan datos en /persistent_volume/file. En el segundo paso de compilación, se 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"
    }
    ]
  }
]
}

¿Qué sigue?