0

Ich bin neu bei Jenkins, also habe ich eine Frage über die Bereitstellung. Meine Website läuft auf Amazon Beanstalk über Docker (automatische Skalierung). Momentan gibt es 3 laufende Instanzen und meine PHP App ist in /var/www.Bereitstellen von neuem PHP-Code und Ausführen von Composer für alle AWS Beanstalk-Instanzen über Jenkins?

Was Ich mag würde zu tun ist, wenn ich ein git push machen (unter der Annahme Test bestanden), ich möchte jeden laufenden EC2-Instanzen automatisch aktualisieren (gestartet von Beanstalk) mit dem neuen PHP-Code und dann composer install darauf laufen.

Im Moment ist der Befehl, den ich Leute auf Jenkins verwenden, um die Server zu aktualisieren, ist so etwas wie rsync und dann ssh in den Server, um composer update zu laufen.

Da ich die Instanzen nicht erstelle (Beanstalk ist) kenne ich die IP-Adressen meiner Instanzen nicht, also kann ich das nicht in meinen Jenkins-Job (wie die Tutorials) einfügen.

Also meine Frage ist: Wie können meine Jenkinks ein Code-Update auslösen und composer install auf meine bereits laufenden Instanzen (und alle neu erstellten Instanzen) von Amazon Beanstalk gestartet?

Was ist der richtige Weg, dies zu tun?

Antwort

1

Ich benutze CodePipeline, um genau das mit meiner Rails-App zu machen.

CodePipeline ist ein kostenloser Dienst, der Ihre Bereitstellungen steuert und ich Builds und Tests mit nur git push bereitstellen und ausführen.

Erstellen Sie eine Pipeline, die Ihren Git Repo als Quelle verwendet. Wählen Sie dann für Build-Build-Build-Provider "Jenkins hinzufügen", geben Sie die Server-URL und den Projektnamen ein. Wählen Sie als Betaversion AWS ElasticBeanstalk als Bereitstellungsanbieter aus, und wählen Sie Ihre Anwendung und Umgebung aus, für die Sie ElasticBeanstalk bereitstellen und festlegen möchten.

Was passiert ist, sagen Sie CodePipeline zu einem bestimmten Zweig Ihres Git Repo für Änderungen zu beobachten. Wenn es Änderungen bemerkt, möchten Sie, dass es die Pipeline ausführt. Wenn CP eine Änderung sieht, wird es zu Github gehen, den Code holen, das Paket bauen und das Paket durch die Pipeline führen. Für die Build-Phase wird es das Paket an Jenkins übergeben und Jenkins seine Sache machen lassen. Wenn Jenkins die Erfolgsmeldung zurück an CodePipeline sendet, führt CodePipeline den nächsten Schritt in der Pipeline aus. In diesem Fall teilen Sie CodePipeline mit, dass Sie ElasticBeanstalk zum Bereitstellen Ihrer Anwendung aufrufen möchten. Also übergibt es das Paket an ElasticBeanstalk und sagt "mach dein Ding". Was EB tut.

So haben wir jetzt Jenkins Ihre Code-Updates auslösen und wir müssen jetzt composer install auf alle Instanzen ausführen, nach der Bereitstellung. Sie können dies tun, indem Sie eine .config-Datei im Verzeichnis .exextensions erstellen. Sie werden einen Container Befehl wie folgt erstellen:

#.ebextensions/composer.config 

container_commands: 
    01_first_line: 
    command: cd /var/www 
    02_second_line 
    command: composer install 

Der Container-Befehl ausgeführt wird, nachdem der Server wurde stand, und nach der Anwendung Version extrahiert wurde, aber bevor er entfaltet wird. Als Rubyist bin ich nicht sicher, ob composer install vor der Bereitstellung ausgeführt werden muss, nach der Bereitstellung oder wenn es keine Rolle spielt. Sie können die AWS-Dokumentation zum Anpassen der Linux-Software auf Ihrem Server hier finden http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-container-commands einer von denen Sie composer install zur entsprechenden Zeit ausführen können.

+0

Vielen Dank, dass Sie es so einfach verstehen. Drei Fragen bezüglich der Bereitstellung von Code-Pipeline an EB. Wie ist das passiert? Q1) Ich verwende ein benutzerdefiniertes Docker - Image (Zip - Datei mit PHP - Code, eine Dockerfile - Datei und.ebextensions dir), um meine Website auf EB zu implementieren. Q2) Beendet es meine laufenden Instanzen und startet neue Instanzen wenn 'git push' passiert? Q3) Gibt es eine Ausfallzeit? – supersan

+0

Mein Vergnügen ... Bitte vergessen Sie nicht, es als Antwort zu wählen :). Als Antwort auf Ihre Fragen 1) ist eine Aussage, keine Frage da, 2) Nein, EB stellt sich auf die gleichen laufenden Instanzen, 3) keine Ausfallzeiten. – hephalump