У меня есть несколько трудоемких задач, которые я люблю распределять по нескольким компьютерам. Эти задачи требуют запуска идентичного сценария ruby или python (или серии сценариев, которые вызывают друг друга) на каждой машине. На машинах будет отдельный конфигурационный файл, сообщающий сценарию, какую часть задачи выполнить.
Я хочу выяснить, как лучше синхронизировать сценарии на этих машинах до их запуска. До сих пор я вносил изменения в копию скрипта на сетевом ресурсе, а затем копировал свежую копию на каждую машину, когда я хочу ее запустить. Но это громоздко и оставляет вероятность ошибки (например, отсутствует файл в копии или не нажимается "копировать и заменить").
Предположим, что системы являются стандартными компьютерами Windows, которые не предназначены для этой задачи, и мне не нужно постоянно запускать эти сценарии (поэтому я не хочу, чтобы решение работало 24/7 и всегда обновляло их, Я предпочел бы что-то, что толкает / тянет по команде).
Мои мысли о разных вариантах:
- Простая адаптация моего текущего рабочего процесса: сохраняйте оригиналы на сетевом диске, но пишите командный файл, который копирует последнюю версию сценариев, чтобы все выполнялось одним щелчком мыши. Требует действий в каждой системе, но это еще не конец света (поскольку каждой из них обычно требуется, чтобы их конфигурационный файл тоже немного изменился).
- Поместите все в хранилище Mercurial/Git и вытяните свежую копию на каждый узел. Переход к репо с каждой машины гарантировал бы текущую версию (и имел бы дополнительное преимущество, позволяя вносить изменения в сценарий с любой машины). Минусы могут заключаться в том, что для этого требуется, чтобы на каждом компьютере была установлена VCS, и могут возникнуть проблемы с аутентификацией, поскольку я бы не использовал публичное репо.
- Откройте доступ для записи в общей папке и напишите сценарий, который будет использовать rsync (или аналогичный) для передачи изменений на все машины одновременно. Он получает текущую версию на каждой машине (хотя вам придется изменить скрипт, если вы хотите опустить машину или добавить новую). Возможная проблема заключается в том, что каждый компьютер должен иметь доступ для записи.
- Dropbox - разумное предложение (и оно может хорошо работать), но я не хочу использовать внешний сервис, и я бы предпочел, чтобы Dropbox не работал 24/7 в системах, которые обычно не нуждаются в нем.
Есть что-то простое, что мне не хватает? Какой-то инструмент, разработанный специально для таких вещей? В противном случае я склоняюсь к тому, чтобы просто привязать все системы к Mercurial, поскольку, хотя для этого требуется дополнительное программное обеспечение, это немного более надежно, чем написание пакетного файла (например, если я разделю часть скрипта на отдельный модуль, Mercurial узнает, что делать в то время как я должен был бы добавить строку в командный файл).