From d9656b8cdb9c189ce1df8a34502eb14ced803452 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 25 Jul 2026 14:21:36 +0300 Subject: [PATCH] =?UTF-8?q?app=5Fimage:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=20=D0=B0=D1=80=D1=85=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=20=D1=81=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Копирование tar — самый долгий шаг деплоя; теперь видно, сколько мегабайт едет на сервер и не распух ли образ. Роль синхронизирована с каноном. --- roles/app_image/README.md | 6 +++++- roles/app_image/tasks/main.yml | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/roles/app_image/README.md b/roles/app_image/README.md index a58f8e4..3f17857 100644 --- a/roles/app_image/README.md +++ b/roles/app_image/README.md @@ -39,9 +39,13 @@ image: 1. Роль генерит случайный `BUILD_ID` — это же и есть `app_image_tag`. 2. Гоняет `app_image_command` в `app_image_src_dir` → приложение собирает `:$BUILD_ID`. -3. `docker save` образа → копирует tar на сервер → `docker load`. +3. `docker save` образа → печатает размер архива → копирует tar на сервер → + `docker load`. 4. Отдаёт факт `app_image_tag`, чистит локальный тег и оба tar-файла. +Размер печатается до начала передачи — она самый долгий шаг деплоя, и по +размеру видно, чего ждать (и что образ не распух незаметно). + Локальный тег на control-хосте снимается по завершении (образ уже на сервере). Старые образы на сервере подчищает `docker image prune -af` по крону (см. `playbook-system.yml`). diff --git a/roles/app_image/tasks/main.yml b/roles/app_image/tasks/main.yml index ba50a55..b7f8a84 100644 --- a/roles/app_image/tasks/main.yml +++ b/roles/app_image/tasks/main.yml @@ -63,6 +63,23 @@ cmd: "docker save --output {{ app_image_local_tar }} {{ app_image_name }}:{{ app_image_tag }}" changed_when: false + # Копирование tar — самый долгий шаг деплоя, а его длительность видна только + # по размеру архива. Печатаем перед стартом передачи, чтобы ожидание было + # объяснимым и заметный рост образа не проходил незамеченным. + - name: "Measure image tar" + delegate_to: localhost + become: false + ansible.builtin.stat: + path: "{{ app_image_local_tar }}" + get_checksum: false + register: app_image_tar_stat + + - name: "Report image size before transfer" + ansible.builtin.debug: + msg: >- + {{ app_image_name }}:{{ app_image_tag }} — + {{ app_image_tar_stat.stat.size | human_readable }} к передаче на сервер + - name: "Copy image tar to server" ansible.builtin.copy: src: "{{ app_image_local_tar }}"