es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , , ,

Answer

  1. Avatar for 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 archivo bitbucket-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 archivo bitbucket-pipelines.yml para lograr esto:

    # Imagen de Docker
    image: my_user/test_ci:latest
    
    # Configuración de la caché
    options:
      docker: true
    
    # Definiciones de los pasos
    definitions:
      - step: &build-dev
          name: Construir Proyecto con Ramas Dev
          caches:
            - pip
          script:
            - git clone --branch dev git@bitbucket.org:my_user/launcher.git
            - git clone --branch dev git@bitbucket.org:my_user/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
                    - docker
                  script:
                    - source venv/bin/activate
                    - pytest launcher
              - step:
                  name: Probar Reports
                  caches:
                    - pip
                    - docker
                  script:
                    - source venv/bin/activate
                    - pytest reports
    

    Como puedes ver, hemos agregado una sección cache bajo options, e incluimos docker en la lista de caches 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.

Comments are closed.