O Elastic Beanstalk é adequado para CD de nível empresarial?

11

Estou trabalhando com um projeto que usa o Jenkins para criar e implantar microsserviços no Elastic Beanstalk. Implementamos uma ramificação de integração em um ambiente de teste, liberamos ramificações em um ambiente de preparação e, em seguida, uma construção principal final para produção. Tenho algumas preocupações em fazê-lo desta maneira: primeiro, significa que terminamos com uma matriz de uma compilação por projeto por ambiente, duplicando esforços; e dois, significa que não estamos implementando os mesmos artefatos de construção na produção que foram validados no preparo.

Estou inclinado a abandonar o Beanstalk e mudar para ASGs simples usando algo como Chef para implantações. Isso nos deixaria com uma construção por projeto, produzindo um artefato de construção, e poderíamos implantar o mesmo artefato na produção que foi aprovado na preparação. A transição tem um custo inicial não-insignificante, no entanto. Existe alguma maneira de usar o Beanstalk melhor que permita um IC / CD mais confiável e fácil de gerenciar?

Nota : Promover o mesmo artefato de construção é exatamente o que eu quero fazer, mas pelos documentos não vejo uma maneira clara de fazer isso; explica como implantar no EB a partir da fonte do aplicativo, mas não como promover uma versão existente para outro ambiente, a menos que eu tenha conseguido rolar a página. Se estiver disponível no próprio EB, pode haver uma limitação no plug-in de implantação do Jenkins EB que impede que seja feito especificamente no Jenkins, mas não vi uma maneira de fazê-lo.

Adrian
fonte
É o seu ambiente Jenkins que apresenta a construção única por restrição de ambiente? Eu uso o Elastic Beanstalk para implantar aplicativos e os artefatos de aplicativos carregados podem ser promovidos (implantados) para vários ambientes. Então, eu realmente não estou vendo as limitações que você está descrevendo. Parece que pode haver uma maneira de utilizar o Elastic Beanstalk para fazer o que você deseja. Mas essa questão é bastante ampla como está atualmente.
Andy Shinn
Por que você está reconstruindo seus ativos em vez de promover o mesmo ativo para outros ambientes após o teste?
precisa

Respostas:

4

Na opinião da IMO, seu problema não está no Elastic Beanstalk nesse cenário, é no Jenkins, ou pelo menos na maneira como você o está usando. Você realmente deve se concentrar em construir "uma coisa" apenas uma vez, independentemente do que seja.

Divulgação completa: Trabalho para a ThoughtWorks e sou incrivelmente inclinado ao GoCD. Vou tentar explicar o que quero dizer com o mais neutro possível. Usarei os documentos de nossa ferramenta como exemplos, mas espero que as pessoas possam extrapolar para seus sistemas.

Em algum lugar no início do seu pipeline, você está construindo "artefatos". Podem ser binários que representam a totalidade ou parte da sua aplicação ou podem ser produzidos a partir de qualquer número de ferramentas, como ferramentas de teste. Esses artefatos devem ser armazenados pelo sistema e nunca construídos novamente. O sistema deve buscar o artefato na revisão adequada, quando necessário.

Por exemplo...

  1. Eu construo um arquivo .jar e executo alguns testes de unidade nele, coisas básicas de C / I. Se for aprovado, esse arquivo .jar e a saída dos testes serão carregados no trabalho de pipeline específico .
  2. O próximo pipeline pode ser sua implantação em um ambiente de teste mais complexo. Deve buscar o exato frasco do exato trabalho que construiu. Em seguida, ele executa o Elastic Beanstalk para implantar esse jar no ambiente correto.
  3. O próximo pipeline é sua implantação de preparação. Ele vai todo o caminho de volta para o primeiro oleoduto e vai buscar a exata frasco do exato trabalho que construiu. Em seguida, execute o Elastic Beanstalk para implantar esse jar no ambiente correto.

Esses são pipelines separados, porque isso permite que você execute mais em paralelo ou sob demanda sem bloquear.

Você pode usar o Elastic Beanstalk, Chef, Puppet, Ansible, uDeploy ou qualquer número de outras ferramentas para fazer as implantações reais. Não é daí que vem o seu problema. Os servidores de integração contínua não foram criados originalmente para fazer isso. Claro que existem muitos plugins que você pode usar para chegar ao mesmo lugar, se essa for sua preferência.

Servidores de entrega contínua como GoCD , Chef Automate e ConcourseCI foram construídos especificamente para resolver coisas como essa.

Ken Mugrage
fonte
Sim, meu objetivo é construir uma vez e promover a produção. Minha pergunta é se o pé de feijão é adequado para esse tipo de uso. Pelo que posso dizer, realmente não parece ser; por exemplo, o método recomendado para implantar um aplicativo .NET é fazê-lo no visual studio, que é a pior prática que posso pensar.
Adrian
Eu não o usei pessoalmente, mas parece que seria se você mudasse a palavra "promover" para "implantar". Seu sistema de CD chama o beanstalk para implementar nos testes, executa alguns testes e, em seguida, relata sucesso / falha. Se for bem-sucedido, seu sistema de CD chama o beanstalk para implantar no preparo e assim por diante. Portanto, a promoção é feita pela sua ferramenta de orquestração, a implantação é feita pela sua ferramenta de implantação. (FYI, é por isso que empresas como Chef tem Hibernate (a coisa), Automatizar (promover a coisa) e Chef (implantar a coisa).
Ken Mugrage
Para sua informação, parece que você pode criar um script (infraestrutura como código é uma "coisa boa") docs.aws.amazon.com/elasticbeanstalk/latest/dg/… - mas, novamente, absolutamente 0 experiência pessoal.
Ken Mugrage
Não importa qual palavra você use, o pé de feijão não parece fazer isso, até onde eu sei. Parece estar voltado para a implantação a partir da origem, não dos artefatos. Na página que você vinculou: "Quando você executa o eb deploy, o EB CLI agrupa o conteúdo do diretório do seu projeto e o implementa no seu ambiente." Agradeço a resposta, mas a minha pergunta é específica para beanstalk por isso espero que alguém que tem experiência pé de feijão pode gritei.
Adrian
Ah, desculpe por isso. Eu estava interpretando ~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3para significar qualquer arquivo zip que você colou naquele diretório. Boa sorte!
Ken Mugrage