Ist Elastic Beanstalk für Unternehmens-CDs geeignet?

11

Ich arbeite mit einem Projekt, das Jenkins verwendet, um Microservices für Elastic Beanstalk zu erstellen und bereitzustellen. Wir stellen einen Integrationszweig in einer Testumgebung bereit, geben Zweige in einer Staging-Umgebung frei und erstellen dann einen endgültigen Master-Build für die Produktion. Ich habe ein paar Bedenken, wenn ich es so mache: Erstens bedeutet dies, dass wir eine Matrix von einem Build pro Projekt und Umgebung erhalten, was die Anstrengungen verdoppelt. und zweitens bedeutet dies, dass wir nicht dieselben Build-Artefakte für die Produktion bereitstellen, die beim Staging validiert wurden.

Ich bin geneigt, Beanstalk aufzugeben und zu einfachen ASGs zu wechseln, die so etwas wie Chef für Bereitstellungen verwenden. Damit hätten wir einen Build pro Projekt, der ein Build-Artefakt erzeugt, und wir könnten dasselbe Artefakt für die Produktion bereitstellen, das für die Bereitstellung genehmigt wurde. Der Übergang hat jedoch nicht unerhebliche Vorlaufkosten. Gibt es eine Möglichkeit, Beanstalk besser zu verwenden, um ein zuverlässigeres und einfacher zu verwaltendes CI / CD zu ermöglichen?

Hinweis : Das Heraufstufen desselben Build-Artefakts ist genau das, was ich tun möchte, aber aus den Dokumenten sehe ich keinen klaren Weg, dies zu tun. Es wird erklärt, wie Sie EB von Ihrer App-Quelle aus bereitstellen, aber nicht, wie Sie eine vorhandene Version in eine andere Umgebung hochstufen, es sei denn, ich habe es geschafft, direkt daran vorbei zu scrollen. Wenn es in EB selbst verfügbar ist, gibt es möglicherweise eine Einschränkung im Jenkins EB-Bereitstellungs-Plugin, die verhindert, dass es speziell in Jenkins ausgeführt wird, aber ich habe überhaupt keine Möglichkeit gesehen, dies zu tun.

Adrian
quelle
Ist es Ihre Jenkins-Umgebung, die die Einschränkung für einen einzelnen Build pro Umgebung darstellt? Ich verwende Elastic Beanstalk, um Anwendungen bereitzustellen, und die hochgeladenen Anwendungsartefakte können problemlos in mehrere Umgebungen befördert (bereitgestellt) werden. Ich sehe also nicht wirklich die Einschränkungen, die Sie beschreiben. Es klingt wie es kann ein Weg sein , können Sie Elastic Beanstalk nutzen zu tun , was Sie wollen. Diese Frage ist jedoch derzeit recht weit gefasst.
Andy Shinn
Warum bauen Sie Ihre Assets neu auf, anstatt sie nach dem Testen in anderen Umgebungen zu bewerben?
Evgeny

Antworten:

4

Meiner Meinung nach liegt Ihr Problem in diesem Szenario nicht bei Elastic Beanstalk, sondern bei Jenkins oder zumindest bei der Art und Weise, wie Sie es verwenden. Sie sollten sich wirklich darauf konzentrieren, "ein Ding" nur einmal zu bauen, unabhängig davon, was dieses Ding ist.

Vollständige Offenlegung: Ich arbeite für ThoughtWorks und bin unglaublich voreingenommen gegenüber GoCD. Ich werde versuchen, so neutral wie möglich zu formulieren, was ich meine. Ich werde die Dokumente unseres Tools als Beispiele verwenden, aber hoffentlich können die Leute auf ihre Systeme extrapolieren.

Irgendwann zu Beginn Ihrer Pipeline bauen Sie "Artefakte". Dies können Binärdateien sein, die Ihre gesamte Anwendung oder einen Teil davon darstellen, oder sie können von einer beliebigen Anzahl von Tools ausgegeben werden, z. B. von Testtools. Diese Artefakte sollten vom System gespeichert und nie wieder erstellt werden. Das System sollte dann bei Bedarf das Artefakt aus der richtigen Revision abrufen.

Zum Beispiel...

  1. Ich erstelle eine .jar-Datei und führe einige Unit-Tests darauf durch, grundlegende C / I-Sachen. Wenn dies erfolgreich ist, werden diese JAR-Datei und die Ausgabe der Tests in diesen bestimmten Pipeline-Job hochgeladen .
  2. Die nächste Pipeline könnte Ihre Bereitstellung in einer komplexeren Testumgebung sein. Es sollte das genaue Glas von dem genauen Job abrufen, der es gebaut hat. Anschließend wird Elastic Beanstalk ausgeführt, um das JAR in der richtigen Umgebung bereitzustellen.
  3. Die nächste Pipeline ist Ihre Staging-Bereitstellung. Es geht bis zur ersten Pipeline zurück und holt das genaue Glas aus dem genauen Auftrag, der es gebaut hat. Führen Sie dann Elastic Beanstalk aus, um das JAR in der richtigen Umgebung bereitzustellen.

Dies sind jeweils separate Pipelines, da Sie so mehr parallel oder bei Bedarf ausführen können, ohne zu blockieren.

Sie können Elastic Beanstalk, Chef, Puppet, Ansible, uDeploy oder eine beliebige Anzahl anderer Tools verwenden, um die eigentlichen Bereitstellungen durchzuführen. Von dort kommt Ihr Problem nicht. Continuous Integration Server wurden ursprünglich nicht dafür erstellt. Natürlich gibt es viele Plugins, mit denen Sie an den gleichen Ort gelangen können, wenn Sie dies bevorzugen.

Continuous Delivery-Server wie GoCD , Chef Automate und ConcourseCI wurden speziell entwickelt, um solche Probleme zu lösen.

Ken Mugrage
quelle
Ja, mein Ziel ist es, einmal zu bauen und in die Produktion zu fördern. Meine Frage ist, ob Bohnenstange für diese Art der Verwendung geeignet ist. Soweit ich das beurteilen kann, scheint es wirklich nicht so zu sein. Die empfohlene Methode zum Bereitstellen einer .NET-Anwendung besteht beispielsweise darin, dies in Visual Studio zu tun. Dies ist die schlechteste Methode, die ich mir vorstellen kann.
Adrian
Ich habe es nicht persönlich verwendet, aber es scheint so, als würde man das Wort "fördern" in "bereitstellen" ändern. Ihr CD-System ruft Beanstalk auf, um es für Tests bereitzustellen, führt einige Tests aus und meldet dann Erfolg / Misserfolg. Wenn dies erfolgreich ist, ruft Ihr CD-System Beanstalk auf, um es für das Staging bereitzustellen, und so weiter. Die Heraufstufung erfolgt also durch Ihr Orchestrierungstool, die Bereitstellung durch Ihr Bereitstellungstool. (Zu Ihrer Information, aus diesem Grund haben Unternehmen wie Chef Hibernate (das Ding), Automate (fördern das Ding) und Chef (setzen das Ding ein).
Ken Mugrage
Zu Ihrer Information , es sieht so aus, als könnten Sie es skripten (Infrastruktur als Code ist eine "gute Sache") docs.aws.amazon.com/elasticbeanstalk/latest/dg/… - aber auch hier absolut keine persönliche Erfahrung.
Ken Mugrage
Egal welches Wort Sie verwenden, Bohnenstange scheint es nicht zu tun, soweit ich das beurteilen kann. Es scheint auf die Bereitstellung aus der Quelle ausgerichtet zu sein, nicht auf Artefakte. Auf der von Ihnen verlinkten Seite: "Wenn Sie eb deploy ausführen, bündelt die EB CLI den Inhalt Ihres Projektverzeichnisses und stellt ihn in Ihrer Umgebung bereit." Ich schätze die Antwort, aber meine Frage ist spezifisch für Bohnenstange, so dass hoffentlich jemand, der Erfahrung mit Bohnenstange hat, mitmachen kann.
Adrian
Ah, tut mir leid. Ich habe so interpretiert ~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3, dass es sich um eine Zip-Datei handelt, die Sie in diesem Verzeichnis gespeichert haben. Viel Glück!
Ken Mugrage