Я работаю над настройкой CI для продукта. Я использую собственный сервер Gitlab с Gitlab CI, управляющим тестированием и развертыванием проекта.
Развернуть проект не так просто, как синхронизировать файлы. Его нужно собрать, проверить на несоответствия и откатить, если обновление не удалось.
Меня беспокоит то, что экземпляр gitlab runner, который запускает тесты и управляет интеграцией нового кода, имеет доступ к производственному экземпляру.
Моя первая идея заключалась в том, чтобы бегун просто отправил HTTP-запрос POST на рабочий сервер, попросив его обновить себя, а затем доложить, сообщив, удалось это или нет. Таким образом, исполнитель не имеет доступа к файловой системе на производственном сервере, и рабочий сервер может решить, отвечать на запрос или нет. Проблема с этим подходом заключается в том, что запрос POST, скорее всего, истечет по таймауту в ожидании ответа, поскольку сборка не происходит мгновенно.
Мой второй подход заключался бы в том, чтобы позволить gitlab ci runner иметь ssh-вход без пароля на производственный сервер с ограниченным пользователем, единственной целью которого является создание и запуск проекта, чтобы бегун мог просто использовать сценарий фабрики для обновления сервер и напрямую сообщают об ошибке. Это было бы легко реализовать и хорошо работало бы с системой Gitlab CI.
Обновить: Я пробовал использовать ткань, но меня остановили, когда бегун, казалось, не хотел входить в систему. Итак, каковы ваши идеи? Какая-то докерская магия?