app_image: перед передачей печатается размер архива с образом

Копирование tar — самый долгий шаг деплоя; теперь видно, сколько мегабайт
едет на сервер и не распух ли образ. Роль синхронизирована с каноном.
This commit is contained in:
av
2026-07-25 14:21:36 +03:00
parent 049ced48f5
commit d9656b8cdb
2 changed files with 22 additions and 1 deletions
+5 -1
View File
@@ -39,9 +39,13 @@ image:
1. Роль генерит случайный `BUILD_ID` — это же и есть `app_image_tag`. 1. Роль генерит случайный `BUILD_ID` — это же и есть `app_image_tag`.
2. Гоняет `app_image_command` в `app_image_src_dir` → приложение собирает 2. Гоняет `app_image_command` в `app_image_src_dir` → приложение собирает
`<app_image_name>:$BUILD_ID`. `<app_image_name>:$BUILD_ID`.
3. `docker save` образа → копирует tar на сервер → `docker load`. 3. `docker save` образа → печатает размер архива → копирует tar на сервер →
`docker load`.
4. Отдаёт факт `app_image_tag`, чистит локальный тег и оба tar-файла. 4. Отдаёт факт `app_image_tag`, чистит локальный тег и оба tar-файла.
Размер печатается до начала передачи — она самый долгий шаг деплоя, и по
размеру видно, чего ждать (и что образ не распух незаметно).
Локальный тег на control-хосте снимается по завершении (образ уже на сервере). Локальный тег на control-хосте снимается по завершении (образ уже на сервере).
Старые образы на сервере подчищает `docker image prune -af` по крону (см. Старые образы на сервере подчищает `docker image prune -af` по крону (см.
`playbook-system.yml`). `playbook-system.yml`).
+17
View File
@@ -63,6 +63,23 @@
cmd: "docker save --output {{ app_image_local_tar }} {{ app_image_name }}:{{ app_image_tag }}" cmd: "docker save --output {{ app_image_local_tar }} {{ app_image_name }}:{{ app_image_tag }}"
changed_when: false 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" - name: "Copy image tar to server"
ansible.builtin.copy: ansible.builtin.copy:
src: "{{ app_image_local_tar }}" src: "{{ app_image_local_tar }}"