O documento discute o processo de entrega contínua de software para a ConectCar, incluindo a automação da infraestrutura na nuvem Azure, o processo de desenvolvimento, validação e liberação de novas funcionalidades, e os desafios de gerenciar diversos projetos em paralelo e manter a complexidade operacional.
ALM Practices - Construindo uma estratégia Corporativa de ALM
Levando um negócio inovador baseado em outsourcing ao Continuous Delivery, com automação e Cloud Services.
1. Levando um negócio
inovador, baseado em
outsourcing, ao continuous
delivery, com automação e
cloud services.
Welington Zanelato
System Manager
wzanelato@conectcar.com
9. Infraestrutura no Azure
As máquinas do TFS serão hospedas no
Windows Azure
As máquinas necessitam estar inseridas
no domínio da ConectCar
A máquina do TFS Application Tier
precisa estar exposta na internet para
permitir acesso externo, para isto será
necessário um subdomínio do tipo:
tfs.conectcar.com
Para acesso ao TFS os usuários
utilizarão contas do Active Directory,
terceiros necessitarão ter usuários
ativos no Active Directory para ter
acesso ao TFS
Build ServerData Tier
Team Foundation ClientApplication Tier
Active Directory
11. Processo de entrega e validação
Processo de entrega de software
Gestorde
configuração
ProjectOwnerAnalistaDesenvolvedor
Analistade
testes
Usuáriochave
Selecionar
Demanda
Abrir branchs
Analise da demanda
Artefatos
Desenvolver
demandas
Artefatos
Testes desistema
Passou nos
testes?
Testes funcionais
Evidência
s
Não
Implanta em
homologação
Passou nos
testes?
Merge dos fontes
para Main
Sim
Implanta em
integração
Roda testes
gravados
Passou nos
testes?
Corrige erros de
integração
Aplica Label
Implanta em
produção
Abrir GMUD
Não
Check-in
TFS-ConectCar
21. Processo de entrega e validação
Processo de entrega de demandas (Melhorias e Projetos)
Gestorde
configuração
FábricaAutomaçãoUsuáriochave
Desenvolver
demandas /
Resolver bugs
Executa testes de
sistema
Passou nos
testes?
Homologa
demandas
Não
Entrega demanda
desenvolvida
Sim
Homologada?
Sim
Inicia iteração/
projeto
Compila e executa
análise estática de
código
Inicia processo de
homologação
Aprova instalação
em homologação
Instala versão no
ambiente de
homologação
Aprova demandas
desenvolvidas
Não
Demandas
aprovadas?
Sim
Liberação de
versão
Não
22. Processo de entrega e validação
Liberação de versão
IntegradorComitêAutomação
Gestorde
configuração
Infra
Analistasde
negócio
Fábricas
Demandas
aprovadas
Seleciona demandas
para a próxima
versão
Realiza o merge das
demandas na
Main / Correção
Solicita fechamento
da versão
Compila e executa
análise estática de
código
Instala versão no
ambiente de
integração
Executa testes de
regressão na versão
Sim Aprova a versão
Planeja a liberação
da versão e uso da
janela de mudança
Passou nos
testes?
Não Diagnostica erros
[Erro em código]
[Conflito em Requisitos]
Resolve conflito em
requisitos
Solicita instalação
da aplicação
Instala aplicação em
produção
Instala alterações
em banco dedados
Executa testes
fumaça
Confirma liberação
da versão
Notifica
interessados
Versão instalada
corretamente?
Sim
Não
Rollback
Versão em
produção
Realiza merge para
cada branch ativo
Branchs atualizados
O desenvolvimento das aplicações é todo terceirizado e hoje está concentrado em uma fábrica de software.
A fábrica controla todos os ativos de software e detém todo o conhecimento técnico da aplicação. Isso representa um risco à ConectCar. Uma crise na fábrica ou na sua relação com a ConectCar representaria um grande custo de mudança.
O desenvolvimento das aplicações é todo terceirizado e hoje está concentrado em uma fábrica de software.
A fábrica controla todos os ativos de software e detém todo o conhecimento técnico da aplicação. Isso representa um risco à ConectCar. Uma crise na fábrica ou na sua relação com a ConectCar representaria um grande custo de mudança.
Trazer os ativos e o conhecimento da aplicação para dentro de casa.
Contratamos um gestor de configuração, um arquiteto e o especificacoes.com
Precisávamos disso rápido e acessível externamente, por isso optamos por manter a infraestrutura do TFS no Azure, o que simplificou muito todo o processo. Servidores que não estão em uso podem ser desligados. Ex: Servidores de build e release.
Definimos um processo de entrega e validação de software que contempla:
A entrega dos fontes deve ser feita no TFS da ConectCar
As versões do sistema serão geradas automaticamente no ambiente da ConectCar
O processo de build automatizado garante que todo o código fonte e dependências do sistema estão em posse da ConectCar
Nesse processo tivemos uma séria resistência da fábrica, e também notamos a dificuldade que ela própria tinha de gerir os ativos de software.
Frases como:
Precisamos de três dias para te entregar a última versão do software
Minha máquina contém todas as dependências para compilar a aplicação, preciso de tempo para separá-las. A dependências eram desconhecidas e o processo dependia da máquina do desenvolvedor.
Uma start-up, com um negócio em crescimento e evoluindo constantemente.
36 projetos no ano passado.
Solicitações de áreas diferentes, com tempos diferentes, que concorrem pelos mesmos recursos
Correções, melhorias, projetos
Um ambiente propício à problemas de concorrência e integração
A fábrica atual tem limite de capacidade de entrega, precisamos de mais parceiros
Hoje temos um esforço grande de gestão dos ambientes de homologação e com o planejamento das releases.
Com uma quantidade limitada de servidores e um processo de instalação trabalhoso, temos que planejar com cuidado a integração das demandas e sua validação.
Ainda temos que lidar com velocidades diferentes entre as áreas no processo de homologação.
Com um agravante no planejamento, que é:
* Disponibilizar mais ambientes em um momento de alta demanda significa ter que arcar com os custos desse ambiente quando não houver demanda.
Para endereçarmos esse desafio, começamos com a criação de uma estrutura de desenvolvimento paralelo que acomodasse todos tipos de demandas
Iremos trabalhar com banco de dados da mesma forma com que trabalhamos com o restante do código da aplicação. Com a habilidade de fazer check-in e check-out, comparar e compilar.Para uma versão da aplicação teremos tudo o que é necessário para coloca-la no ar disponível no Source Control.
Isso também simplifica a automação da instalação das mudanças de banco, que será feita no mesmo momento da instalação da aplicação.
Definimos o processo de forma que a homologação das funcionalidades solicitadas por cada área possa correr em paralelo, de forma gerenciada.
Cada demanda/projeto será homologado separadamente, respeitando o tempo do cliente, evitando dependência entre eles (comercial, operação e financeiro).
Após as demandas terem sido aprovadas, um processo de fechamento de versão, altamente baseado em automação, será responsável por integrar as demandas, validar a versão e promove-la até produção.
A automação será realizada utilizando o TFS Build para compilar e empacotar a versão, e o Release Management para instalar e gerir a promoção da mesma.
Já temos as customizações desenvolvidas e testadas.
Aqui temos um exemplo em que vários estágios de promoção estão definidos, cada um com seus aprovadores.
E em cada estágio o processo de instalação é automatizado na ferramenta e controlado.
Esse processo instala Windows Services, Web Services e Web Sites.
Em breve também o banco de dados.
Suportados pela posse dos ativos e pela automação do processo de build e deploy, exploraremos a nuvem para disponibilizar ambientes para homologação das demandas em paralelo. Diminuindo o time-to-Market para as áreas de negócio, sem implicar em custos, já que esses ambientes são desativados durante todo o período em que não estão em uso.
Se não há demandas a serem homologadas, podemos, simplesmente, desligar os ambientes e reduzir a quase zero os custos.
Outro aspecto importante do novo processo de trabalho objetiva uma mudança cultural, com a criação de uma cadência de entrega de melhorias. Queremos que os usuários comecem a se adaptar com o a entrega frequente, e isso irá gerar consequências como maior proximidade e entendimento mútuo, mais compromisso com prazos, maior visibilidade dos resultados. Tudo isso nos prepara para a etapa 3.
Queremos garantir a resposta mais rápida possível ao negócio, aumentando nossa frequência de entrega até que ela seja contínua.
Queremos garantir a resposta mais rápida possível ao negócio, aumentando nossa frequência de entrega até que ela seja contínua.
Queremos garantir a resposta mais rápida possível ao negócio, aumentando nossa frequência de entrega até que ela seja contínua.
Queremos garantir a resposta mais rápida possível ao negócio, aumentando nossa frequência de entrega até que ela seja contínua.