Desenvolvimento

4 mai, 2017

Fazer deploy de código para contêineres a partir do Git automaticamente

Publicidade

Há uma série de opções para fazer deploy do seu código fonte de um repositório Git para contêineres, incluindo reimplementação de todo o contêiner, reimplementação instantânea via volumes ou abordagem “git clone”. No entanto, quando se trata de automação desse processo e de se mover para a implementação contínua, muitos desenvolvedores podem enfrentar a complexidade, já que precisam saber como combinar corretamente todos os componentes do aplicativo com os pontos de interconexão necessários.

Especificamente, no mundo de contêineres você tem que gerenciar compilações de suas imagens de pilha lidando com a complexidade extra de pipeline CI/CD. E toda a reimplementação de contêineres pode não ser a melhor abordagem se você costuma se comprometer sem alterações de configuração no sistema operacional, na pilha do servidor de aplicativos ou em suas dependências.

Para facilitar a automação do deploy, o Jelastic preparou um pacote Git-Push-Deploy dedicado para entrega de código nas imagens de contêineres. Este pacote implementa várias configurações para fazer o setup do deploy automático de alterações comitadas no seu repositório de origem do aplicativo Git para a nuvem, tornando-as disponíveis para testes adicionais com atrasos mínimos.

Especificações do Git-Push-Deploy

O pacote Git-Push-Deploy pode ser integrado aos repositórios GitHub e GitLab. Ele é desenvolvido para entrega automática de atualizações em suas fontes de aplicativos Java, PHP, Ruby, Node.js e Python e pode ser aplicado aos seguintes modelos de pilha certificados:

  • Java – Tomcat 6/7/8/9, TomEE, GlassFish 3/4, Jetty 6/8/9, WildFly 8/9/10, JBoss AS 7, Spring Boot 1.x
  • PHP – Apache 2.4, NGINX 1.10
  • Ruby – Apache 2.4, NGINX 1.10
  • js – NodeJS 0.x-6.x
  • Python – Apache 2.4

O fluxo de trabalho depende da linguagem de programação usada em seu projeto:

  • Para projetos baseados em Java, o pacote inicia a criação de um ambiente separado com um node de compilação Maven, que será responsável pela interação com o repositório Git remoto, disparando suas compilações de aplicativos e sua implementação no servidor de aplicativos
  • Para aplicativos PHP/Ruby/Node.js/Python, o pacote configura um pipeline para implementação de projeto diretamente no contexto ROOT em um servidor web (aqui, considere que os servidores de aplicativos Ruby são fornecidos com um modo de implementação em vez de um contexto dentro do dashboard, embora o local real do projeto seja o mesmo)

Este pacote de automação de implementação é compatível com Jelastic PaaS da versão 4.9.5 e superiores. Para analisar e comparar as plataformas de hospedagem disponíveis com uma versão Jelastic específica, consulte o Jelastic Cloud Union Catalog.

Pré-Configurações do Repositório

Para uma instalação de add-on adequada, você precisará fornecer um Token de API Pessoal para sua conta do Git. Isso permite que o pacote configure um webhook para o repositório correspondente, que iniciará a reimplementação de aplicativos sempre que qualquer alteração for contribuída para seu código.

Então, vamos gerar um. Siga as instruções abaixo de acordo com o Git VCS usado, ou seja, GitHub ou GitLab.

Gerando Token de Acesso no GitHub

Para obter seu token de acesso pessoal para a conta do GitHub, navegue até a opção Configurações > tokens de acesso pessoal e clique no botão Gerar novo token.

Na página aberta, especifique a descrição do Token e selecione os escopos repositório e admin: repo_hook. Clique em Gerar token na parte inferior da página.

Uma vez redirecionado, copie e salve o token de acesso mostrado em qualquer outro lugar (pois ele não pode ser visto novamente depois que você sair desta página).

Depois que isso for realizado, vá para a seção Instalar o Pacote Git-Push-Deploy abaixo neste artigo.

Gerando token de acesso no GitLab

Para gerar um token de acesso pessoal no GitLab, digite as Configurações de sua conta e mude para a guia Tokens de acesso.

Aqui, especifique o Nome do token opcional, sua data de Expiração (pode ser deixada em branco) e marque o escopo de permissão do api.

Clique no botão Criar Token de Acesso Pessoal.

Na página aberta, copie e armazene temporariamente seu valor de token de acesso em qualquer outro lugar (pois você não poderá vê-lo novamente depois de sair desta página).

Agora, você está pronto para a instalação do pacote.

Pré-configurações extras para Projetos Java

Se estiver executando um projeto baseado em Java, é necessário assegurar preliminarmente sua interação adequada com o node de compilação Maven adicionando um arquivo Project Object Model (POM) especial à sua estrutura.

Então, crie um arquivo pom.xml na raiz do repositório do projeto, com o seguinte conteúdo como uma base obrigatória:

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.mycompany.app</groupId>
   <artifactId>my-app</artifactId>
   <version>1.0</version>
   <packaging>war</packaging>
   <build>
       <finalName>${project.artifactId}</finalName>
   </build>
</project>

Onde os valores opcionais são:

  • groupId – grupo de um projeto (por exemplo, nome da empresa)
  • artifactId – nome de um projeto
  • version – sua versão do aplicativo

Todos os demais parâmetros devem ser mantidos inalterados. Você pode verificar como isto  deve ser feito em nossa amostra.

Instalar o Pacote Git-Push-Deploy

O pacote Git-Push-Deploy é um complemento, portanto pode ser instalado apenas em um ambiente. Preparamos dois ambientes separados com servidores de aplicativos Tomcat e Apache-PHP para mostrar o fluxo de trabalho para diferentes linguagens de programação.

Se você for usar um ambiente criado anteriormente, observe que o pacote substituirá o aplicativo implementado no contexto ROOT. Portanto, para manter seu aplicativo já implementado, mova-o para o contexto personalizado. Recomendamos a criação de um novo ambiente e, em seguida, prosseguir para a instalação:

  1. Clique no botão Importar no painel superior do dashboard e insira o link manifest.jps para o projeto Git-Push-Deploy na guia URL aberta: https://github.com/jelastic-jps/git-push-deploy/blob/master/manifest.jps

Clique em Importar para continuar.

  1. No quadro aberto, especifique os seguintes detalhes sobre seu repositório e ambiente de destino:
  • Git Repo Url – link HTTPS para seu repositório de aplicativo (.git ou de uma visualização comum). Você pode forçar nossa amostra do aplicativo Hello World para testar o fluxo
  • Branch – um branch a ser usado no projeto
  • Usuário – digite seu login da conta do Git
  • Token – especifique o token de acesso que você criou anteriormente para a geração do webhook
  • Nome do ambiente – escolha um ambiente no qual seu aplicativo será implementado
  • Nodes – nome do servidor de aplicativos (é obtido automaticamente ao selecionar o ambiente)

Clique em Instalar para continuar.

  1. Aguarde um minuto para o Jelastic buscar as fontes de aplicativos do GitHub e configurar o webhook para implementação contínua.

Feche o quadro de notificação quando a instalação estiver concluída.

  1. Dependendo do tipo de projeto, o resultado será o seguinte:
  • Para infraestrutura baseada em Java, você verá que um novo ambiente apareceu em seu dashboard com um node Maven dentro; ele fará o build e deploy do seu aplicativo para o contexto ROOT em um servidor web cada vez que o código fonte for atualizado.

Preste atenção pois pode ser que leve algum tempo para o Maven compilar um projeto (embora a instalação do pacote já tenha terminado), então você precisa esperar alguns minutos antes de iniciá-lo. O progresso atual desta operação pode ser rastreado em tempo real via arquivo de log vcs_update no Maven:

  • Para infraestrutura baseada em PHP (e o restante das linguagens suportadas), seu aplicativo será implementado diretamente no servidor ROOT escolhido.

Com isso, considere que a seção Projetos similar para os servidores de aplicativos Ruby fornece informações sobre o modo de implementação usado (desenvolvimento por padrão) em vez de um contexto, enquanto a localização real do aplicativo também se refere ao root do servidor.

Para iniciar o seu aplicativo, clique em Abrir no navegador próximo do seu servidor web.

É isso aí! Agora, uma nova versão do seu aplicativo é automaticamente entregue ao servidor de aplicativos após cada confirmação para um repositório.

Políticas de reimplementação para pilhas diferentes

A tabela abaixo lista o comportamento de diferentes servidores de aplicativos após receber o código atualizado.

Nome da Pilha Política
Tomcat 6 Restart
Tomcat 7 Restart
Tomcat 8 Restart
Tomcat 9 Restart
TomEE Restart
GlassFish 3 Hot Redeploy via Server API
GlassFish 4 Hot Redeploy via Server API
GlassFish 5 Hot Redeploy via Server API
Jetty 6 Restart
Jetty 8 Restart
Jetty 9 Restart
JBoss 7 Restart
Wildfly 8 Restart
Wildfly 9 Restart
Wildfly 10 Restart
Railo Restart
SpringBoot Restart
Apache-PHP Advanced ZDT
Nginx-PHP Advanced ZDT
Apache-Ruby Graceful Reload
Nginx-Ruby Graceful Reload
NodeJS Restart
Python Restart

Para eliminar o possível tempo de inatividade do aplicativo para um servidor com a política de atualização de Reinicialização, dimensione-o para ser executado em vários contêineres. Nesse caso, as atualizações necessárias serão aplicadas às instâncias de forma sequencial, com um atraso de 30 segundos por padrão.

Teste o deploy automatizado do Git

E agora vamos verificar como esse processo realmente funciona. Faça alguns pequenos ajustes no código em um repositório e certifique-se de que tudo está automatizado:

  1. Clique em Editar este arquivo para algum item dentro do seu repositório e Comite alterações nele – por exemplo, vamos modificar o texto em nossa página inicial do HelloWorld.

  1. Como resultado, o webhook apropriado será acionado para implementar as alterações feitas em seu ambiente de hospedagem – consulte a seção Configurações > Webhooks do repositório para obter detalhes.

Ao clicar nessa sequência, você verá a lista de Entregas Recentes, iniciada pelo webhook e o resultado de sua execução.

  1. Como último ponto de verificação, volte para a página do aplicativo e atualize-a (lembrando que pode levar um minuto extra para o Maven criar e implementar seu projeto baseado em Java).

É isso aí! Como você pode ver, as modificações foram aplicadas com êxito, então a solução funciona como pretendido.

Basta atualizar seu código, faça commits como você costuma fazer e todas as alterações serão enviadas para o seu ambiente Jelastic automaticamente. A não necessidade de alternar entre processos ou fazer atualizações manuais elimina erros humanos e acelera o tempo de mercado para o seu aplicativo.

Precisa de alguns detalhes ou assistência? Sinta-se à vontade para pedir ajuda nos comentários!

***

Tetiana Markova faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://blog.jelastic.com/2017/04/20/git-push-deploy-to-containers/