remembos: деплой через локальную сборку образа вместо Yandex Registry
- плейбук зовёт роль app_image, docker_login в cr.yandex удалён
- compose тянет `{{ app_name }}:{{ app_image_tag }}` с pull_policy: never
вместо зашитого тега из реестра
This commit is contained in:
@@ -23,13 +23,16 @@ remembos. Схема одинаковая — образ собирается л
|
|||||||
|
|
||||||
Шаги:
|
Шаги:
|
||||||
|
|
||||||
- завендорить роль `app_image` — в `roles/` сейчас только `owner`, `eget`,
|
- ~~завендорить роль `app_image`~~ — **сделано**: подписка в `SYNCED_ROLES`,
|
||||||
`secrets`; механика переноса — [shared-roles-sync](shared-roles-sync.md)
|
копия в `roles/app_image`; механика переноса — [shared-roles-sync](shared-roles-sync.md)
|
||||||
- homepage: завести в Taskfile таск `image` с тегом из `$BUILD_ID`, перевести
|
- homepage: завести в Taskfile таск `image` с тегом из `$BUILD_ID`, перевести
|
||||||
плейбук на роль, удалить `playbook-homepage-registry.yml` и registry-переменные
|
плейбук на роль, удалить `playbook-homepage-registry.yml` и registry-переменные
|
||||||
из `vars/homepage.yml`
|
из `vars/homepage.yml`
|
||||||
- remembos: контракта сборки нет (есть Dockerfile, нет Taskfile) — завести таск
|
- ~~remembos: контракта сборки нет (есть Dockerfile, нет Taskfile) — завести таск
|
||||||
`image`, убрать зашитый тег из compose
|
`image`, убрать зашитый тег из compose~~ — **сделано**: в репозитории remembos
|
||||||
|
появился `Taskfile.yml` с таском `image`, плейбук зовёт роль, compose тянет
|
||||||
|
`remembos:{{ app_image_tag }}` с `pull_policy: never`; `docker_login` из
|
||||||
|
плейбука убран
|
||||||
- transcriber: исходников на этой машине нет — до начала решить, живой ли сервис
|
- transcriber: исходников на этой машине нет — до начала решить, живой ли сервис
|
||||||
и откуда его собирать; иначе он останется единственным держателем registry и
|
и откуда его собирать; иначе он останется единственным держателем registry и
|
||||||
токен из оборота не выйдет
|
токен из оборота не выйдет
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
|
# Образ собирается локально и доставляется на сервер ролью app_image
|
||||||
|
# (см. playbook-remembos.yml): тег — случайный BUILD_ID каждого прогона,
|
||||||
|
# в реестре образа нет, поэтому pull_policy: never.
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
|
||||||
remembos_app:
|
remembos_app:
|
||||||
image: "{{ yc_container_registry_repository }}/remembos:v0.2.0"
|
image: "{{ app_name }}:{{ app_image_tag }}"
|
||||||
container_name: remembos_app
|
container_name: remembos_app
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
pull_policy: never
|
||||||
user: "{{ owner_create_result.uid }}:{{ owner_create_result.group }}"
|
user: "{{ owner_create_result.uid }}:{{ owner_create_result.group }}"
|
||||||
environment:
|
environment:
|
||||||
- PUID={{ owner_create_result.uid }}
|
- PUID={{ owner_create_result.uid }}
|
||||||
|
|||||||
+10
-9
@@ -13,6 +13,16 @@
|
|||||||
config_file: "{{ (config_dir, 'config.toml') | path_join }}"
|
config_file: "{{ (config_dir, 'config.toml') | path_join }}"
|
||||||
|
|
||||||
tasks:
|
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"
|
- name: "Create user and environment"
|
||||||
ansible.builtin.import_role:
|
ansible.builtin.import_role:
|
||||||
name: owner
|
name: owner
|
||||||
@@ -53,15 +63,6 @@
|
|||||||
group: "{{ app_user }}"
|
group: "{{ app_user }}"
|
||||||
mode: "0640"
|
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"
|
- name: "Run application with docker compose"
|
||||||
community.docker.docker_compose_v2:
|
community.docker.docker_compose_v2:
|
||||||
project_src: "{{ base_dir }}"
|
project_src: "{{ base_dir }}"
|
||||||
|
|||||||
Reference in New Issue
Block a user