(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:
- wenn ein Mensch den Knopf drückt,
- Ziehen Sie Zweig A aus dem Versionskontroll-Repository B.
- Führen Sie den Befehl C aus, um ihn zu kompilieren
- Kopieren Sie die Binärdateien D auf die Server E1 bis E10
- 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!
Antworten:
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):
Der Chefkoch verfügt möglicherweise über mehr Push-Funktionen in Echtzeit. Ich bin damit nicht sehr vertraut.
quelle
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.
quelle
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.
quelle