Artigos de Framework.



Deployment of a Spring Boot App with Jenkins in a Unix System using Gradle

One thing that I found very hard to do was to integrate a spring boot project into a CI environment using jenkins. As a default behavior, the Jenkins process tree killer always kills the process started by a job which stops the execution of a Spring Boot App after the jenkins job finishes. In addition of that, I wanted to see the server log on the jenkyns windows until it finishes loading. This article will try to help us solving this problems.

But first I would like to discuss what I consider a good practice to a Spring Boot App CI environment. I find very useful to first copy the artifacts to a specified area on the server to keep track of the artifacts deployed and deploy the artifact from that location. Also, I create a server log file there and start to listening on the jenkins window until the server started.

So the script below does that. With some minor improvements self explained on the comments, but in summary it does this:

  • stop whatever process running on the deployed port.
  • delete the files of the previous deploy
  • copy the files to deploy location
  • start application with nohup command, java – jar
  • start listening to the server log until it reaches an specific instruction.

Finally you have to do some adjustments to your job on Jenkins to avoid the default tree killing process. Just add this instruction before calling the sh: BUILD_ID=dontKillMe /path/to/my/script.sh (FIGURE 3)

You can see the jenkins job configuration window on FIGURES 1, 2, and 3 and the log result window on FIGURES 4 and 5.

Go to my github repo to check the project, but it recommend to extract the shell script to another repo to keep it lifecycle independent of your app.

https://github.com/rcoli/spring-boot-jenkins

O que é Spring Web Flow?

Neste tutorial apresento uma s√©rie de perguntas e respostas para quem estiver interessado em saber um pouco mais sobre o Spring Web Flow e suas aplica√ß√Ķes.

O que é Spring Web Flow?
Spring Web Flow é uma extensão do Spring MVC que permite a implementação do fluxo de navegação de uma aplicação web.

O que é fluxo de navegação?
Um fluxo encapsula uma seq√ľ√™ncia de etapas que guiam o usu√°rio atrav√©s da execu√ß√£o de algumas tarefas de neg√≥cios. Ele abrange v√°rias solicita√ß√Ķes HTTP, estados, dados transacionais, √© reutiliz√°vel e pode ser din√Ęmico e de longa dura√ß√£o.

Quando devo usar o Spring Web Flow?
Quando sua aplicação necessitar de uma navegação controlada. Por exemplo, o check-in para um voo, a solicitação de um empréstimo, carrinho de compras, ou mesmo adicionando um passo de confirmação para um formulário. O que esses cenários têm em comum é uma ou mais das seguintes características:

  1. Há um início claro e um ponto final.
  2. O usuário deve passar por um conjunto de telas em uma ordem específica.
  3. As altera√ß√Ķes n√£o s√£o finalizados at√© a √ļltima etapa.
  4. Uma vez completo, não deve ser possível repetir uma transação acidentalmente.

Em que mais o Spring Web Flow pode ajudar?
Pode ajudar em aplica√ß√Ķes onde:

  1. Visualizar o fluxo é muito difícil.
  2. A aplicação tem um monte de código de acesso a sessão HTTP.
  3. Forçar a navegação controlada é importante, mas não possível.
  4. O suporte adequado ao botão Voltar do navegador parece inatingível.
  5. O navegador e o servidor ficam fora de sincronia com o uso do bot√£o “Voltar”.
  6. Várias abas do navegador causam problemas de concorrência com os dados da sessão HTTP.

Posso Integrar o Spring Web Flow com outras Tecnologias?
Certamente, Spring Web Flow fornece uma linguagem declarativa de defini√ß√£o de fluxo para os fluxos de cria√ß√£o em um n√≠vel maior de abstra√ß√£o. Ele permite que ele seja integrado em uma grande variedade de aplica√ß√Ķes sem quaisquer altera√ß√Ķes (para o modelo de programa√ß√£o de fluxo), incluindo Spring MVC, JSF, e at√© mesmo aplica√ß√Ķes Portlet web.

fonte: http://www.springsource.org/spring-web-flow#documentation. Acessado em 14/11/2011.

Eliminando “index.php” do CodeIgniter no Xampp 2.5

O objetivo deste tutorial √© tentar ajudar o pessoal que est√° com dificuldades em configurar o CodeIgniter removendo a string “index.php” da URL.
No intuito de tornar as URLs dos meus projetos mais amigáveis li e reli vários tutoriais sem encontrar algum que realmente resolvesse o meu problema até que um amigo, André Neves, me emprestasse o livro do CodeIgniter do Ademir Cristiano Gabardo que foi bastante esclarecedor.

Estarei trabalhado com a vers√£o 2.0.2 do CodeIgniter (CI) e com a vers√£o 2.5 do Xampp.

Se voc√™ acabou de instalar o CI voc√™ deve remover o “default_controller” que √© a classe padr√£o de carregamento de seu site para que o framework n√£o carregue nenhuma classe padr√£o. Isto deve ser feito no arquivo: application\config\routes.php. Ache a linha do “default_controler” e apague a palavra “welcome”, como no exemplo abaixo.

// Antes
$route['default_controller'] = "welcome";
//Depois
$route['default_controller'] = "";

Agora ao recarregar a sua p√°gina pelo navegador, o CI encontrar√° um erro pois n√£o achou o controller padr√£o e apresentar√° a pagina de erro padr√£o. Para voltar a acessar a classe welcome, voc√™ devera digitar agora na url o sufixo: “/index.php/welcome” (no meu exemplo a URL completa seria: “http://localhost/CodeIgniter_2.0.2/index.php/welcome”).

O pr√≥ximo passo √© copiar o arquivo “.htaccess” (baixe o ZIP) para a pasta raiz de seu projeto (veja a imagem mais abaixo). Ou ainda, abra o Notepad, copie e cole as linhas abaixo e salve como “.htaccess” (sem aspas) na raiz de seu projeto. √Č importante que n√£o coloque espa√ßos extras e nem quebras de linhas. Al√©m disso, atente para salvar o arquivo com o nome “.htaccess” (sem aspas). N√£o esque√ßa do ponto antes do nome e cuidado para n√£o salvar com uma extens√£o qualquer.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

Clique para ampliar

Essas linhas s√£o instru√ß√Ķes que informam ao apache que caso o m√©todo de reescrita esteja desabilitado, que o habilite (linha 1). Informa tamb√©m, as regras de aplica√ß√£o de reescrita nas linhas 2 e 3 e finalmente na quarta linha, o que ele deve procurar para reescrever.

Volte ao navegador e recarregue a p√°gina agora retirando a string “index.php” (Ex: “http://localhost/CodeIgniter_2.0.2/welcome”)¬† , isso deve ser o suficiente para que ela n√£o apare√ßa mais. De qualquer forma √© de boa pr√°tica configurar o framework para que n√£o espere receber esta string na URL. V√° ent√£o em application/config/config.php e remova a configura√ß√£o padr√£o de “index_page” como abaixo.

// Antes
$config['index_page'] = 'index.php';
// Depois
$config['index_page'] = '';

Fonte: Gabardo, Ademir Cristiano. CodeIgniter Framework PHP, Novatec – SP – 2010.

Assine o RSS de meus Artigos e Comentários.