Category: Software Engineering

Integração contínua com .NET

Integração Continua com .NET

Este artigo tem o objetivo de descrever como utilizar a prática de Integração Contínua (do inglês Continuous Integration)  em projetos .NET. Este artigo é sobre a utilização de práticas de engenharia de software em .NET. Existe uma cópia deste post no technet da microsoft.

Retratação: Adianto que algumas decisões podem ser estranhas para quem é nativo Microsoft, neste caso eu não sou, caso você tenha alguma outra forma mais fácil eu ficarei grato em aprender com você.

 

O que é Integração Contínua?  <brevemente>

“Integração Contínua é uma pratica de desenvolvimento de software onde os membros de um time integram seu trabalho frequentemente, geralmente cada pessoa integra pelo menos diariamente – podendo haver múltiplas integrações por dia. Cada integração é verificada por um build automatizado (incluindo testes) para detectar erros de integração o mais rápido possível. Muitos times acham que essa abordagem leva a uma significante redução nos problemas de integração e permite que um time desenvolva software coeso mais rapidamente.” Martin Fowler

 

 

Porque preciso do servidor de CI?

  • Build de projetos
  • Execução de Testes Unitários
  • Analise de Código
  • Estatísticas sobre o Código
  • Cobertura de testes unitários.

Porque preciso da prática de CI?

  • Aprender Rápido e Falhar Rápido
  • Reduzir Riscos
  • Aumento de Qualidade
  • Aumentar a Visibilidade do Projeto
  • Redução de processos manuais ou repetitivos

 

Como colocar um CI em .NET?

Pré-requisitos

É necessário que você tenha um projeto dentro de um controle de versão como Git ou SVN. É necessário também você ter um jenkins instalado (em um servidor idealmente), porem pode ser na sua maquina mesmo.

Aplicativos/Ferramentas

Para este exemplo estou utilizando as seguintes ferramentas:

  • Jenkins [7]
  • Jenkins Plugin – MSBuild Plugin [4]
  • Jenkins Plugin – Version Number
  • Jekins Plugin – Git Plugin
  • Jekins Plugin – Copy Artifact Plugin [5]

 

Passo a Passo

  1. Instale o Jenkins em uma maquina Windows Server (e.g. Windows 2012 R2).
  2. Inicie os serviços do Jenkins.
  3. Instale os plugins mencionados.
  4. Crie um job para o seu projeto.
  5. Na opção “Gerenciamento de código fonte” configure o servidor de controle de versão para obter o código fonte do seu projeto.
  6. Na opção “Build a Visual Studio project or solution using MSBuild” Configure:
  7. A versão do MSBuild que quer compilar o projeto(e.g. VS 2012)
  8. Selecione o arquivo de solução .SLN
  9. Aperte em “Construir agora”.

 

Conclusão

A implementação inicial de um CI não é complicado, mas é necessário aprender um conjunto novo de ferramentas. Cada projeto irá requerer fases diferentes dentro da construção, como por exemplo, publicar a versão construída em uma plataforma Azure. Nesta primeira revisão deste artigo foi apresentado o básico de um CI em .NET, as próximas alterações serão em tópicos específicos. Caso tenha um cenário interessante, por favor, comente e vamos implementa-lo.

 

Testes Futuros

  • Utilização do Jenkins 2.0 [8]
  • Utilizar gradle [9]
  • Utilizar NAnt [10]

 

Referencias

[1] Continous Integration with .NET from Craigberntson.com

[2] http://blog.caelum.com.br/integracao-continua

[3] http://www.martinfowler.com/articles/continuousIntegration.html

[4] https://wiki.jenkins-ci.org/display/JENKINS/MSBuild+Plugin

[5] https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin

[6] https://wiki.jenkins-ci.org/display/JENKINS/Version+Number+Plugin

[7] https://jenkins.io/

[8] https://jenkins.io/2.0/

[9] http://gradle.org/

[10] https://github.com/nant/nant

[11] http://social.technet.microsoft.com/wiki/pt-br/contents/articles/33965.integracao-continua-com-net.aspx

 

Composite Design Pattern using Java and Database

Compositecomposite Design Pattern helps the developer to abstract a information tree structure in code. The following example shows how to use in a Hierarchical Filter need. This page is in a continuous writing mode, check later for new updates or ask me on my twitter.

The main idea here is to present how to use it, if you want a background on composite patter I recommend Gamma et al. book[1]. The diagram to present the composite is the follow, for this diagram I use OPM (Object Process Methodology)[2] which shows a Hierarchical Flow process containing multiple Filters subprocesses which is invoked by it.

composite-design-pattern-for-hierarchical-flow

Figure 1 – Composite design pattern

The implementation requires two steps the pattern coding, the controller coding for filter and flow loading.

<Next writing topic>

Jumping to controller implementation. The controller will load the composite classes according to database configurations. As first step the configuration of the composite hierarchy is needed, the suggestion here is to keep the configuration inside the database as a entity relationship model. Database tables will provide the model for further view(e.g. JSON) implementation. The following diagram show how use a composite within conjunction with traditional database implementation.

Configuring-and-using-a-composite-class

Figure 2 – Business Controller in conjunction with Composite Pattern

The configuring process can be implemented using database as datasource which will store  all composite information.

References:

[1]Design Patterns: Elements of Reusable Object-Oriented Software

[2]Object-Process Methodology: A Holistic Systems Paradigm

Ultima atualização: 20/Set/2015