Almacenamiento en caché de dependencias para acelerar la ejecución
Implemente el almacenamiento en caché para acelerar considerablemente la ejecución de sus workflows reutilizando dependencias generadas y resultados de compilación.
Almacenamiento en caché de dependencias para acelerar la ejecución es una lección gratuita de DevOps Bootcamp en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de DevOps Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de DevOps Bootcamp incluye 4 lecciones en total.
Acelere los flujos de trabajo con el almacenamiento en caché
¿Ha notado que su flujo de trabajo vuelve a descargar las mismas dependencias cada vez? ¡Eso ralentiza todo!
El almacenamiento en caché de GitHub Actions le permite guardar y reutilizar archivos de ejecuciones anteriores. Esto acelera considerablemente las ejecuciones posteriores del flujo de trabajo.
Conozca la acción de caché
GitHub proporciona una acción especial llamada actions/cache@v3. Esta acción está diseñada para guardar y restaurar archivos con el fin de acelerar sus flujos de trabajo.
Es inteligente: comprueba si la caché ya existe antes de intentar restaurarla y la guarda si no existe.
Clave y ruta de la caché
Dos parámetros fundamentales de actions/cache son key y path:
key: cadena única que identifica su caché. Si se encuentra una caché con esta clave, se restaura.path: rutas de archivos o directorios que desea almacenar en caché. Esto indica a la acción *qué* debe guardar o restaurar.
La clave suele incluir un hash de los archivos de dependencias para garantizar que la caché se invalide cuando cambien las dependencias.
Almacenamiento en caché de dependencias de Node.js
Almacenemos en caché node_modules para un proyecto de Node.js. Usaremos hashFiles para crear una clave dinámica basada en package-lock.json.
Pruebe a ejecutar este sencillo fragmento de flujo de trabajo:
name: Node.js CI with Cache
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache Node.js modules
uses: actions/cache@v3
with:
path: node_modules
key: npm-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testAlternativa mediante claves de restauración
¿Qué ocurre si su key exacta no coincide con ninguna caché? ¡Ahí es donde restore-keys resulta útil!
restore-keys proporciona una lista de claves alternativas que se pueden buscar. Si no se encuentra la clave principal (por ejemplo, npm-${{ hashFiles(...) }}), GitHub Actions intenta encontrar una caché utilizando las claves de restore-keys en orden.
En nuestro ejemplo, npm- intenta encontrar cualquier caché que empiece por "npm-", lo que resulta útil si solo han cambiado versiones menores de las dependencias.
Almacenamiento en caché de dependencias de Python
¡El almacenamiento en caché no es exclusivo de Node.js! Puede aplicar el mismo principio a otros lenguajes, como Python. Aquí almacenamos en caché el entorno virtual de Python y la caché de pip.
En este caso, la clave utiliza hashFiles('requirements.txt'), y la ruta apunta al entorno virtual y al directorio de caché de pip.
name: Python CI with Cache
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Cache Python dependencies
uses: actions/cache@v3
with:
path: |
~/.cache/pip
.venv
key: pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
pip-
- name: Install dependencies
run: |
python -m venv .venv
.venv/bin/pip install -r requirements.txt
- name: Run tests
run: .venv/bin/python -m unittest discoverCuándo invalidar la caché
Una caché solo resulta útil si está suficientemente actualizada. Si cambian sus dependencias, la caché también debería cambiar.
La caché se invalida automáticamente si cambia su key principal (por ejemplo, npm-${{ hashFiles('package-lock.json') }}). Si se actualiza package-lock.json, cambia el hash y se crea una nueva caché.
También puede forzar la reconstrucción de una caché cambiando manualmente la clave (por ejemplo, añadiendo un sufijo de versión como npm-v2-${{ hashFiles(...) }}).
Ámbito y límites de la caché
Es conveniente saber cómo funciona el almacenamiento en caché internamente:
- Ámbito: las cachés tienen un ámbito por repositorio y por rama. Una caché de la rama
mainno se utilizará en una rama de funcionalidad, a menos que configure explícitamentelookup-path. - Límite de tamaño: cada caché puede tener un tamaño máximo de 10 GB.
- Retención: las cachés se conservan durante 7 días después del último acceso. Las cachés antiguas que no se utilizan se eliminan automáticamente.
Prácticas inteligentes de almacenamiento en caché
Para aprovechar al máximo el almacenamiento en caché:
- Use
hashFiles: vincule siempre la clave de la caché a los archivos de manifiesto de dependencias (por ejemplo,package-lock.jsonyrequirements.txt). - Sea específico con
path: almacene en caché únicamente lo necesario (por ejemplo,node_modulesy~/.cache/pip). - Use
restore-keys: proporcione alternativas para mejorar la tasa de aciertos de la caché. - Evite almacenar datos volátiles en caché: no almacene archivos que cambien con frecuencia o que sean muy grandes y únicos para cada ejecución (por ejemplo, artefactos de compilación destinados a la implementación).
Desafío sobre claves de caché
Tiene un proyecto de Java que utiliza Maven. Sus dependencias se definen en pom.xml, y Maven suele almacenar los archivos JAR descargados en ~/.m2/repository.
¿Qué configuración de caché garantiza mejor que las dependencias de Maven se almacenen en caché y se invaliden correctamente cuando cambie pom.xml?
Repaso: ¡caché para ganar velocidad!
¡Excelente trabajo! Ha aprendido a implementar el almacenamiento en caché en GitHub Actions para acelerar considerablemente sus flujos de trabajo de CI/CD.
- La acción
actions/cachees su herramienta. - Use
keyypathpara definir qué se debe almacenar en caché y cómo hacerlo. hashFilescrea claves dinámicas para una invalidación inteligente.restore-keysproporciona alternativas útiles.
Al almacenar las dependencias en caché de forma inteligente, ahorra tiempo de compilación y recursos computacionales, lo que hace que sus canalizaciones sean más eficientes.
Preguntas frecuentes
¿La lección «Almacenamiento en caché de dependencias para acelerar la ejecución» es gratis?
Sí — el texto completo de «Almacenamiento en caché de dependencias para acelerar la ejecución» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de DevOps Bootcamp, actualiza a CoddyKit PRO. El curso de DevOps Bootcamp incluye 4 lecciones en total.
¿Qué aprenderé en «Almacenamiento en caché de dependencias para acelerar la ejecución»?
Implemente el almacenamiento en caché para acelerar considerablemente la ejecución de sus workflows reutilizando dependencias generadas y resultados de compilación. Practicas DevOps Bootcamp con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar DevOps Bootcamp?
No se requiere experiencia previa. DevOps Bootcamp en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Almacenamiento en caché de dependencias para acelerar la ejecución»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de DevOps Bootcamp?
Sí. Cada lección de DevOps Bootcamp incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Compilaciones matriciales para varios entornos
- Almacenamiento en caché de dependencias para acelerar la ejecución
- Workflows y Actions reutilizables
- Ejecución condicional y dependencias entre jobs