Zum Inhalt springen

Development

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.

5 Min. Lesezeit

Ü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:

  1. config.vm.box_version

    Die zu verwendende Version der Box. Diese Version muss einer in Vagrant Cloud als „Released“ markierten Version entsprechen.

  2. 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.

  1. Wählen Sie in der Hauptnavigation „Create Box“.

  2. 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“.
  3. 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“.
  4. 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“.
  5. 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.

Teilen