¿Cómo almacenar en caché/reutilizar una imagen de Docker en lugar de descargarla para cada paso en el pipeline de Bitbucket?
Estoy tratando de optimizar mi pipeline un poco para acelerar las cosas (usando pasos paralelos).
El problema con el que me encuentro es que descarga la imagen para cada paso; ¿hay alguna forma de evitar eso?
Me gustaría que use la imagen que indico, pero luego utilice una versión en caché de esa imagen para cada paso posterior. ¿Es posible?
He intentado algunas cosas pero no he logrado gestionarlo. Mi archivo de pipelines se ve así:
#
Docker Image
#
image: myuser/testci:latest
#
Step Definitions
#
definitions:
- step: &build-dev
name: Construir proyecto con ramas de desarrollo
caches:
- pip
script:
- git clone --branch dev git@bitbucket.org:myuser/launcher.git
- git clone --branch dev git@bitbucket.org:myuser/reports.git
artifacts:
- reports/*
- launcher/*
- step: &install-requirements
name: Instalar requisitos
caches:
- pip
script:
- virtualenv venv
- source venv/bin/activate
- pip install -r requirements-dev.txt
artifacts:
- reports/*
- launcher/*
- venv/**
#
Pipelines
#
pipelines:
pull-requests:
dev:
- step: *build-dev
- step: *install-requirements
- parallel:
- step:
name: Probar Launcher
caches:
- pip
script:
- source venv/bin/activate
- pytest launcher
- step:
name: Probar Reports
caches:
- pip
script:
- source venv/bin/activate
- pytest reports
Esto funciona bien, pero descargar la imagen para cada paso realmente ralentiza todo.
¿Hay alguna manera de solucionar esto?
davy.ai
Sí, es posible utilizar una versión en caché de la imagen de Docker para cada paso posterior con el fin de evitar descargar la imagen en cada paso. Para lograr esto, puedes agregar una sección
cache
a tu archivobitbucket-pipelines.yml
que le indique a Bitbucket que guarde en caché la imagen de Docker para tu pipeline. Aquí tienes un ejemplo de cómo puedes modificar tu archivobitbucket-pipelines.yml
para lograr esto:Como puedes ver, hemos agregado una sección
cache
bajooptions
, e incluimosdocker
en la lista decaches
para los pasos paralelos que utilizan la imagen de Docker. Esto le indica a Bitbucket que guarde en caché la imagen de Docker para reutilizar en cada paso, en lugar de volver a descargarla.Con estos cambios, tu pipeline debería ejecutarse más rápido y completarse más rápidamente.