Elastische Beanstalk-Schienenanwendung mit Git-Quelle und Einsatzhaken

4460
Divya Bhargov

Ich möchte Elastic Beanstalk für meine vorhandene Schienenanwendung einrichten.

Ich war erfolgreich in der Beispiel-Foo-App.

Das sind die Fragen, die ich habe

Ich brauche die Bereitstellung von meinem Git-Repository aus und nicht von meinem lokalen Pfad aus, auf dem ich bereitstelle. Wie mache ich das für die Beispiel-Foo-App?

Der Befehl git aws.push scheint auf der neuen ec2-Instanz implementiert zu werden. Die Änderungen wurden jedoch nicht in mein Git-Repository übernommen. Soll ich einen Git-Push separat ausführen, bevor ich einen Git A-Push mache? Beachten Sie, dass mein Zweig bei einem Git-Status um 1 Commit voraus ist. Unterhält aws ein separates Git-Repository? Wie kann ich dafür sorgen, dass mein Git-Repository verwendet wird?

[mymac:~/Projects/new/foo(master)]$ git aws.push Counting objects: 4949, done. Delta compression using up to 4 threads. Compressing objects: 100% (1115/1115), done. Writing objects: 100% (4949/4949), 14.11 MiB | 1.90 MiB/s, done. Total 4949 (delta 3800), reused 4944 (delta 3798) remote:  To https://AKIAJZT3WFY2WLO6CHQQ:20121127T030627Zf56675b2f4c9c731ca6f51b11d36a438e8bcee25c5171061ce5ac681495318c9@git.elasticbeanstalk.ap-southeast-1.amazonaws.com/v1/repos/617069/commitid/39396162666436346439656465313537613561343561626465643931393366623762386265303138/environment/6170692d656e76 * [new branch] HEAD -> master   [mymac:~/Projects/new/foo(master)]$ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean) 

Unten ist das Ergebnis von nur einem Git-Push.

[mymac:~/Projects/new/foo(master)]$ git push Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 340 bytes, done. Total 3 (delta 2), reused 0 (delta 0) To git@github.com:xxxx/foo.git 885cc33..99abfd6 master -> master 

Getrennt davon muss ich einen before_symlink-Bereitstellungshaken haben. Wie kann ich das machen ?

3

2 Antworten auf die Frage

5
rhetonik

Aus Ihrer Frage war nicht klar, ob Sie die git aws.pushOption bereits ausprobiert haben . Sie können einen Blogeintrag in AWSBlog für die Bereitstellung von Rack-basierten Anwendungen für AWS Elastic Beanstalk empfehlen. Um das gleiche zusammenzufassen, können Sie es in den folgenden einfachen Schritten tun:

  1. eb init
  2. eb start
  3. git aws.push

Dazu müssen Sie natürlich AWS Elastic Beanstalk-Befehlszeilenprogramme herunterladen.

AFAIK, AWS Elastic Beanstalk ist noch nicht mit Git-Implementierungshaken integriert, aber es ist ziemlich einfach, wenn Sie bereits einen CI-Server wie Jenkins verwenden. Github lässt sich sehr gut in die meisten CI-Server integrieren. Sie können eine git pushAuslösung git aws.pushvon Ihrem CI-Server erreichen, indem Sie einen neuen Jenkins-Job mit benutzerdefinierten Shell-Befehlen hinzufügen. Möglicherweise möchten Sie auch einen Test-Harness ausführen, bevor Sie dort ein neues Build ausführen. Jenkins oder Travis CI erledigen die Arbeit für Sie!

In Bezug auf die Ausführung von before_symlinkTypaufgaben unterscheidet sich AWS Elastic Beanstalk von einer herkömmlichen Capistrano-Bereitstellung. Es bündelt Ihren gesamten Code in einem ausführbaren Archiv und kopiert ihn einfach auf Knoten mit Lastenausgleich. Um before_symlinkähnliche Aufgaben auszuführen, möchten Sie möglicherweise einige benutzerdefinierte Konfigurationsdateien schreiben und diese unter .ebextensionsdem Stammpfad Ihres Git-Repositorys ablegen. Wie ich es gemacht habe, ist das Hinzufügen einer .ebextensions/symlink.configDatei. Hier ist ein Beispielcode zum Symlinking Ihrer database.ymlDatei auf dem Server.

container_commands: symlink-db: command: ln -sf /var/app/shared/database.yml $EB_CONFIG_APP_ONDECK/config/database.yml 

Bitte beachten Sie, dass ich ein benutzerdefiniertes AMI mit einem /var/app/shared/Verzeichnis betreibe, das ansonsten beim Starten eines Vanilla-Ruby-Containers nicht vorhanden ist. Darüber hinaus enthält die $EB_CONFIG_APP_ONDECKUmgebungsvariable den aktuellen Namen des Implementierungsverzeichnisses (normalerweise /var/app/ondeck), in den verschoben wird, /var/app/currentsobald die Bereitstellung abgeschlossen ist und bevor der Rails (Passenger) -Server neu gestartet wird, wodurch er für die Bearbeitung von Anforderungen verfügbar ist. Weitere Informationen zum Anpassen von AWS Elastic Beanstalk-Containern finden Sie hier .

Hoffe das hilft.

Hallo, ich habe meine Frage zu git aws.push bearbeitet. Könnten Sie sich das bitte mal ansehen und mir sagen Divya Bhargov vor 11 Jahren 0
Ich bin nicht sicher, ob dies der beste Weg ist, aber ich habe immer einen "git push" gefolgt von einem "git aws.push" gemacht. Da meine Umgebung mit Jenkins CI eingerichtet wurde, fand "git push" auf meinem Entwicklungscomputer statt, während "git aws.push" vom CI-Server aus erfolgte. rhetonik vor 11 Jahren 0
In Bezug auf die Erweiterungen ... gibt es eine Möglichkeit, zu debuggen, warum mein Befehl nicht ausgeführt wird. Ich habe den symbolischen Link für database.yml ausprobiert, den Sie angegeben haben ... aus irgendeinem Grund wurde der symbolische Link nicht erstellt. Alle Debug-Richtlinien wären hilfreich. Ich habe versucht, den Befehl nach der Bereitstellung auszuführen, indem ich $ EB_CONFIG_APP_ONDECK in / var / app / current ersetzte und der Befehl als solcher funktionierte. Divya Bhargov vor 11 Jahren 0
Momentan ist mir keine Debugging-Technik bekannt. Ich habe sogar versucht, nach einigen Ausschau zu halten, konnte aber keine Standardrichtlinien dafür finden. Über den symbolischen Link, nur zur Bestätigung, haben Sie ein Verzeichnis `/ var / app / shared` in der Instanz? Manuelle Symlinks funktionieren immer. Haben Sie den Wert der Umgebungsvariable EB_CONFIG_APP_ONDECK überprüft? Können Sie die Ausgabe von `echo $ EB_CONFIG_APP_ONDECK 'einfügen? rhetonik vor 11 Jahren 0
Hey, jetzt geht es gut. Ich hatte eine andere Klarstellung. Ich möchte einen Prozess erst starten, nachdem der Ordner EB_CONFIG_APP_ONDECK in den aktuellen Ordner verschoben wurde. Es handelt sich also im Wesentlichen um einen Post-Deployment-Prozess. Wie würde ich das machen? Mit ebextensions wird alles erledigt, bevor EB_CONFIG_APP_DECK in current übertragen wurde Divya Bhargov vor 11 Jahren 0
Ich bin mir nicht sicher, aber ich denke, es kann mit Diensten gemacht werden. http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html#customize-containers-format-services rhetonik vor 11 Jahren 0
0
Oskar

Ich konnte Travis CI-Test-Builds in Amazon Beanstalk-Bereitstellungen integrieren. Um dies zu tun, musste ich die eb-Tools automatisieren, da die aktuelle Version 2.5.1 nur interaktiv ausgeführt wird. Deshalb habe ich den EB-Tools-Code für einige Python-Dateien bearbeitet und dann eine .travis.yml-Datei mit den entsprechenden Anweisungen erstellt Stellen Sie die App für AWS Beanstalk bereit.

Hier ist ein Link zu meinem Blog, der eine vollständige Beschreibung des Prozesses enthält:

http://www.sysadminops.com/amazon-beanstalk-and-travis-ci-integration/

Willkommen bei Superuser. Ich bitte Sie, dass Ihr Blog nicht Ihr einziger Beitrag zu dieser Website sein darf, egal wie wertvoll die Lösung auch sein mag. Mokubai vor 11 Jahren 2
Nur ein Heads-Up, Ihr Link führt Sie zu einer Spam-Seite. A WARNUNG an alle, die darauf klicken :) Andrew K vor 9 Jahren 1