Continuous Deployment von Azure Web Sites und Node.js

3 Minuten Lesezeit

Als Entwickler will ich weitestgehend repetitive Tasks vermeiden, um mich mit meinen eigentlichen Aufgaben oder Problemen bei der Softwareentwicklung auseinandersetzen zu können. Von daher verwende ich natürlich Continuous Integration. In diesem Blog-Artikel geht es, genauer gesagt, um den Einsatz von Continuous Deployment eines Node.js-Projekts, welches beim Windows Azure Websites-Service gehostet ist. Genauso bin ich im Übrigen bei der Entwicklung dieses Blogs vorgegangen.

1. Projekt erstellen

Zuerst benötigst du ein Projekt. Am besten zuerst ganz klein anfangen um etwaige Fehlerquellen gering zu halten.

Erstelle einen leeren Ordner und lege darin eine Datei package.json mit dem folgenden Inhalt ab.

{
}

Installiere danach Connect. Der Parameter --save erzeugt dabei automatisch einen Eintrag in der Datei package.json zum automatisierten Wiederherstellen dieser Abhängigkeit.

$ npm install connect --save

Erzeuge danach eine Datei server.js.

var connect = require('connect');

connect.createServer(function (req, res) {
    res.writeHeader(200, {"Content-Type": "text/plain"});
    res.write('Hi, I am up and running!');
    res.end();
}).listen(process.env.PORT || 3000);

Mit der Eingabe von node server.js startest du den Dienst. Über http://localhost:3000 greifst du nun auf ihn zu.

Der Teil process.env.PORT || 3000 bewirkt, dass Port 3000 nur verwendet wird, falls die Umgebungsvariable PORT nicht auf eine andere Zahl gesetzt ist.

2. Projekt in der Quellcodeverwaltung ablegen und Azure Web Site erstellen

Wechsle nun zum Azure Management Portal und erstelle eine neue Azure Web Site. Wichtig ist, dass die Option "Publish from source control" gesetzt ist.

Windows Azure - Create Web Site

Durch das Setzen dieser Option hat man nun die Möglichkeit auszuwählen, wo der Quellcode der Web Site abgelegt ist.

Windows Azure - Where is your source code

Es kann zwischen verschiedenen Quellen gewählt werden:

  • Bei Visual Studio Online
  • Lokales Git Repository (Gehostet auf Windows Azure)
  • Bei BitBucket gehostetes Repository
  • Bei GitHub gehostetes Repository
  • Bei CodePlex gehostetes Repository
  • Beliebiges anderes, externes Repository (Git oder Mercurial)
  • Ein Ordner auf Dropbox

Wähle nun eine der Optionen aus und folge den Anweisungen des Assistenten. Ich würde mich für ein BitBucket- oder GitHub-Repository entscheiden, da diese Dienste eine gewisse Datensicherheit gewährleisten.

3. Deployment anstoßen

Nun, nichts leichter als das. Nehmen wir an, dass ein GitHub-Repository gewählt wurde. Alle Commits müssen lediglich auf den Server gepusht werden und das Deployment wird automatisch angestoßen.

Hierbei wird Windows Azure über den Push in das Repository benachrichtigt und geht dann automatisch wie folgt vor:

  1. Abrufen des aktuellen Standes des eingestellten Branch im Repository.
  2. Wiederherstellung aller NPM-Packages mit dem Kommando npm install.
  3. Setzen der in den Site-Einstellungen festgelegten Umgebungsvariablen, sowie der Variable PORT.
  4. Automatisches Starten des Node-Prozesses mithilfe von iisnode (Modul für den IIS) sobald Zugriff erfolgt. Hierbei wird eine JS-Datei mit dem Namen server.js erwartet.

Fazit

Das Einrichten eines CD-Prozesses ist in wenigen Minuten erledigt und funktioniert mit jedem Mercurial oder Git-Repository. Im einfachsten Fall müssen keine besonderen Einstellungen vorgenommen werden und die Node-Anwendung ist wenige Sekunden nach dem Checkin lauffähig. Man bekommt somit direkt Antwort, ob die Anwendung lauffähig ist und kann auf Probleme sofort reagieren. Auf den Entwicklersystemen muss hierfür nichts eingerichtet werden, da der komplette Vorgang serverseitig und automatisiert abläuft. Man kann auch zwei Azure Web Sites anlegen, wobei eine auf einen Development-Branch und eine auf den Production-Branch in der Quellcodeverwaltung hört. Somit ist das Testen der Site jederzeit unter realen Bedingungen in der Azure Cloud möglich, ohne dass das Produktiv-System angetastet wird. Wenn man noch detailliertere Einstellungen für node.js und den darüber laufenden IIS festlegen möchte, ist dies natürlich auch möglich. Hierfür kann man die Dateien iisnode.yml und web.config verwenden. Mehr dazu in den nächsten Blog-Posts.


comments powered byDisqus