Pracuję z projektem wykorzystującym Jenkinsa do tworzenia i wdrażania mikrousług na Elastic Beanstalk. Wdrażamy gałąź integracji w środowisku testowym, wypuszczamy gałęzie do środowiska pomostowego, a następnie finalną wersję główną do produkcji. Mam kilka obaw związanych z robieniem tego w ten sposób: po pierwsze, oznacza to, że otrzymujemy matrycę jednej kompilacji na projekt na środowisko, powielając wysiłki; a po drugie, oznacza to, że nie wdrażamy tych samych artefaktów kompilacji do produkcji, które zostały sprawdzone podczas przemieszczania.
Skłaniam się do porzucenia Beanstalk i przejścia do zwykłych ASG przy użyciu czegoś takiego jak szef kuchni do wdrożeń. To dałoby nam jedną kompilację na projekt, tworząc artefakt kompilacji, i moglibyśmy wdrożyć ten sam artefakt do produkcji, która została zatwierdzona podczas przygotowywania. Przejście na system wiąże się jednak z niewielkimi kosztami wstępnymi. Czy jest jakiś sposób na lepsze wykorzystanie Beanstalk, które pozwoliłyby na bardziej niezawodne, łatwiejsze w zarządzaniu CI / CD?
Uwaga : Promowanie tego samego artefaktu kompilacji jest dokładnie tym, co chcę zrobić, ale z dokumentów nie widzę żadnego wyraźnego sposobu, aby to zrobić; wyjaśnia, jak wdrożyć do EB ze źródła aplikacji, ale nie jak promować istniejącą wersję w innym środowisku, chyba że udało mi się przewinąć tuż obok niej. Jeśli jest dostępny w samym EB, może istnieć ograniczenie we wtyczce wdrażania Jenkins EB, które uniemożliwia wykonanie go w Jenkins, ale nie widziałem w ogóle sposobu, aby to zrobić.
Odpowiedzi:
Zdaniem IMO twój problem nie dotyczy Elastic Beanstalk w tym scenariuszu, dotyczy Jenkins, a przynajmniej sposobu, w jaki go używasz. Powinieneś naprawdę skoncentrować się na budowaniu „rzeczy” tylko raz, niezależnie od tego, co to jest.
Pełne ujawnienie: Pracuję dla ThoughtWorks i jestem niewiarygodnie stronniczy w stosunku do GoCD. Spróbuję wyjaśnić, co mam na myśli, tak neutralny, jak to tylko możliwe. Będę korzystać z dokumentów naszego narzędzia, które są przykładami, ale mam nadzieję, że ludzie będą mogli ekstrapolować swoje systemy.
Gdzieś na początku swojej rurociągu budujesz „artefakty”. Mogą to być pliki binarne reprezentujące całość lub część aplikacji lub dane wyjściowe z dowolnej liczby narzędzi, takich jak narzędzia testujące. Te artefakty powinny być przechowywane przez system i nigdy więcej nie budowane. W razie potrzeby system powinien pobrać artefakt z odpowiedniej wersji.
Na przykład...
Są to osobne potoki, ponieważ pozwala to na uruchamianie większej liczby równolegle lub na żądanie bez blokowania.
Możesz użyć Elastic Beanstalk, Chef, Puppet, Ansible, uDeploy lub dowolnej liczby innych narzędzi do wykonania rzeczywistych wdrożeń. Nie z tego pochodzi twój problem. Serwery ciągłej integracji nie zostały pierwotnie zbudowane w tym celu. Oczywiście istnieje wiele wtyczek, których możesz użyć, aby dostać się do tego samego miejsca, jeśli takie są twoje preferencje.
Serwery Continuous Delivery, takie jak GoCD , Chef Automate i ConcourseCI, zostały zbudowane specjalnie w celu rozwiązania takich problemów.
źródło
~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3
na myśli każdy plik zip, który utknąłeś w tym katalogu. Powodzenia!