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 }}"