2009-06-30 8 views
1

Wir haben eine Reihe von Mac-Maschinen (meist PPC), die zum Ausführen von Java-Anwendungen für Experimente verwendet werden. Die Anwendungen bestehen aus Ordnern mit einer Reihe von JAR-Dateien, einigen Dokumentationen und einigen Shell-Skripten.Automatische Bereitstellung von Dateien auf mehreren Macs

Ich möchte in der Lage sein, neue Version unserer Experimente in ein Verzeichnis auf einem Linux-Server zu verschieben und dann die Macs anweisen, ihre Versionen zu aktualisieren, oder ein ganzes neues Experiment abrufen, wenn sie noch nicht haben es.

../deployment/ 
../deployment/experiment1/ 
../deployment/experiment2/ 

und so weiter

Ich möchte einen Weg kommen um den Aktualisierungsprozess zu automatisieren. Die Macs sind nicht immer eingeschaltet, und ihre IP-Adressen werden von DHCP zugewiesen, sodass der Server (der über einen Domänennamen verfügt) nicht direkt mit ihnen kommunizieren kann. Ich stelle mir vor, dass ich auf den Macs eine Art Daemon laufen lassen müsste, der jede Minute auf den Server klingelt, um herauszufinden, ob die Ankündigung "Experimente wurden aktualisiert" eingestellt wurde.

Kann mir jemand einen effizienten Weg vorstellen, dies zu bewerkstelligen? Lösungen können entweder vorhandene Mac-Anwendungen oder Shell-Skripte umfassen, die ich schreiben kann.

Antwort

1

Sie könnten etwas Erfolg mit einem einfachen Subversion-Setup haben; Wenn Sie die Dev-Tools in Ihrer Mac-Farm haben, ist Subversion bereits installiert.

Ihr Skript ist so einfach wie das Ausführen von svn up im Deployment-Verzeichnis so oft wie Sie möchten und überprüfen Sie Ihre Änderungen in den Subversion-Server von Ihrem Computer. Sie können dies ohne spezielle Einrichtung auf dem Server tun.

Wenn Sie Geschichte nicht interessieren und ein Versionskontrollsystem zu "schwer" scheint, wird das traditionelle Unix-Tool dafür rsync genannt, und es gibt viele Informationen über its website.


Vielleicht sind Sie nach einer Lösung gesucht, die keine Abfrage mit sich bringt; In diesem Fall könnten Sie vielleicht einen Prozess haben, der auf jedem Mac läuft und einen lokalen Bonjour-Dienst registriert; DNS-SD Bibliotheken sind wahrscheinlich für Ihre Sprache der Wahl verfügbar, und es ist eine ziemlich einfache Angelegenheit, eine Liste der aktiven Maschinen in diesem Fall zu erhalten. Ich schrieb dieses Skript in Ruby lokalen Rechnern läuft SSH zu finden:

#!/usr/bin/env ruby 

require 'rubygems' 
require 'dnssd' 

handle = DNSSD.browse('_ssh._tcp') do |reply| 
    puts "#{reply.name}.#{reply.domain}" 
end 

sleep 1 
handle.stop 
+0

Dies ist eine mögliche Lösung (und wir verwenden zufällig Subversion, um unseren Quellcode zu verwalten). Im Idealfall möchte ich jedoch nicht zu jeder Client-Maschine gehen müssen, um dies auszuführen - eine zentralisierte Methode wäre vorzuziehen. – kpozin

+1

Warum müssten Sie zu jeder Client-Maschine gehen? Habe einfach ein Skript auf jedem Rechner, das alle paar Minuten von launchd oder cron ausgeführt wird und das Subversion-Update ausführt. –

0

Sie können use AppleScript remotely wenn Sie turn on Remote Events auf den Client-Rechnern. Als Beispiel können Sie control programs like iTunes remotely.

Ich würde vorschlagen, dass Sie ein Update-Skript auf Ihren Remote-Rechnern (AppleScript oder anders) und dann remote AppleScript verwenden, um die Ausführung Ihres Update-Skript nach Bedarf auszulösen.

Wenn Sie oft updaten, dann ist Jim Puls Idee eine großartige Idee. Wenn Sie lieber direkt steuern möchten, wann die Maschinen nach einem Update suchen, dann ist Remote-AppleScript die einfachste Lösung, die ich mir vorstellen kann.

Verwandte Themen