Выполните сценарий внутри узла Docker Swarm от Дженкинса

#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, но имеет тот же результат, что и при обычном развертывании