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.
Antworten:
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...
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.
quelle
~/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!