#docker #jenkins #docker-swarm
Вопрос:
У меня есть приложение Django, развернутое в Docker Swarm. (Реплицируется, выполняется на нескольких узлах)
Приложение содержит некоторый сценарий оболочки do_stuff.sh
, который необходимо периодически выполнять, что в конечном итоге приводит к выполнению пользовательской команды python manage.py do_django_stuff
на узле.
Что я хочу, так это запланировать и запустить выполнение сценария от Дженкинса. (Так как оттуда удобно отслеживать результаты/см. Вывод журнала для устранения неполадок и т. Д.)
Приложение имеет фиксированное полное доменное имя (например my_app.my_server.com
), но я пытаюсь понять, как указать от Дженкинса на конкретный контейнер, чтобы выполнить там сценарий.
Как я могу этого достичь?
Спасибо!
Комментарии:
1. Почему вы хотите, чтобы Дженкинс запустил его? Не могли бы вы добавить скрипт в контейнеры (и время сборки изображения) и запустить их по расписанию cron? Удаленное запуск сценариев звучит как анти-шаблон.
2. @JohnXF давайте скажем, что это своего рода наследие. В настоящее время задание запускается Дженкинсом, и приложение не закреплено. Таким образом, идея состоит в том, чтобы внести как можно меньше изменений во время перехода на Docker. Кроме того, Дженкинс более прозрачен — его гораздо проще параметризовать, а затем анализировать в выводе консоли. На самом деле, я понял, как это сделать. Когда закончите — опубликуете обновление на мой вопрос
Ответ №1:
Нашел решение. Чтобы выполнить вышеприведенную задачу — мне нужно было сделать две вещи:
- Поместите метку на задание Дженкинса, предназначенное для сборки в кластер Docker Swarm (выбирает одну из машин).
- выполните сценарий как
docker exec $(docker ps -q -f name=name_of_my_application) ./do_stuff.sh
Таким образом, я добиваюсь поведения, когда задача выполняется внутри Docker Swarm, но имеет тот же результат, что и при обычном развертывании