CircleCI — ускорение заданий с общим изображением Docker

#circleci #circleci-2.0

Вопрос:

Я перешел с одной CircleCI работы со многими шагами на 3 разных работы с отдельными шагами.

введите описание изображения здесь

Мне нравится новая настройка как Задание 2 ( run_script_inside_con ) и Задание 3 ( scan_container_with_ ) не запускаются, пока не завершится задание 1, и они не начнут параллельно.

В задании 1 ( build_container ) он в основном загружает исходное изображение из Docker Hub. Для этого требуется время, поскольку базовое изображение составляет почти 500 МБ. Эта работа вызывает вопросы docker build и docker save .

Задания 2 и 3 начинаются с setup_remote_docker , attach_workspace и docker load поэтому они могут загружаться в сжатый файл.

Docker load на работе 2 и 3 требуется около 1 минуты. Как новичок, чтобы обойти круг, есть ли здесь очевидное повышение эффективности, чтобы сэкономить здесь время?

Я использовал docker_layer_caching: true его там, где считал нужным.

 version: 2.1

executors:
  my-executor:
    docker:
      - image: cimg/python:3.9.7

jobs:
  build_container:
    executor: my-executor

    steps:
      - setup_remote_docker:
          docker_layer_caching: true

      - checkout

      - run:
          name: Echo system information
          command: |-
            echo "Hello ${CIRCLE_USERNAME}"
            echo "A container tag: ${CIRCLE_PROJECT_REPONAME}:${CIRCLE_SHA1}"
            echo "uname:" $(uname -a)
            echo "arch: " $(arch)
      - run:
          name: Build image from Dockerfile
          command: |
            docker build 
              -f Dockerfile 
              --tag "${CIRCLE_PROJECT_REPONAME}:${CIRCLE_SHA1}" .
      - run:
          name: Save Docker image
          command: |
            set -ex
            mkdir -p workspace
            docker save ${CIRCLE_PROJECT_REPONAME}:${CIRCLE_SHA1} --output workspace/${CIRCLE_SHA1}.tar
      - persist_to_workspace:
          root: workspace
          paths:
            - '*.tar'

  run_script_inside_container:
    executor: my-executor
    steps:

      - setup_remote_docker:
          docker_layer_caching: true

      - checkout

      - attach_workspace:
          at: workspace

      - run: amp;import_image
          name: Import Docker image
          command: |
            set -ex
            docker load --input workspace/${CIRCLE_SHA1}.tar
      - run:
          name: Run script inside of container
          command: |
            docker run --rm 
              -e < REMOVED INTENTIONALLY > 
              ${CIRCLE_PROJECT_REPONAME}:${CIRCLE_SHA1}
  scan_container:
    executor: my-executor
    steps:
      - checkout

      - setup_remote_docker:
          docker_layer_caching: true

      - run:
          name: Security scan
          command: my_scan_script

workflows:
  build_container_and_scan:
    jobs:
      - build_container
      - run_script_inside_container:
          requires:
          - build_container
      - scan_container:
          requires:
          - build_container