2014-06-17 13 views
7

Da ich in einem Team arbeiten, mag ich den Prozess der Arbeit mit vagabundierenden machen (und Koch-Solo) so reibungslos wie möglich.
Wenn jemand im Team verändert die Koch Kochbücher, Rollen oder was auch immer, ich möchte, dass alle anderen Teammitglieder automatisch zu „empfangen“ die Änderungen durch vagabundierende Wieder Zurverfügungstellen (wie „Vagabund provision“ ausgeführt wird) auf der nächsten „Vagrant up ", ohne dass jedes Teammitglied davon erfahren und manuell neu bereitstellen muss.Bedingtes Bestimmung („Vagabund provision“) auf „vagabundierenden up“

Ich dachte, dies zu erreichen, die git post erhalten Hook-Skript touch eine Datei auf dem Stammordner des Projekts, indem er. Dann, wenn "vagrant up" aufgerufen wird, wird es nach dieser Dateiexistenz suchen. Wenn die Datei existiert, wird sie erneut bereitgestellt, sobald das "up" beendet ist.

Gibt es eine bessere Möglichkeit, dies zu tun? Wie?
Wenn nicht, wie kann ich das tun?

Ich weiß, diese Frage (Force Vagrant to re-provision or download a new box on next vagrant up) existiert, aber es ist nicht genau meine Situation (Ich bin speziell in Provisionierung interessiert, und weniger in der Virtualbox Maschine selbst - Box, etc ..).

Antwort

2

Vagrant unterstützt das Hinzufügen von Bereitstellern, die auf jedem vagrant up ausgeführt werden, indem :run => "always" zu der Bereitstellungszeile hinzugefügt wird.

Sie könnten einen provisioner hinzufügen, die überprüft, ob Änderungen vorgenommen werden müssen, läuft sie dann. (Oder, wenn die Änderungen wiederholbar sind, werden sie nur jedes Mal ausgeführt).

"Run Always" ist hier dokumentiert: https://docs.vagrantup.com/v2/provisioning/basic_usage.html

+1

wäre nicht die richtige Syntax sein: run => "immer"? Ich denke, du verpasst die Zitate. –

+0

Vielen Dank. Fest. –

2

Sie so etwas wie die folgenden an die Spitze Ihres Vagrantfile könnte hinzufügen:

 
# On vagrant up check that we have the latest repo changes 
if ARGV[0] == "up" && ARGV.join(" ") != "up --no-provision" 
    gs = `git status` # command to check repo status 
    gs.scan(/.*Your branch is behind.*/m) { |mtch| # check for out of date message 
    puts "Your Vagrant files are out of date... fetching..." 
    `git pull origin master` # command to fetch newest files. 
    exec "vagrant up --no-provision;vagrant provision" # Re-run vagrant up and provision 
    } 
end 

Angenommen, Sie verwenden Git die Vagrant Dateien und Kochbücher alle etc zu speichern, sollte dies ein Git-Status laufen (es kann ein brauchen holen auch) und überprüfen sie die Nachricht für jeden Hinweis, dass die Dateien nicht mehr aktuell sind ... wenn sie veraltet sind, wird es die neuesten Dateien ziehen und dann wieder vagrant up mit einem --no-provision laufen, bevor eine vagrant provision erneut Bestimmung läuft die Server.

Verwandte Themen