Skip to content

Instantly share code, notes, and snippets.

@diafour
Last active December 30, 2016 14:02
Show Gist options
  • Save diafour/1a83095cc2d0bb266adc0f7f554f5d5c to your computer and use it in GitHub Desktop.
Save diafour/1a83095cc2d0bb266adc0f7f554f5d5c to your computer and use it in GitHub Desktop.
@startuml
'PHP-разработчик
'Actor Developer
'Тимлид PHP-разработчиков
Actor TeamLead
'Devops из команды Flant
Actor Devops
'Релиз-инженер из команды Нотамедия
Actor ReleaseIngenier
'Приложение, например mos-back/search-app, его исходники в репозитории в GitLab
Participant GitLab.chef_repo
'Приложение, например mos-back/search-app, его исходники в репозитории в GitLab
Participant GitLab.some_php_app
'gitlab-ci воркер
Participant GitLabCI.worker
'ci-deploy
Participant BuildServer1.ci_deploy
'dapp или сборщик
Participant BuildServer1.dapp
'dapp или сборщик
Participant BuildServer1.deployit
'утилита mostainer
Participant Node.mostainer
'dapp или сборщик
Participant Node.docker
Participant Node.chef_client
'chef server
Participant Infra.chef_server
Participant Infra.registry
Participant Infra.team_api
== Выкладывание chef-repo, запуск chef-client на нодах ==
Devops -> GitLab.chef_repo: Ставит релизный тэг
GitLab.chef_repo -> GitLabCI.worker: Запуск джоба, описанного в gitlab-ci.yml (deploy to *)
activate GitLabCI.worker
GitLabCI.worker -> Infra.chef_server: Загрузка обновлённых кукбуков на chef сервер
GitLabCI.worker -> Node.chef_client: Запуск chef-client на ноде
activate Node.chef_client
Node.chef_client <- Infra.chef_server: Получение новых версий кукбуков от chef сервера
Node.chef_client <- Infra.chef_server: Получение атрибутов мостейнеров
Node.chef_client -> Node.chef_client: генерация файловой структуры /mostainers
Node.chef_client -> Node.chef_client: генерация mostainer.yml
Node.chef_client -> Node.chef_client: генерация версий main.json
GitLabCI.worker <- Node.chef_client: Логи работы chef-client
deactivate Node.chef_client
GitLab.chef_repo <- GitLabCI.worker: Логи выкладывания
deactivate GitLabCI.worker
Devops <- GitLab.chef_repo: Логи выкладывания
== Сборка приложения ==
'Developer -> GitLab.some_php_app: Пуш изменений в репозиторий
TeamLead -> GitLab.some_php_app: Ставит релизный тэг
GitLab.some_php_app -> GitLabCI.worker: Запуск джоба, описанного в gitlab-ci.yml (build)
activate GitLabCI.worker
GitLabCI.worker -> BuildServer1.ci_deploy: Запуск ci_deploy
activate BuildServer1.ci_deploy
BuildServer1.ci_deploy -> BuildServer1.dapp: Запуск сборки образа
activate BuildServer1.dapp
BuildServer1.ci_deploy <- BuildServer1.dapp: Сборка успешна
deactivate BuildServer1.dapp
BuildServer1.ci_deploy -> BuildServer1.dapp: Загрузка готовых образов в registry
activate BuildServer1.dapp
BuildServer1.dapp -> Infra.registry: Образы
activate Infra.registry
BuildServer1.dapp <- Infra.registry: Образы выложены
deactivate Infra.registry
BuildServer1.ci_deploy <- BuildServer1.dapp: Образы выложены
deactivate BuildServer1.dapp
GitLabCI.worker <- BuildServer1.ci_deploy: ci_deploy отработал
deactivate BuildServer1.ci_deploy
GitLab.some_php_app <- GitLabCI.worker: Логи сборки
deactivate GitLabCI.worker
TeamLead <- GitLab.some_php_app: Логи сборки
== Выкладывание приложения ==
ReleaseIngenier -> GitLab.some_php_app: После успешной сборки запускает джоб деплоя
GitLab.some_php_app -> GitLabCI.worker: Запуск джоба деплоя, описанного в gitlab-ci.yml (to *)
activate GitLabCI.worker
GitLabCI.worker -> BuildServer1.ci_deploy: Запуск ci_deploy
activate BuildServer1.ci_deploy
BuildServer1.ci_deploy -> BuildServer1.ci_deploy: проверка нужных файлов-флагов от джоба сборки и джобов деплоя
BuildServer1.ci_deploy <-> Infra.team_api: проверка прав на деплой
'activate Infra.team_api
'BuildServer1.ci_deploy <- Infra.team_api: ответ от team api
'deactivate Infra.team_api
BuildServer1.ci_deploy -> BuildServer1.deployit: Запуск деплоя на ноду утилитой deployit
activate BuildServer1.deployit
BuildServer1.deployit <-> Infra.chef_server: Поиск ip адреса в ohai-атрибутах ноды по её имени
BuildServer1.deployit -> Node.mostainer: Запуск утилиты mostainer на ноде через ssh
activate Node.mostainer
Node.mostainer <-> Infra.registry: Скачивание образа some_php_app из registry в локальное хранилище на ноде
Node.mostainer -> Node.mostainer: Загрузка конфига из mostainer.yml
Node.mostainer -> Node.mostainer: Копирование нужной версии main.json
Node.mostainer -> Node.docker: Запуск мостейнера (запуск docker-контейнера из образа some_php_app с параметрами из mostainer.yml и копирование main.json)
activate Node.docker
Node.docker -> Node.docker: запуск chef-solo: применение кукбуков init-фазы с атрибутами из main.json
Node.docker -> Node.docker: запуск процессов приложения
Node.mostainer <- Node.docker: Лог запуска мостейнера (вывод chef-solo)
deactivate Node.docker
BuildServer1.deployit <- Node.mostainer: Лог запуска мостейнера
deactivate Node.mostainer
BuildServer1.ci_deploy <- BuildServer1.deployit: Лог запуска мостейнера
deactivate BuildServer1.deployit
BuildServer1.ci_deploy -> BuildServer1.ci_deploy: Хук: сброс кэша nginx
BuildServer1.ci_deploy -> BuildServer1.ci_deploy: Хук: генерация меню
GitLabCI.worker <- BuildServer1.ci_deploy: ci_deploy отработал
deactivate BuildServer1.ci_deploy
GitLab.some_php_app <- GitLabCI.worker: Логи деплоя
deactivate GitLabCI.worker
ReleaseIngenier <- GitLab.some_php_app: Логи деплоя
@enduml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment