Unsere eigene Software mit Puppet bereitstellen?


8

(Ich entschuldige mich im Voraus für die Dummheit in dieser Frage. Ich bin normalerweise ein Programmierer, kein Systemadministrator, aber ich habe es mir zur Aufgabe gemacht, einige Dinge zu automatisieren und einige andere Dinge zu bereinigen, die automatisiert sind, aber nicht auf die schönste Weise . :-)

Ich habe mich in verschiedenen Tools zur Automatisierung der Softwarebereitstellung auf einer Reihe von Servern wie cfengine, Puppet und Chef umgesehen. Bisher sieht Puppet am ansprechendsten aus, aber ich habe mich noch zu nichts verpflichtet.

Diese Tools sehen alle so aus, als könnten sie eine Reihe von Servern mit vorgefertigter Software auf dem neuesten Stand halten .

Was ich nicht verstehe, ist: Wie verwendet man ein Tool (wie Puppet), um Bereitstellungen unserer eigenen internen Software zu verwalten? Ich glaube , ich bin ratlos , weil ich habe tausend Tutorials gesehen zeigen , wie Apache zu halten ensure => latest(das ist ziemlich cool), aber nichts , was ganz entspricht meinen Anwendungsfall heute, was etwas mehr wie ist:

  1. wenn ein Mensch den Knopf drückt,
  2. Ziehen Sie Zweig A aus dem Versionskontroll-Repository B.
  3. Führen Sie den Befehl C aus, um ihn zu kompilieren
  4. Kopieren Sie die Binärdateien D auf die Server E1 bis E10
  5. Führen Sie auf jedem Server den Befehl F aus, damit alle Änderungen wirksam werden

Puppet klingt großartig, und ich sehe den Vorteil einer deklarativen, idempotenten Konfiguration gegenüber einigen Shell-Skripten voll und ganz, aber ich habe keine Tutorials für "Sie möchten Ihre Shell-Skripte auf Puppet (oder Chef oder cfengine) aktualisieren. Hier ist also, was Sie tun." sollte tun ". Gibt es so etwas? Ist es für andere Menschen offensichtlich, wie sie die in den Puppet-Dokumenten bereitgestellten Dinge übernehmen und das gewünschte Verhalten replizieren können? Verstehe ich es einfach nicht?

Bisher klingt es für mich so, als würde der Mensch (Nr. 1) die Software (Nr. 2 und Nr. 3) außerhalb von Puppet manuell verpacken und die Puppet-Konfiguration manuell aktualisieren, wodurch Puppet veranlasst würde, die Server zu aktualisieren. .. könnte sein? (Ich bin hier etwas verwirrt, wie Sie sicher sehen können.)

Vielen Dank!


Puppet soll mit dem Muster "Pakete, Dateien, Dienste" arbeiten. Puppet wäre großartig, um Ihre Server vorzubereiten, aber ein Continuous Build Server wie Jenkins könnte ein besseres Werkzeug für diesen Anwendungsfall sein.
Spuder

Antworten:


5

Wir verwenden Puppet, aber wir verwenden es nicht für unsere Anwendungsbereitstellungen. Wie Sie sagten, können Sie Ihre Software in Debs oder RPMs verpacken, Ihr privates Repository überall konfigurieren und Puppet zur Steuerung von Versionen verwenden. Sie können jedoch weiterhin auf die nächste 30-minütige Aktualisierung auf allen Ihren Servern warten.

Was ich tun würde (und das entspricht in etwa dem, was wir tun, aber wir verwenden Schienen, sodass es keinen Kompilierungsschritt gibt):

  • Verwenden Sie Puppet, um alles auf dem Server außer der Anwendung selbst zu konfigurieren. Abhängigkeiten, Webserver, Benutzer, Pfade usw.
  • Lassen Sie die kompilierten Artefakte von Ihrem automatisierten Build-Server (Bambus, Hudson, Tempomat usw.) in einem Repository-Manager wie Nexus ablegen.
  • Verwenden Sie capistrano, um Builds auf Ihre Server zu übertragen.

Der Chefkoch verfügt möglicherweise über mehr Push-Funktionen in Echtzeit. Ich bin damit nicht sehr vertraut.


Diese spezielle Software verwendet Ruby nicht. Ich hatte den Eindruck, dass Puppet ziemlich agnostisch ist, Capistrano jedoch so konzipiert ist, dass es am besten mit Rails-Apps funktioniert. Aber es ist ein paar Jahre her, seit ich die Kappe verwendet habe. Vielleicht hat sie sich geändert, und ich werde sie jetzt noch einmal überprüfen.
Ken

1
Capistrano neigt zu Rails, ist aber flexibel und kann problemlos für andere Sprachen verwendet werden. Lesen Sie einfach die Standardrezepte für die Bereitstellung und überschreiben Sie sie in Ihrem eigenen Rezept. Es ist nur Programmierung. Mein Unternehmen stellt Dutzende von PHP-Apps über Capistrano auf einer Handvoll Server bereit, obwohl wir das Webistrano-Frontend verwenden, um die Verwaltung zu vereinfachen.
Martijn Heemels

2
Capistrano ist in Ordnung, aber MCollective und RunDeck sind besser auf die Integration mit Puppet abgestimmt.
Jgoldschrafe

Sie können sich auch Fabric ansehen. Es ist ein bisschen wie Capistrano, aber in Python.
Boykott SE für Monica Cellio

1

Die Schritte 1 bis 3 werden üblicherweise in einem Erstellungsprozess automatisiert. Normalerweise durchläuft die Ausgabe dieses Prozesses einen Testzyklus. Ich verpacke die Ausgabe so, dass sie in einer Integrationstestumgebung bereitgestellt werden kann. Nur wenn die Integrationstests bestanden sind, sollten die Schritte 4 und 5 ausgeführt werden.

Ihr Schritt 5 impliziert einen Bereitstellungsausfall. Für etwas wie Apache kann dies durch Herunterfahren und Neustarten während der Protokollrotation behandelt werden. Ein Crontab-Skript kann damit umgehen. Wenn Sie fortlaufende Änderungen über einen Zeitraum von etwa einer Stunde verarbeiten können, nehmen Sie den Neustart einfach in den Bereitstellungsschritt 4 auf. Puppet oder cfengine sind geeignete Tools für Schritt 4. Dies kann durch Aktualisieren des Repositorys ausgelöst werden, wenn die Integrationstests bestanden sind.


1

Suchen Sie nach Puppenrezepten und Sie werden Tonnen von produktionsfertigen Skripten finden. Ja, Sie müssten die Software manuell verpacken. Wenn Sie Ihr eigenes persönliches Repository verwalten, können Sie das Flag Sicherstellen => Neueste verwenden. Schreiben Sie dann ein Rezept, um Puppet anzuweisen, die Software zu installieren. Das Rezept müsste auf dem Master-Server abgelegt werden, von wo aus es an die Slaves weitergegeben wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.