Primeiros passos com ALM: Implantando um ambiente ALM em uma semana!
Agenda Introdução Redmine Maven Source Code Management Hudson Nexus
[email_address] @vsenger Programador Fundador da Globalcode Autor de cursos e consultor Open-source hardware developer Entusiasta da vida: beatles, pizza, vinhos, surf, travessias oceânicas, filhos, código, yoga, home-office, violão, robôs  (e $ pra sustentar tudo isso). Vinicius Senger
Application Lifecycle Management: gerenciamento contínuo do software; Casamento da gestão de negócio com engenharia de software; Requer ferramentas  integradas  para  gerenciar : Requisitos; Repositório de código; Construção integrada; Arquitetura e codificação; Testes e qualidade; Gerenciamento de versões e componentes; A.L.M.
A.L.M. Independente de metodologia, arquitetura e tecnologia TODA EMPRESA PRECISA DE A.L.M. Não documentar o futuro (Agile / Scrum) é uma coisa, poder rastrear o passado é outra; ALM = é como álbum de fotografia do seu software, com retratos tirados automaticamente a cada mudança, falha, novo requisito, novo release, etc. Todo mundo sai ganhando: bom para o developer, gerente, arquiteto, Scrum Master, P.O., V.P., CIO, CTO, Asponi, etc.
Vantagens na adoção: Rastreabilidade e dados post-hoc; Cultura de planejamento de releases / backlog; Gerenciamento integrado; Simplificação nos processos; Agilidade na construção do software; Conseqüente aumento na cultura de testes; Aumento da reusabilidade; A.L.M. - vantagens
“ Gerenciar sem backlog é como ser um mecânico que recebe carros para conserto sem que expliquem o problema do carro.” A.L.M. - vantagens
Expõe os ciclos de vida do software, facilitando e motivando sua a gestão: Requisitos /  Backlog / Atividade / User Story Documentação (wiki / files) e suporte (fórum) Versionamento, tags, brunches, .. Gestão de Componentes e repositórios Arquétipos Maven Construção Testes – Homologação - Produção Deployment Gestão de Arquitetura
Pilha A.L.M. open-source que usamos: A.L.M. open-source Disciplina Software Gerenciamento de Requisitos Redmine Gestão de código / versionamento SVN e GIT Construção e dependências Maven Gerenciamento de arquétipos Maven Integração Contínua Hudson Repositório de componentes Nexus Ferramenta para desenvolvimento Eclipse IDE com plugins
oferece esta pilha como SaaS rodando na Amazon Mais vantagens ainda: Você tem o ambiente montado em 24hs Você não vai ganhar novos servidores na sua empresa! Softwares atualizados pela ToolsCloud e suporte Redmine, SVN, GIT, Hudson, Nexus integrados com LDAP é um enorme diferencial
A.L.M. Novo projeto RedMine SVN Hudson Requisitos Codificação Build & Testes Release Nexus Homologação Produção Bugs  e Melhorias 1 2 2 2 5 3 4 6 10 9 8 7 Deployment Contínuo
Testes Integração contínua Gestão de componentes 3os com Nexus A.L.M. em uma semana
Testes regressivos Deployment contínuo básico Gestão dos seus próprios componentes com Nexus A.L.M. em um mês
Testes avançados Deployment contínuo avançado Code review contínuo Depois
Gerenciamento de Requisitos com: Gestão de pendências; Gerenciamento de horas gastas / time tracking; Integração com SCM; Conceito de projetos e sub-projetos; Fórum, wiki, arquivos, news, calendário, gantt chart e sistema de segurança;  Software open-source construído em Ruby on Rails; Centenas de plug-ins e módulos adicionais; Muitas possibilidades de customização; Redmine
Download e Instalação www.redmine.org Precisa de Ruby 1.8, Rails 2.3.5, Rack 1.0.1, RubyGems 1.8, Rake, i18n, libmysql-ruby, libopenssl-ruby1.8; Redmine
Tela de login do Redmine: Redmine
Após login, temos dois principais itens: Projects, para entrar em um projeto e Administration para config. geral: Redmine Home
DEMONSTRAÇÃO
Temos dezenas de opções de controladores de versões de arquivos no mercado: Subversion / SVN CVS GIT Microsft Sourcesafe e TFS Borland Starteam Clearcase Versionamento
No mundo open-source os destaques são: CVS : sistema mais antigo e precário, porém, ainda muito utilizado. Trabalha com protocolo proprietário; Subversion : evolução do CVS com disponibilização via HTTP (além de protocolo proprietário) e alta performance para versionamento; GIT : mais moderno ainda, por se tratar de um repositório distribuído. Tem muitas vantagens, mas demanda mais conhecimento do usuário; Versionamento
“ Qualidade” dos commits Cuidar bem das mensagens Independente de decisão, escolha entre SVN e GIT! GIT File System? Hooks & ALM Versionamento
Subversion é um repositório client / server, não distribuído; É mantido pelo grupo Apache:  subversion.apache.org Instalação e administração simples; Não requer conhecimentos avançados do usuário; Excelente performance para gerar versões / cópias; Pode disponibilizar dados por protocolo proprietário ou por HTTP / HTTPS; Introdução ao Subversion
Comandos básicos Adicionar um arquivo ou diretório*: svn add <arquivo ou diretorio> Remover arquivo ou diretório*: svn rm <arquivo ou diretorio> Mover arquivo ou diretório*: svn mv <arquivo ou diretorio> Listar conteúdo do repositório: svn ls <URL> Reverter alterações locais: svn revert <arquivo> *Arquivos serão adicionados ou removidos no próximo commit
Convencionalmente trabalhamos com: trunk (troco) : uma pasta que contém os arquivos de desenvolvimento do  projeto. branch (galho) : são linhas concorrentes de desenvolvimento do projeto independentes; tag (etiqueta) : são versões releases efetivos de um projeto.  Estrutura de trabalho Trunk 1 Branch 2 Tag 3
Distribuído: no lugar de checkout você clona o repositório Seus commits são locais, portanto você pode trabalhar offline Verbos:  add  commit log diff status branch merge  push Entre offline e online vários commits! GIT ou Subversion? GIT
O Redmine pode ser integrar com seu sistema de ; Para isso, clique nos  Settings  do Projeto e, em seguida, escolha  Repository : Integração com Redmine
Ao vincular o projeto a um repositório você terá algumas integrações; Últimas mudanças e commits no item Activities Integração com Redmine
Navegar nos arquivos do SVN via Web clicando no item  Repository : Integração com Redmine
E o recurso mais útil é a possibilidade de você referenciar as Issues nas mensagens de commit; cd /home/almadmin/projetos-svn/projeto1/trunk touch novo-arquivo.txt svn commit –m “Correçao de problema de encoding da  IssueID  #2” Integração com Redmine
Você pode configurar as palavras que serão detectadas nas mensagens de commit em: Redmine –> Administration –> Settings -> Repositories Integração com Redmine Configuramos as palavras de referência aqui Fixing keywords podem mudar o status da Issue!
cd /home/almadmin/projetos-svn/projeto1/trunk touch novo-arquivo.txt svn commit –m “Correçao de problema closes #2” Integração com Redmine
Apresentamos o Redmine com SCM integrado.  Desta forma podemos ter um time de desenvolvimento compartilhando o mesmo servidor SCM para desenvolver as Issues do projeto; Será que isso é o suficiente para nossa necessidade? NÃO! Imagine que vários desenvolvedores podem fazer commit de código no fim do dia resultando em um código não-compilável; Integração Continua
Hudson é um servidor open-source de integração continua; Um “Continous integration server / CI server” pode desempenhar várias tarefas como: Checkout de código-fonte; Build e teste; Publicação de resultados; Comunicação com membros do time; Na prática o Hudson é um agendador de tarefas de construção de softwares altamente customizável; Introdução ao Hudson
Fácil instalação e configuração; Interface é web based; Pode fazer builds distribuídos; Relatório de teste unitário; Notificação do estado dos builds; Notificação em caso de quebra; Introdução ao Hudson
Arquitetura extensível baseada em plugins com mais de 150 de plugins disponíveis; Por padrão vem com 4 plugins instalados: CVS SVN Maven SSH Introdução ao Hudson
O Hudson pode funcionar de três formas: Stand-alone : java –jar hudson.war JNLP : https://hudson.dev.java.net/hudson.jnlp JavaEE container : fazendo deploy do hudson.war Glassfish, Jboss, Tomcat, Jetty, Winstone, Websphere; Instalação e inicialização
Para acessar o Hudson abra um browser e digite a seguinte URL:  http://localhost:8080/hudson-2.0.0 Instalação e inicialização Executores de builds. O Hudson vem com 2 executores de builds por padrão.  Configurações do Hudson Membros do Hudson e projetos Relacionamento entre projetos Views customizadas
Para fazer as configurações iniciais devemos clicar em  Manage Hudson Configuração
Em seguida  Configure System  teremos acesso as principais configurações do Hudson: Configuração Representa o no. de executores de builds.
Após a instalação é importante configurar o local onde estão instalados JDK, Maven e Ant (se usar); Configuração
A outra configuração importante é uma conta de e-mail funcionando para o Hudson poder se comunicar com equipes: Configuração
Criando Jobs Basicamente o Hudson pode trabalhar com projetos livres ou Maven; Maior parte dos casos utilizamos Maven ou Ant; Maven é o mais simples de se usar!
Criando Jobs Em seguida configuramos o job indicando principalmente o repositório para checkout do projeto!
Criando Jobs Podemos clicar em  Build Now  e Hudson vai iniciar o checkout do código e depois vai disparar o build Maven!
O dashboard traz as informações sobre os diversos jobs / projetos configurados; Este ícone indica a estabilidade dos builds: Dashboard
O Maven pode baixar automaticamente bibliotecas da Internet (se open-source); Isso é excelente para o desenvolvimento de pequenos times, agora se tivermos um time de 100 desenvolvedores criando projetos Maven que fazem downloads da Internet? Fatalmente teremos um problema de rede até que todos os Mavens terminem seus downloads! Introdução Nexus
Para ajudar a solucionar este tipo de problema contamos com  Gerenciadores de Repositórios , que desempenham um papel de proxy para os demais: Introdução Nexus Developer Hudson Build com Maven jar : log4j, hibernate, spring etc. Nexus Internet
O Nexus faz o download centralizado dos componentes fazendo um cache que ele utilizará para servir aos demais desenvolvedores; Além do papel de cache, o Nexus também pode catalogar o componentes e artefatos da sua empresa, do seu negócio; Isso facilita bastante o reuso entre equipes; Maven + Nexus + Hudson: parceria perfeita! Introdução ao Nexus
Devemos adicionar esta configuração em um arquivo settings.xml que ficará no diretório .m2 do usuário: Configurando Maven
Para que o Maven possa fazer deployment de artefatos no Nexus: Configurando Maven
Conclusões As ferramentas Maven, Nexus, Hudson, Redmine e Subversion formam uma poderosa solução de ALM; Todas as ferramentas são open-source; Este ambiente pode funcionar para Delphi, C, C++, Ruby, entre outras plataformas; Muitas possibilidades de customização; A ToolsCloud oferece este ambiente como serviço da nuvem
Obrigado! [email_address] @vsenger

Academia do Arquiteto - Implantando A.L.M. em uma semana!

  • 1.
    Primeiros passos comALM: Implantando um ambiente ALM em uma semana!
  • 2.
    Agenda Introdução RedmineMaven Source Code Management Hudson Nexus
  • 3.
    [email_address] @vsenger ProgramadorFundador da Globalcode Autor de cursos e consultor Open-source hardware developer Entusiasta da vida: beatles, pizza, vinhos, surf, travessias oceânicas, filhos, código, yoga, home-office, violão, robôs (e $ pra sustentar tudo isso). Vinicius Senger
  • 4.
    Application Lifecycle Management:gerenciamento contínuo do software; Casamento da gestão de negócio com engenharia de software; Requer ferramentas integradas para gerenciar : Requisitos; Repositório de código; Construção integrada; Arquitetura e codificação; Testes e qualidade; Gerenciamento de versões e componentes; A.L.M.
  • 5.
    A.L.M. Independente demetodologia, arquitetura e tecnologia TODA EMPRESA PRECISA DE A.L.M. Não documentar o futuro (Agile / Scrum) é uma coisa, poder rastrear o passado é outra; ALM = é como álbum de fotografia do seu software, com retratos tirados automaticamente a cada mudança, falha, novo requisito, novo release, etc. Todo mundo sai ganhando: bom para o developer, gerente, arquiteto, Scrum Master, P.O., V.P., CIO, CTO, Asponi, etc.
  • 6.
    Vantagens na adoção:Rastreabilidade e dados post-hoc; Cultura de planejamento de releases / backlog; Gerenciamento integrado; Simplificação nos processos; Agilidade na construção do software; Conseqüente aumento na cultura de testes; Aumento da reusabilidade; A.L.M. - vantagens
  • 7.
    “ Gerenciar sembacklog é como ser um mecânico que recebe carros para conserto sem que expliquem o problema do carro.” A.L.M. - vantagens
  • 8.
    Expõe os ciclosde vida do software, facilitando e motivando sua a gestão: Requisitos / Backlog / Atividade / User Story Documentação (wiki / files) e suporte (fórum) Versionamento, tags, brunches, .. Gestão de Componentes e repositórios Arquétipos Maven Construção Testes – Homologação - Produção Deployment Gestão de Arquitetura
  • 9.
    Pilha A.L.M. open-sourceque usamos: A.L.M. open-source Disciplina Software Gerenciamento de Requisitos Redmine Gestão de código / versionamento SVN e GIT Construção e dependências Maven Gerenciamento de arquétipos Maven Integração Contínua Hudson Repositório de componentes Nexus Ferramenta para desenvolvimento Eclipse IDE com plugins
  • 10.
    oferece esta pilhacomo SaaS rodando na Amazon Mais vantagens ainda: Você tem o ambiente montado em 24hs Você não vai ganhar novos servidores na sua empresa! Softwares atualizados pela ToolsCloud e suporte Redmine, SVN, GIT, Hudson, Nexus integrados com LDAP é um enorme diferencial
  • 11.
    A.L.M. Novo projetoRedMine SVN Hudson Requisitos Codificação Build & Testes Release Nexus Homologação Produção Bugs e Melhorias 1 2 2 2 5 3 4 6 10 9 8 7 Deployment Contínuo
  • 12.
    Testes Integração contínuaGestão de componentes 3os com Nexus A.L.M. em uma semana
  • 13.
    Testes regressivos Deploymentcontínuo básico Gestão dos seus próprios componentes com Nexus A.L.M. em um mês
  • 14.
    Testes avançados Deploymentcontínuo avançado Code review contínuo Depois
  • 15.
    Gerenciamento de Requisitoscom: Gestão de pendências; Gerenciamento de horas gastas / time tracking; Integração com SCM; Conceito de projetos e sub-projetos; Fórum, wiki, arquivos, news, calendário, gantt chart e sistema de segurança; Software open-source construído em Ruby on Rails; Centenas de plug-ins e módulos adicionais; Muitas possibilidades de customização; Redmine
  • 16.
    Download e Instalaçãowww.redmine.org Precisa de Ruby 1.8, Rails 2.3.5, Rack 1.0.1, RubyGems 1.8, Rake, i18n, libmysql-ruby, libopenssl-ruby1.8; Redmine
  • 17.
    Tela de logindo Redmine: Redmine
  • 18.
    Após login, temosdois principais itens: Projects, para entrar em um projeto e Administration para config. geral: Redmine Home
  • 19.
  • 20.
    Temos dezenas deopções de controladores de versões de arquivos no mercado: Subversion / SVN CVS GIT Microsft Sourcesafe e TFS Borland Starteam Clearcase Versionamento
  • 21.
    No mundo open-sourceos destaques são: CVS : sistema mais antigo e precário, porém, ainda muito utilizado. Trabalha com protocolo proprietário; Subversion : evolução do CVS com disponibilização via HTTP (além de protocolo proprietário) e alta performance para versionamento; GIT : mais moderno ainda, por se tratar de um repositório distribuído. Tem muitas vantagens, mas demanda mais conhecimento do usuário; Versionamento
  • 22.
    “ Qualidade” doscommits Cuidar bem das mensagens Independente de decisão, escolha entre SVN e GIT! GIT File System? Hooks & ALM Versionamento
  • 23.
    Subversion é umrepositório client / server, não distribuído; É mantido pelo grupo Apache: subversion.apache.org Instalação e administração simples; Não requer conhecimentos avançados do usuário; Excelente performance para gerar versões / cópias; Pode disponibilizar dados por protocolo proprietário ou por HTTP / HTTPS; Introdução ao Subversion
  • 24.
    Comandos básicos Adicionarum arquivo ou diretório*: svn add <arquivo ou diretorio> Remover arquivo ou diretório*: svn rm <arquivo ou diretorio> Mover arquivo ou diretório*: svn mv <arquivo ou diretorio> Listar conteúdo do repositório: svn ls <URL> Reverter alterações locais: svn revert <arquivo> *Arquivos serão adicionados ou removidos no próximo commit
  • 25.
    Convencionalmente trabalhamos com:trunk (troco) : uma pasta que contém os arquivos de desenvolvimento do projeto. branch (galho) : são linhas concorrentes de desenvolvimento do projeto independentes; tag (etiqueta) : são versões releases efetivos de um projeto. Estrutura de trabalho Trunk 1 Branch 2 Tag 3
  • 26.
    Distribuído: no lugarde checkout você clona o repositório Seus commits são locais, portanto você pode trabalhar offline Verbos: add commit log diff status branch merge push Entre offline e online vários commits! GIT ou Subversion? GIT
  • 27.
    O Redmine podeser integrar com seu sistema de ; Para isso, clique nos Settings do Projeto e, em seguida, escolha Repository : Integração com Redmine
  • 28.
    Ao vincular oprojeto a um repositório você terá algumas integrações; Últimas mudanças e commits no item Activities Integração com Redmine
  • 29.
    Navegar nos arquivosdo SVN via Web clicando no item Repository : Integração com Redmine
  • 30.
    E o recursomais útil é a possibilidade de você referenciar as Issues nas mensagens de commit; cd /home/almadmin/projetos-svn/projeto1/trunk touch novo-arquivo.txt svn commit –m “Correçao de problema de encoding da IssueID #2” Integração com Redmine
  • 31.
    Você pode configuraras palavras que serão detectadas nas mensagens de commit em: Redmine –> Administration –> Settings -> Repositories Integração com Redmine Configuramos as palavras de referência aqui Fixing keywords podem mudar o status da Issue!
  • 32.
    cd /home/almadmin/projetos-svn/projeto1/trunk touchnovo-arquivo.txt svn commit –m “Correçao de problema closes #2” Integração com Redmine
  • 33.
    Apresentamos o Redminecom SCM integrado. Desta forma podemos ter um time de desenvolvimento compartilhando o mesmo servidor SCM para desenvolver as Issues do projeto; Será que isso é o suficiente para nossa necessidade? NÃO! Imagine que vários desenvolvedores podem fazer commit de código no fim do dia resultando em um código não-compilável; Integração Continua
  • 34.
    Hudson é umservidor open-source de integração continua; Um “Continous integration server / CI server” pode desempenhar várias tarefas como: Checkout de código-fonte; Build e teste; Publicação de resultados; Comunicação com membros do time; Na prática o Hudson é um agendador de tarefas de construção de softwares altamente customizável; Introdução ao Hudson
  • 35.
    Fácil instalação econfiguração; Interface é web based; Pode fazer builds distribuídos; Relatório de teste unitário; Notificação do estado dos builds; Notificação em caso de quebra; Introdução ao Hudson
  • 36.
    Arquitetura extensível baseadaem plugins com mais de 150 de plugins disponíveis; Por padrão vem com 4 plugins instalados: CVS SVN Maven SSH Introdução ao Hudson
  • 37.
    O Hudson podefuncionar de três formas: Stand-alone : java –jar hudson.war JNLP : https://hudson.dev.java.net/hudson.jnlp JavaEE container : fazendo deploy do hudson.war Glassfish, Jboss, Tomcat, Jetty, Winstone, Websphere; Instalação e inicialização
  • 38.
    Para acessar oHudson abra um browser e digite a seguinte URL: http://localhost:8080/hudson-2.0.0 Instalação e inicialização Executores de builds. O Hudson vem com 2 executores de builds por padrão. Configurações do Hudson Membros do Hudson e projetos Relacionamento entre projetos Views customizadas
  • 39.
    Para fazer asconfigurações iniciais devemos clicar em Manage Hudson Configuração
  • 40.
    Em seguida Configure System teremos acesso as principais configurações do Hudson: Configuração Representa o no. de executores de builds.
  • 41.
    Após a instalaçãoé importante configurar o local onde estão instalados JDK, Maven e Ant (se usar); Configuração
  • 42.
    A outra configuraçãoimportante é uma conta de e-mail funcionando para o Hudson poder se comunicar com equipes: Configuração
  • 43.
    Criando Jobs Basicamenteo Hudson pode trabalhar com projetos livres ou Maven; Maior parte dos casos utilizamos Maven ou Ant; Maven é o mais simples de se usar!
  • 44.
    Criando Jobs Emseguida configuramos o job indicando principalmente o repositório para checkout do projeto!
  • 45.
    Criando Jobs Podemosclicar em Build Now e Hudson vai iniciar o checkout do código e depois vai disparar o build Maven!
  • 46.
    O dashboard trazas informações sobre os diversos jobs / projetos configurados; Este ícone indica a estabilidade dos builds: Dashboard
  • 47.
    O Maven podebaixar automaticamente bibliotecas da Internet (se open-source); Isso é excelente para o desenvolvimento de pequenos times, agora se tivermos um time de 100 desenvolvedores criando projetos Maven que fazem downloads da Internet? Fatalmente teremos um problema de rede até que todos os Mavens terminem seus downloads! Introdução Nexus
  • 48.
    Para ajudar asolucionar este tipo de problema contamos com Gerenciadores de Repositórios , que desempenham um papel de proxy para os demais: Introdução Nexus Developer Hudson Build com Maven jar : log4j, hibernate, spring etc. Nexus Internet
  • 49.
    O Nexus fazo download centralizado dos componentes fazendo um cache que ele utilizará para servir aos demais desenvolvedores; Além do papel de cache, o Nexus também pode catalogar o componentes e artefatos da sua empresa, do seu negócio; Isso facilita bastante o reuso entre equipes; Maven + Nexus + Hudson: parceria perfeita! Introdução ao Nexus
  • 50.
    Devemos adicionar estaconfiguração em um arquivo settings.xml que ficará no diretório .m2 do usuário: Configurando Maven
  • 51.
    Para que oMaven possa fazer deployment de artefatos no Nexus: Configurando Maven
  • 52.
    Conclusões As ferramentasMaven, Nexus, Hudson, Redmine e Subversion formam uma poderosa solução de ALM; Todas as ferramentas são open-source; Este ambiente pode funcionar para Delphi, C, C++, Ruby, entre outras plataformas; Muitas possibilidades de customização; A ToolsCloud oferece este ambiente como serviço da nuvem
  • 53.

Notas do Editor

  • #4 abrir falando: eu estou mais motivado que o normal hoje em dia, pois o progresso da tecnologia tem trazido muitas facilidades para desenvolver softwares e eventualmente criar um business ao redor dele.