diff --git a/docs/backlog/local-image-build.md b/docs/backlog/local-image-build.md index 10936d0..9f1ffd6 100644 --- a/docs/backlog/local-image-build.md +++ b/docs/backlog/local-image-build.md @@ -23,13 +23,16 @@ remembos. Схема одинаковая — образ собирается л Шаги: -- завендорить роль `app_image` — в `roles/` сейчас только `owner`, `eget`, - `secrets`; механика переноса — [shared-roles-sync](shared-roles-sync.md) +- ~~завендорить роль `app_image`~~ — **сделано**: подписка в `SYNCED_ROLES`, + копия в `roles/app_image`; механика переноса — [shared-roles-sync](shared-roles-sync.md) - homepage: завести в Taskfile таск `image` с тегом из `$BUILD_ID`, перевести плейбук на роль, удалить `playbook-homepage-registry.yml` и registry-переменные из `vars/homepage.yml` -- remembos: контракта сборки нет (есть Dockerfile, нет Taskfile) — завести таск - `image`, убрать зашитый тег из compose +- ~~remembos: контракта сборки нет (есть Dockerfile, нет Taskfile) — завести таск + `image`, убрать зашитый тег из compose~~ — **сделано**: в репозитории remembos + появился `Taskfile.yml` с таском `image`, плейбук зовёт роль, compose тянет + `remembos:{{ app_image_tag }}` с `pull_policy: never`; `docker_login` из + плейбука убран - transcriber: исходников на этой машине нет — до начала решить, живой ли сервис и откуда его собирать; иначе он останется единственным держателем registry и токен из оборота не выйдет diff --git a/files/remembos/docker-compose.template.yml b/files/remembos/docker-compose.template.yml index d6d5893..e2d953a 100644 --- a/files/remembos/docker-compose.template.yml +++ b/files/remembos/docker-compose.template.yml @@ -1,9 +1,14 @@ +# Образ собирается локально и доставляется на сервер ролью app_image +# (см. playbook-remembos.yml): тег — случайный BUILD_ID каждого прогона, +# в реестре образа нет, поэтому pull_policy: never. + services: remembos_app: - image: "{{ yc_container_registry_repository }}/remembos:v0.2.0" + image: "{{ app_name }}:{{ app_image_tag }}" container_name: remembos_app restart: unless-stopped + pull_policy: never user: "{{ owner_create_result.uid }}:{{ owner_create_result.group }}" environment: - PUID={{ owner_create_result.uid }} diff --git a/playbook-remembos.yml b/playbook-remembos.yml index 2b451e6..b13d110 100644 --- a/playbook-remembos.yml +++ b/playbook-remembos.yml @@ -13,6 +13,16 @@ config_file: "{{ (config_dir, 'config.toml') | path_join }}" tasks: + # Образ собирается на control-хосте самим репозиторием remembos (контракт — + # `task image`) и едет на сервер через docker save/load, без реестра. + # Роль выставляет факт app_image_tag — его подхватывает docker-compose. + - name: "Build and deliver application image" + ansible.builtin.import_role: + name: "app_image" + vars: + app_image_name: "{{ app_name }}" + app_image_src_dir: '{{ (playbook_dir, "..", "remembos") | path_join }}' + - name: "Create user and environment" ansible.builtin.import_role: name: owner @@ -53,15 +63,6 @@ group: "{{ app_user }}" mode: "0640" - - name: 'Login to Yandex Container Registry' - community.docker.docker_login: - registry_url: '{{ yc_container_registry }}' - username: 'oauth' - password: '{{ yc_oauth_token }}' - # Токен — аргумент модуля: по умолчанию не печатается, но всплывает - # при -v и в отчёте о падении задачи. - no_log: true - - name: "Run application with docker compose" community.docker.docker_compose_v2: project_src: "{{ base_dir }}"