So stellen Sie Ihre Cloud Foundry-App mit Travis CI (fast) ohne Angst bereit

Anwendungsbereitstellungen in der Cloud sollten problemlos sein. Wir sollten in der Lage sein, kontinuierlich neuen Code bereitzustellen, so oft wir wollen, ohne Angst zu haben. Das blaugrüne Bereitstellungsmodell ermöglicht dies.

Ich bin kürzlich einem neuen Team bei der Arbeit beigetreten, das mithilfe von Travis mit dem Bluemix CloudFoundry-Bereitstellungsanbieter die Cloud Foundry-Anwendungen von node.js in der IBM Cloud bereitstellte. Dies funktioniert hervorragend, um Ihre Bereitstellung mit nur wenigen Parametern schnell und einfach einzurichten.

Leider bedeutet jede Bereitstellung einen Ausfall Ihrer Anwendung, da die vorhandene Version gestoppt und die neue Version gestartet wird. Es gibt auch keine Überprüfung, ob der neue Code gut ist, bevor der alte Code weggeblasen wird.

Mit der blau-grünen Bereitstellungstechnik wird Ihre aktuelle Anwendung (Blau) weiterhin ausgeführt und nimmt den Netzwerkverkehr auf. Während Ihr neuer Anwendungscode (grün) auf einer temporären Route bereitgestellt wird. Die neue Green-Anwendung kann auf der temporären Route validiert werden. Wenn Probleme auftreten, wird die Bereitstellung gestoppt. Die Blue-Anwendung bedient den Datenverkehr weiterhin ohne Unterbrechung. Sobald die Green-Anwendung überprüft wurde, wird der Router so aktualisiert, dass er auf die Green-Anwendung zeigt. Das Blau kann gestoppt werden.

Auf diese Weise steht immer eine Version der Anwendung zur Verfügung, um Datenverkehr aufzunehmen. Probleme bei der Bereitstellung oder Laufzeit des neuen Codes wirken sich nicht auf die Verfügbarkeit Ihrer Anwendung aus.

Ich fing sofort an, mich nach einer Möglichkeit umzusehen, unsere Anwendungen blau-grün bereitzustellen. Um so wenig benutzerdefinierten Code wie möglich zu schreiben, habe ich mich entschlossen, das cf-blue-green-deploy-Plugin für die Cloud Foundry-Befehlszeilenschnittstelle (CLI) zu nutzen. Ich werde hier erzählen, wie ich das gemacht habe.

Ich gehe davon aus, dass Sie, wenn Sie hier gelandet sind, wahrscheinlich nicht mehr mit Travis „anfangen“ können. Ich werde diese Details hier nicht behandeln.

Wenn Sie nicht daran interessiert sind, mitzumachen und direkt zur Ware gelangen möchten, können Sie mein Arbeitsprobe von GitHub klonen.

Installieren der CF CLI und des blau-grünen Plugins

Da wir den Cloud Foundry-Bereitstellungsanbieter nicht verwenden, müssen wir die Cloud Foundry-CLI sowie das blau-grüne Bereitstellungs-Plugin selbst installieren. Wir können dies in der before_deployPhase des Travis-Build-Lebenszyklus tun .

Beachten Sie, dass die before_deployPhase vor jedem Bereitstellungsanbieter ausgeführt wird. Wenn Sie in Ihrer Bereitstellungsphase zusätzliche Aufgaben ausführen, möchten Sie diese Schritte möglicherweise in die after_successPhase verschieben (die nach einem erfolgreichen Build nur einmal ausgeführt wird), um unnötige zusätzliche Installationen zu vermeiden. Sie können diese Schritte auch in das Bereitstellungsskript selbst verschieben, das wir als Nächstes schreiben werden.

Unabhängig davon, wo Sie es ablegen, hier ist das Skript:

- echo "Installing cf cli"- test x$TRAVIS_OS_NAME = "xlinux" && rel="linux64-binary" || rel="macosx64"; wget "//cli.run.pivotal.io/stable?release=${rel}&source=github" -qO cf.tgz && tar -zxvf cf.tgz && rm cf.tgz- export PATH="$PATH:."- cf --version
- echo "Installing cf blue-green deploy plugin"- cf add-plugin-repo CF-Community //plugins.cloudfoundry.org- cf install-plugin blue-green-deploy -r CF-Community -f

Der Befehl zum Installieren der CLI stammt direkt von der CloudFoundry DPL-Quelle. Die Befehle zum Installieren des blau-grünen Bereitstellungs-Plugins stammen aus der README-Datei des Plugins.

Aufrufen der blau-grünen Bereitstellung

Um die blau-grüne Bereitstellung aufzurufen, verwenden wir den Skriptbereitstellungsanbieter, der einen bereitgestellten Befehl ausführt und als Erfolgsanzeige auf den Status Null prüft.

deploy:# on update to master branch we deploy to Cloud Foundry- provider: script skip_cleanup: true script: ./scripts/cf-blue-green-deploy.sh blue-green-cf-travis manifest.yml prod on: branch: master

Beachten Sie, dass auf eingestellt skip_cleanupist true. Ohne dies würden die soeben installierte CLI und das blau-grüne Bereitstellungs-Plugin entfernt, bevor die Bereitstellung ausgeführt wird.

Das Skript cf-blue-green-deploy.sh meldet sich bei der Cloud Foundry-API an und ruft das blau-grüne Bereitstellungs-Plugin auf. Neben der Angabe eines Anwendungsnamens und einer Manifestdatei können Sie auch ein Rauchtestskript an das blau-grüne Bereitstellungs-Plugin übergeben. Das Plugin ruft das Rauchtestskript auf, nachdem der neue Anwendungscode bereitgestellt wurde, aber bevor die Anwendungsroute auf die neue Anwendung umgeschaltet wird. Auf diese Weise können Sie eine beliebige Anzahl von Tests für den neuen Code ausführen, bevor der tatsächliche Datenverkehr darauf zugreift.

Dem Rauchtestskript wird ein einzelnes Argument übergeben. Das Argument ist die temporäre URL der neu bereitgestellten Anwendung. Wenn das Rauchtestskript erfolgreich beendet wird, wird die blau-grüne Bereitstellung abgeschlossen, indem die Route zur neuen Anwendung geändert wird. Wenn das Rauchtestskript mit einem Fehler beendet wird, fließt der Datenverkehr weiterhin zur alten Version der Anwendung. Die neue Version bleibt für die Fehlerbehebung verfügbar.

In meinem Beispielprojekt ruft das Rauchtestskript eine / version-API auf und überprüft, ob es mit einem 200-Statuscode zurückgegeben wird.

In unseren realen Projekten bei der Arbeit führen wir eine Postman-Sammlung für die neu bereitgestellte App aus. Sie möchten, dass Ihre Rauchtestsuite groß genug ist, dass Sie sich in Ihrem neuen Code sicher fühlen, aber nicht so groß, dass es lange dauert, eine Bereitstellung abzuschließen, oder dass schuppige Tests Sie daran hindern, eine erfolgreiche Bereitstellung abzuschließen.

Sie können optional eine umfassendere Suite von Regressionstests als after_deploySchritt ausführen, nachdem Ihr neuer Code live ist.

Nebenwirkungen einer blaugrünen Bereitstellung in der IBM Cloud

Bei der Bereitstellung in der IBM Cloud sind einige Nuancen dieses Ansatzes zu beachten. Da Sie bei jeder blau-grünen Bereitstellung eine neue CF-Anwendungsinstanz erstellen, ändert sich Ihre Anwendungsrichtlinie. Wenn Sie den Verfügbarkeitsüberwachungsdienst verwenden, gehen Ihre konfigurierten Tests verloren, wenn sich Ihre Guid ändert.

Um dies zu umgehen, stellen Sie eine permanente Dummy-Anwendung auf. Schreiben Sie Ihre Tests für Ihre blau-grün bereitgestellte App in die Konfiguration dieser Dummy-Anwendung. Sie können eine beliebige URL angeben, wenn Sie Ihre Verfügbarkeitsüberwachungstests schreiben.

Wenn Sie den Protokollanalysedienst verwenden, werden Sie feststellen, dass beim Klicken auf den Link "In Kibana anzeigen" auf der Registerkarte "Protokolle" Ihres Anwendungs-Dashboards eine Kibana-Suche in der Anwendungsleitfaden-Zeichenfolge gestartet wird. Anwendungsprotokolle vor Ihrer letzten Bereitstellung werden nicht angezeigt. Um dies zu umgehen, können Sie einfach nach dem Anwendungsnamen und nicht nach der Anwendungsrichtlinie filtern.

Ein weiterer Dienst mit demselben Problem ist die automatische Skalierung. Jedes Mal, wenn eine neue Anwendung im Rahmen der blaugrünen Bereitstellung aufgerufen wird, muss die Richtlinie für die automatische Skalierung neu konfiguriert werden. Es gibt eine Befehlszeilenschnittstelle, die Sie vermutlich zum Skripten verwenden könnten, aber ich musste dies noch nicht versuchen.

Wenn eines dieser Probleme für Sie kein Anfänger ist, haben Sie immer die Möglichkeit, ein benutzerdefiniertes blaugrünes Bereitstellungsskript zu schreiben, das zwei permanente CF-Anwendungen nutzt, eine blaue und eine grüne. Diese beiden Apps würden abwechselnd live und untätig sein. Sie können beide Anwendungen beispielsweise mit einer Richtlinie zur automatischen Skalierung konfigurieren.

Dieser Ansatz bedeutet natürlich, dass Sie das in diesem Beitrag beschriebene blau-grüne Bereitstellungs-Plugin nicht nutzen können und Ihr eigenes benutzerdefiniertes Skript verwalten müssen.

Einpacken

In diesem Beitrag haben wir untersucht, wie wir mit Travis und dem blau-grünen Bereitstellungs-Plugin eine Bereitstellung mit geringem Risiko und ohne Ausfallzeiten erreichen können.

In a real project, we would have even greater assurances, as we would have a suite of unit tests in place, and errors there would fail the Travis build before the deployment had a chance to run. We would also potentially have dev and staging branches configured to deploy to their own respective spaces in our Cloud Foundry organization, allowing us to validate and stabilize the application as necessary before promoting changes to production.

Thanks for reading! This is my first Medium story, and I hope you found it useful.