Cómo pasar datos entre pasos de compilación

En esta página, se explica cómo pasar datos entre pasos de compilación. Si eres nuevo en Cloud Build, primero lee la guía de inicio rápido para la 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, se descarta el contenedor. Esto te permite tener herramientas y entornos completamente diferentes para cada paso y, de manera predeterminada, los datos creados en un paso no pueden afectar el siguiente paso. Pero a veces es posible que debas conservar el estado de un paso de una compilación para usarlo en los pasos posteriores.

Para esos 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 el período de compilación. Puedes definir tu propio volumen o usar /workspace, que es el volumen predeterminado que proporciona Cloud Build. Cualquier escritura que se escriba en volúmenes definidos por el usuario o espacio de trabajo para cualquier paso estará disponible para los siguientes pasos.

Cómo pasar datos mediante espacios de trabajo

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

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

Cómo pasar datos con volúmenes especificados por el usuario

En lugar de usar el volumen predeterminado /workspace 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, haz lo siguiente:

  • En el paso de compilación en el que deseas almacenar los datos, sigue estos pasos:
    • Agrega un bloque volumes y configura los siguientes campos:
      • name: establece el valor de este campo en el nombre de volumen deseado.
      • path: establece el valor de este campo en la ruta 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, realiza lo siguiente:
    • Agrega un bloque volumes con los valores para name y path.
    • Usa los datos de la ruta de acceso del 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"
    }
    ]
  }
]
}

¿Qué sigue?