#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