Ihre Vagrant-Box versionieren
Erfahren Sie, wie Sie Ihre Vagrant-Boxen mit Vagrant Cloud sauber versionieren. Diese Schritt-für-Schritt-Anleitung führt Sie durch den gesamten Prozess von der Konfiguration Ihres Vagrantfiles bis zur Veröffentlichung versionierter Boxen und hilft Ihnen, in Ihrem Team und Ihren Projekten einheitliche Entwicklungsumgebungen beizubehalten.
Überblick
Nachdem ich mit der Versionierung in Vagrant experimentiert hatte, habe ich beschlossen, dieses Tutorial für alle zu schreiben, die das zum ersten Mal machen. Die Dokumentation zu dieser Funktion und ihrer Verwendung ist dürftig und verstreut. Wenn Sie Verbesserungsvorschläge haben, lassen Sie es mich bitte wissen.
Vagrant
Vagrant ist ein Tool zum Aufbau vollständiger Entwicklungsumgebungen. Mit einem einfach zu bedienenden Workflow und dem Fokus auf Automatisierung verkürzt Vagrant die Einrichtungszeit von Entwicklungsumgebungen, bringt Entwicklung und Produktion näher zusammen und macht die Ausrede „Auf meinem Rechner funktioniert es“ zu einem Relikt der Vergangenheit.
Vagrant Cloud
Vagrant Cloud ist ein Ort zum Teilen, Entdecken und Erstellen von Vagrant-Umgebungen. Derzeit befindet sich Vagrant Cloud in der Beta-Phase.
Eine eigene oder vorhandene Box verwenden
Um diesem Tutorial zu folgen, empfiehlt es sich, eine Box zu haben. Sie können eine vorhandene Box verwenden oder eine eigene erstellen. Ganz gleich, ob Sie eine Box erstellen oder eine vorhandene nutzen – für die Versionierung müssen Sie an der Box selbst nichts Besonderes ändern.
Für dieses Tutorial verwende ich eine vorhandene Ubuntu-Box, die ich mit Packer erstellt habe. Ein Beispiel der verwendeten Templates finden Sie in meinem GitHub-Projekt skoblenick/packer-examples.
Eine Version im Vagrantfile angeben
Mit den Änderungen an der Vagrant-API in Vagrant 1.5.0+ ist die Möglichkeit zur Versionierung hinzugekommen. Die beiden Einstellungen, mit denen Sie sich hauptsächlich befassen müssen, sind:
config.vm.box_version
Die zu verwendende Version der Box. Diese Version muss einer in Vagrant Cloud als „Released“ markierten Version entsprechen.
config.vm.box_check_update
Ist dieser Wert true, prüft Vagrant bei jedem vagrant up, ob Updates für die konfigurierte Box vorliegen.
In Ihrem Vagrantfile haben Sie dann etwas Ähnliches wie:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.5.2"
Vagrant.configure("2") do |config|
config.vm.box = "skoblenick/precise64"
config.vm.box_version = "1.0.0"
config.vm.box_check_update = true
config.vm.provider "vmware_fusion" do |v, override|
v.gui = false
end
end
Wenn Sie Vagrant jetzt ausführen, schlägt das fehl. Vagrant kann „skoblenick/precise64“ nicht finden, und Sie erhalten einen 404 Not Found.
Box-Namespaces
Vor Vagrant 1.5.0 wurde eine Box typischerweise über einen lokalen Dateipfad oder eine HTTP-URL zur gehosteten Box referenziert.
Mit Vagrant 1.5.0 wurden Namespaces eingeführt, die einem Muster wie „<vagrantcloud_user>/<box_name>“ folgen. Sie können sich das als Alias vorstellen, den Vagrant durch eine Abfrage bei Vagrant Cloud in eine HTTP-URL auflöst. Das bedeutet nicht, dass Ihre Box in Vagrant Cloud gespeichert sein muss. In den meisten Fällen werden dort nur die Metadaten gespeichert, die die Box definieren.
Ein Konto auf vagrantcloud.com anlegen
Sie müssen ein Konto bei Vagrant Cloud anlegen. Eine Schritt-für-Schritt-Anleitung dafür spare ich mir, da die Registrierung recht unkompliziert ist. Sobald Ihr Konto erstellt und verifiziert ist, melden Sie sich an.
Eine Box in Vagrant Cloud definieren
Da sich Vagrant Cloud in der Beta-Phase befindet, können sich die hier beschriebenen Schritte künftig ändern. Mit den folgenden Schritten erstellen Sie eine neue Box.
Wählen Sie in der Hauptnavigation „Create Box“.
Geben Sie die allgemeinen Informationen zu Ihrer Box ein.
- In meinem Fall nenne ich die Box „precise64“.
- Außerdem mache ich diese Box privat, da sie auf meinem Entwicklungs-Webserver liegen wird.
- Ergänzen Sie alle weiteren Informationen, die Sie für nötig halten.
- Klicken Sie auf die Schaltfläche „Create box“.
Im nächsten Schritt definieren Sie die Version Ihrer Box.
- Vagrant empfiehlt Semantic Versioning. Geben Sie also eine Versionsnummer für Ihre Box ein.
- Geben Sie bei Bedarf eine Beschreibung ein.
- Klicken Sie auf die Schaltfläche „Create version“.
Als Nächstes fügen wir die Provider hinzu, die von der zu definierenden Box unterstützt werden.
- Klicken Sie auf die Schaltfläche „Create new provider“.
- Geben Sie den Namen Ihres Providers ein. In meinem Fall verwende ich VMware Fusion und gebe daher „vmware_desktop“ ein.
- Klicken Sie auf die Schaltfläche „URL“.
Daraufhin erscheinen ein Eingabefeld für die Box-URL und eine Schaltfläche zum Hinzufügen des Providers. - Geben Sie die URL Ihrer Box ein. In meinem Fall ist das
http://localhost/boxes/precise64-1.0.0_vmware.box. - Klicken Sie auf die Schaltfläche „Create provider“.
Sie werden aufgefordert, die Version zu bearbeiten. Wenn Sie Ihre Angaben aktualisieren möchten, können Sie das tun. Wichtig auf dieser Seite ist die grüne Schaltfläche „Release now“.
- Klicken Sie auf „Release now“. Dadurch wird die Box nicht öffentlich, aber ihr Status wird auf aktiv gesetzt. So können die Benutzer, die wir als Collaborators hinzufügen, die Box verwenden. Als Ersteller der Box müssen wir uns selbst nicht als Collaborator hinzufügen.
Bevor wir die Box herunterladen können, denken Sie daran, dass ich meine Box privat gemacht habe. Bei dieser Einstellung ist ein zusätzlicher Schritt nötig: Vagrant muss wissen, mit welchem Benutzer es sich bei Vagrant Cloud anmelden soll.
vagrant login
Für eine öffentliche Box ist dieser Schritt nicht erforderlich. Wenn Sie jedoch wie oben eine private Box erstellt haben, müssen Sie im Terminal dort, wo Sie Vagrant ausführen, folgenden Befehl ausführen.
username$ vagrant login
In a moment we'll ask for your username and password to Vagrant Cloud.
After authenticating, we will store an access token locally. Your
login details will be transmitted over a secure connection, and are
never stored on disk locally.
If you don't have a Vagrant Cloud account, sign up at vagrantcloud.com
Username or Email: user@example.com
Password (will be hidden):
You're now logged in!
vagrant up
Schließlich können wir im Terminal vagrant up ausführen, und unsere Box wird
heruntergeladen, geklont und gestartet. Alternativ können wir die Box auch
einfach mit vagrant box add skoblenick/precise64 hinzufügen.