Развертывание приложения для тестирования?

Есть web-приложение, которое состоит из нескольких частей:
- база
- репозиторий бека
- репозиторий фронта
- репозиторий конфигов
- и еще всякие разные репозитории

для разработки новой фичи нужно внести изменения в пару репозиториев, перед мержами нужно провести ручное тестирование, те развернуть приложение из нужных веток на каком-нибудь поддомене (например branchName.myDevServer.com)

Какие инструменты для этого есть? Мб есть ссылки на статьи по этому поводу?

Дополнительно:

А приложения как запускаются? В кластере кубера?

  • сейчас - из ранера по ssh разворачивается на нужном сервере
    но репозиторий бека и фронта - один, остальные не критично
    там есть еще репозиторий с конфигами nginx, есть репозиторий с докер-файлами (используются для развертывания локально) - но они меняются редко

    хочется бек и фронт по разным репам разнести

    по сути вопрос не как это сделать, а какие инструменты
    например, слабо представляю, что такое "кластер кубера"... ну те слышал, читал, но не более

  • Собственно вокруг любых систем контроля версий существуют и "системы сборки" - то есть как раз то что может по прописанному в репозитории что-то соберет и например отправит (на хосты/стенды или в хранилище артефактов).

    Как пример - тот же gitlab и gitlab runners - то есть по коммиту/пендалю будет интерпретироваться .gitlab-ci.yml в котором могут быть прописаны нужные шаги (build, test, deploy и т.п.)

    Ну или jenkins, по сути так же интерпретирующий jenkinsfile

    Обычно инструкции по последовательности сборки-тестов-деплоя могут ветвиться в зависимости от того что за коммит или пул реквест и делать разное. К примеру при коммите в фичаветку - билд и тесты, при пулл реквесте - доппроверки, при успешном мерже в dev и успешной сборке - слив полученного в хранилище (а потом отдельной линией разлив этого из хранилища на тестовые стенды или прод)

    p.s. по сути всё это повторяет ручные операции, если их хорошо описать aka автоматизирует
    При желании это можно и навелосипедить, но задача типовая и поэтому есть 100500 решений почти от каждого крупняка... правда почти все они на начальном этапе несколько избыточны, но тем и хороши

    • понятно что есть ранеры и хуки, но вопрос в том, что разные репозитории
      пока репозиторий один все просто:

      при создании мержа запускаем джобу которая все разворачивает (остается только вопрос с тем как сделать приложение доступным по адресу feature-1234.dev-server.com)

      а когда репозиториев больше чем 1?

      можно конечно через хуки накостылить какой-то инструмент для этого:
      отдельное приложение, которое принимает хуки от всех репозиториев и что-то делает
      но сразу, помимо непосредственно самой логики, появляется веб-интерфейс для управления, база для хранения состояния и тд

      Пример.
      состав приложения:
      - бек
      - фронт
      - база

      некая фича (переименовали поле на беке) требует разработки в двух репозиториях и они не могут быть вылиты отдельно:
      - фронт
      - бек

      бекендер делает свою часть в своем репозитории back-repo/feature/1234
      фронтендер делает свою часть в front-repo/feature/1234

      теперь нужно развернуть приложение для ручного тестирования

      на дев-сервере нужно обеспечить развертывание приложения:
      - бек из back-repo/feature/1234
      - фронт из front-repo/feature/1234

      и запускать деплой при любом изменении в исходниках

      после того как все будет протестировано и смержено "прибраться"

    • А разницы? Ну 100500 репозиториев, выхлопом каждого будет некая законченная сущность. Докер, архив с js и т.п. В зависимости от потребности результаты сборок либо льются по нужным местам этаким 100501 репозиторием, "исходником" которого будет список из 100500 конкретных версий которые нужно собрать в кучку и раздеплоить в указанные места; либо будет пинать сборки тех 100500 реп и забирать артефакты для той же цели.

      Ну а задачу обновления/замены на стендах/проде в виде "100499 модулей не менялось" - это хлебушек какого-нибудь ансибла - он это умеет хорошо.

      Вариант поменялся фронт - льём только его и наоборот - в общем-то при должном старании в обеспечении версионной совместимости - тоже не исключен.

      Если ко всему этому приложить методики и рекомендации ветвления - то вообще сказка получается: деплой ветки dev например улетит на dev стенд, а release_* - на тестово-испытательный, ну а мастер [с тегом релиза] - на прод.

    • не очень хорошо сформулировал вопрос

      да, "выхлоп" каждого репозитория это либо контейнер, либо архив

      при изменении в каком-то репозитории, он запускает свои пайплайны и готовит этот "выхлоп"... "управляющий репозиторий" (100501) почему запустит свои пайплайны?

      а что работает на сервере? ансибл? ну те что обеспечивает развертывание?

    • при изменении в каком-то репозитории, он запускает свои пайплайны и готовит этот "выхлоп"... "управляющий репозиторий" (100501) почему запустит свои пайплайны?

      Самый простой вариант - "я решил раздеплоить" aka "ручной запуск"
      вариант посложнее - по коммиту в этот самый 100501 репозитарий файла со списком "что брать"

      а что работает на сервере? ансибл? ну те что обеспечивает развертывание?

      тут не совсем явное "что есть сервер?" То бишь если мы говорим о некоей машине на которой исполняется сборка - то да, как вариант - ансибл, который сверяет текущее состояние с декларациями в одном (или нескольких) репозитарии из этих 100500, где описана инфраструктура

    Ответы:

    Это называется CI/CD и есть множество решений для этого.
    Azure DevOps, Jenkins. Gitlab Runners и т.п.

     

    Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.

     

      • Развертывание приложения для тестирования?Есть ответ
      • 07.04.2024
      Ответить

      Для развертывания приложения для тестирования вам потребуется выполнить несколько шагов, в зависимости от специфики вашего приложения. Ниже приведены основные шаги, которые могут помочь вам развернуть ваше приложение для тестирования:

      1. Установка окружения:
      - Установите сервер баз данных (например, MySQL, PostgreSQL, SQLite).
      - Установите веб-сервер (например, Apache, Nginx).
      - Установите интерпретатор языка программирования (например, PHP, Python).

      2. Клонирование репозитория:
      - Склонируйте репозиторий вашего приложения на ваш локальный компьютер.

      3. Установка зависимостей:
      - Установите все необходимые зависимости с помощью менеджера зависимостей вашего языка программирования (например, Composer для PHP).

      4. Настройка базы данных:
      - Создайте базу данных для вашего приложения.
      - Импортируйте структуру базы данных и заполните ее тестовыми данными, если необходимо.

      5. Настройка конфигурации:
      - Настройте конфигурационные файлы вашего приложения (например, файл .env для Laravel).

      6. Запуск приложения:
      - Запустите веб-сервер.
      - Запустите приложение и проверьте его работоспособность в браузере.

      Приведенные выше шаги являются общими и могут отличаться в зависимости от конкретного приложения и используемых технологий. Пожалуйста, уточните дополнительные детали вашего приложения, чтобы получить более конкретную помощь. Если у вас возникли конкретные проблемы или вопросы, не стесняйтесь задавать их для получения более точной помощи.

    Оставить комментарий