Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Problema no Build do Jenkins

Na aula 2, fiz o passo a passo no mínimo detalhe, repassei cada um dos passos pelo menos três vezes, mas o build do Jenkins na máquina de produção não termina com sucesso. Olhando o log do Tomcat da máquina de produção, me pareceu ser problema de conexão com o MySQL. Tentei instalar o client do MySQL na máquina de Prod (o curso não pediu), na AWS abri as portas 3306 tanto para fluxo de entrada como de saída para qualquer IP. Com isso consegui acessar o banco na RDS por linha de comando. Mas não resolveu o problema do Build do Jenkins. Alguém já superou esse problema?

10 respostas

Olá Luiz, tudo bem? Sim, consegue identificar o problema, e preparei um passo a passo:

O que acontece é que depois de colocar o seguinte conteúdo:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>

<user username="jenkins" password="jenkins" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

Dentro do arquivo /var/lib/tomcat8/conf/tomcat-users.xml e logo em seguida reiniciar o Tomcat com o comando sudo service tomcat8 restart como o instrutor apresentou, faltou fazer o seguinte processo:

  • Ir novamente em "Ações de pós-build" (Post-build Actions) , na parte de Credentials clique em Add e depois em Jenkins, como na imagem abaixo: Add Credentials

  • Coloque os campos da seguinte forma:

    • Username: jenkins
    • Password: jenkins
    • ID: jenkins
    • Description: jenkins
  • Por fim, clique no botão Add, como na imagem abaixo: Save Credential

  • E novamente no campo de Credentials selecione a nova credencial que acabamos de criar jenkins e salve o Job novamente, como na imagem: Select Credential
  • Agora tente executar o Job novamente.

Acho que talvez você tenha o seguinte ERROR:

ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to deploy [/var/lib/jenkins/workspace/catalogo/target/alura-aws.war]

<outra parte do log>
Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "FAIL - Deployed application at context path [/alura-aws] but context failed to start
" instead of the expected "OK" message

Já vou me antecipar e indicar os passos para você resolver esse outro problema:

1) Conecte-se a máquina EC2 via SSH, entre no banco de dados com o comando (instale o mysql-client antes e também o RDS e o EC2 precisam estar no mesmo VPC):

mysql -u root -h endpoint_do_banco_de_dados -p

E agora informe a senha.

2) E depois crie o banco de dados "alura_aws", para isso você precisa executar o comando para criar o banco de dados:

CREATE DATABASE alura_aws;

3) Agora crie saia do MySQL e entre no arquivo setenv.sh com o comando:

sudo nano /usr/share/tomcat8/bin/setenv.sh

4) Altere o arquivo colocando a porta do MySQL (3306) e também coloque a palavra reservada export antes de todas as variaveis, então o arquivo deve ficar da seguinte forma:

export url=endpoint_do_banco_de_dados:3306
export usuario=root
export senha=12345678

E deve funcionar corretamente seu build, caso ainda persista o erro, então entre na pasta /var/lib/tomcat8/webapps com o comando:

cd /var/lib/tomcat8/webapps

E exclua o arquivo "alura-aws.war" e a pasta "alura-aws/" com os comandos:

sudo rm  alura-aws.war

E depois:

sudo rm -r  alura-aws

E tente fazer o build novamente.

Espero ter ajudado!

Boa tarde Jonilson,

Eu já havia tentado essa solução , lendo a resposta na pergunta anterior do fórum.

Mas o erro persiste. Segue a saída do build no jenkins:

...

[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 01:52 min [INFO] Finished at: 2020-07-22T19:18:31Z [INFO] ------------------------------------------------------------------------ [Catalogo] $ /bin/sh -xe /tmp/jenkins2400943516876475416.sh

  • sudo cp target/alura-aws.war /var/lib/tomcat8/webapps/loja.war

  • sudo service tomcat8 restart [DeployPublisher][INFO] Attempting to deploy 1 war file(s) [DeployPublisher][INFO] Deploying /var/lib/jenkins/workspace/Catalogo/target/alura-aws.war to container Tomcat 8.x Remote with context alura-aws [/var/lib/jenkins/workspace/Catalogo/target/alura-aws.war] is not deployed. Doing a fresh deployment. Deploying [/var/lib/jenkins/workspace/Catalogo/target/alura-aws.war] ERROR: Build step failed with exception org.codehaus.cargo.container.ContainerException: Failed to deploy [/var/lib/jenkins/workspace/Catalogo/target/alura-aws.war]

    ...

Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The Tomcat Manager responded "FAIL - Deployed application at context path /alura-aws but context failed to start " instead of the expected "OK" message

...

Build step 'Deploy war/ear to a container' marked build as failure Finished: FAILURE

Segue o log do tomcat:

22-Jul-2020 19:20:09.727 INFO [http-nio-8080-exec-9] org.apache.catalina.core.ApplicationContext.log Manager: init: Associated with Deployer 'Catalina:type=Deployer,host=localhost' 22-Jul-2020 19:20:09.728 INFO [http-nio-8080-exec-9] org.apache.catalina.core.ApplicationContext.log Manager: init: Global resources are available 22-Jul-2020 19:20:09.732 INFO [http-nio-8080-exec-9] org.apache.catalina.core.ApplicationContext.log Manager: list: Listing contexts for virtual host 'localhost' 22-Jul-2020 19:20:09.737 INFO [http-nio-8080-exec-10] org.apache.catalina.core.ApplicationContext.log Manager: deploy: Deploying web application '/alura-aws' 22-Jul-2020 19:20:09.737 INFO [http-nio-8080-exec-10] org.apache.catalina.core.ApplicationContext.log Manager: Uploading WAR file to /var/lib/tomcat8/webapps/alura-aws.war 22-Jul-2020 19:20:12.328 INFO [http-nio-8080-exec-10] org.apache.catalina.core.ApplicationContext.log Spring WebApplicationInitializers detected on classpath: [br.com.caelum.Inicializador@5eb528ad] 22-Jul-2020 19:20:12.393 INFO [http-nio-8080-exec-10] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext 22-Jul-2020 19:20:16.113 SEVERE [http-nio-8080-exec-10] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'criadorDeProdutos': Invocation of init method failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ... Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection ... Caused by: javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection ... Caused by: org.hibernate.exception.JDBCConnectionException: Could not open connection ... Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. ... Caused by: java.lang.NullPointerException at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2989) at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1873) at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1802) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1206) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2239) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2270) ... 95 more 22-Jul-2020 19:20:16.124 INFO [http-nio-8080-exec-10] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext

Luiz, o log do Tomcat ficou um pouco disso, então você poderia colocar todo o conteúdo do log do Jenkins e também do Tomcat em dois arquivos separados no Github Gist (e colocar os links aqui) para eu poder verificar certinho! Outra coisa, o seu banco de dados no RDS está exatamente com o nome alura_aws? Você poderia enviar fotos das configurações para eu verificar, para isso pode colocar as imagens no imgur e colocar os links aqui também.

Fico aguardando retorno!

Olá Jonilson!

Os logs estão no Gist: https://gist.github.com/lacsfue/51c1f26a87039ab0a320ab6847559c32

As imagens com as configurações estão no Imgur https://imgur.com/a/HaLLvNU

Grato!

Você pode tentar mais algumas coisas:

1) No servidor de produção: Adicione a propriedade antiResourceLocking do Tomcat, para isso você deve ir no arquivo context.xml que fica dentro da pasta conf que está dentro da pasta do Tomcat, e nesse arquivo context.xml, você deve alterar a seguinte linha:

<Context>

Para:

<Context antiResourceLocking = "true">

Assim o arquivo completo deve ficar semelhante a isso:

<?xml version='1.0' encoding='utf-8'?>
<Context antiResourceLocking = "true">

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>

Observação: Este código acima está sem os comentários que o arquivo tem!

2) Outra coisa, você poderia ir nesse servidor de produção e exclua o arquivo "alura-aws.war" e a pasta "alura-aws/" com os comandos (isso dentro da pasta cd /var/lib/tomcat8/webapps):

sudo rm  alura-aws.war

E depois:

sudo rm -r  alura-aws

3) Luiz, esses logs são do servidor de produção é isso? Todas as máquinas (homologação e produção) e o banco de dados estão na mesma VPC? Você poderia modificar a visibilidade do banco de dados no RDS para público (Public Acessibility) e depois entrar no MySQL (do RDS) apagar o banco:

DROP DATABASE alura_aws;

E depois recriar o banco de dados novamente:

CREATE DATABASE alura_aws;

E tentar fazer o build novamente! E mais uma dúvida, todas as máquinas estão na mesma zona? É que só vi a zona em que o banco de dados (RDS) está e talvez possa ser isso.

Olá Jonilson!

Alterei o arquivo context.xml Exclui o arquivo .war e a pasta. Confirmei que as máquinas estão na mesma VPC e na mesma Availability Zone. Mudei a visibilidade do Banco no RDS para "Todos" Recriei o Banco de dados a partir da máquina de produção. Refiz o Build.

O problema persiste.

Os logs foram atualizados no Gist: https://gist.github.com/lacsfue/51c1f26a87039ab0a320ab6847559c32

Incluí novas evidencias no Imgur https://imgur.com/a/HaLLvNU

Grato!

Certo Luiz, porém não pude perceber claramente se o RDS e as máquinas estão na mesma VPC, porque o RDS por baixo dos panos usa o EC2, então você poderia verificar isso e falar pra mim como está essa configuração?

Outra coisa, pude perceber que você está usando diretamente o repositório do instrutor:

https://github.com/leonardocordeiro/catalogo-alura-inicio

Você poderia fazer um fork desse repositório para a sua conta do GitHub e logo em seguida fazer clone para a sua máquina local e então acessar o arquivo JpaConfigurator.java que vai está na localização:

/catalogo-alura-inicio/src/main/java/br/com/caelum

E colocar uma imagem do método getDataSource. E tentar usando esse repositório que vai está agora na sua conta do GitHub, assim vamos podemos manipular e tentar outras formas.

Olá Jonilson!

Coloquei mais evidências da VPC e atualizei algumas imagens no Imgur. Fiz o Fork. Coloquei o Arquivo JpaConfigurator.java no Gist. Também atualizei os logs.

O erro persiste.

Gist: https://gist.github.com/lacsfue/51c1f26a87039ab0a320ab6847559c32

Imgur: https://imgur.com/a/HaLLvNU

Grato!

solução!

Luiz, nesse localhost.log tem dois erros que me chamaram bastante atenção:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

<outros logs>

Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable)

Principalmente esse último, e pela imagem em que você listas os bancos de dados pude perceber que você está usando a versão 8.0.17 do MySQL, e acho que esse pode ser o problema, se não estou enganada a aplicação está configurada para usar apenas o MySQL 5.7, então teria como você criar outro banco de dados usando a versão 5.7 do MySQL e tentar novamente realizar o processo?

Fala pra gente o resultado!

Olá Jonilson!

Criei uma nova instância no RDS com a versão MySQL 5.7.30. Funcionou de primeira.

Então, recriei uma instância no EC2 conforme a aula 2. Depois apliquei a sujestão do seu primeiro post:

  • Credencial jenkins;
  • Criar o banco de dados alura_aws;
  • Alterar no arquivo setenv.sh a porta :3306, e export antes das variáveis;
  • restart no tomcat8;

Isso foi suficiente para o build do Jenkins terminar com sucesso.

Grato!