SlideShare uma empresa Scribd logo
Deploys
Automatizados com
Gitlab
Olá!
Eu sou o Jackson Mafra
Desenvolvedor há mais de 20 anos
com background em projetos de
e-commerce e mercado imobiliário,
desde 2009 com interesses focados
para o desenvolvimento de interfaces
móveis e aplicações corporativas.
@jacksonfdam
E essa é a tubaron , onde trabalho!
3
A Tubaron é uma empresa de telecomunicação, que foi pioneira em Triple
Play (Voz, Dados e TV) via Fibra Óptica no RS.
Link Dedicado - Soluções de internet para provedores, integradores e
empresas.
IPTV Multicast - Sistema de IPTV para franqueados Tubaron e clientes.
Telefonia - Planos de telefonia adequados a demanda de sua empresa.
Rastreamento - GPS Tracking próprio de baixo custo.
Cloud e Colocation - Infraestrutura de Cloud e Colocation para provedores e
empresas.
Um dos meus desafíos: organizar a infra.
4
Automação de processos, versionamento do código, não existia real
separação de ambientes; homologação, desenvolvimento, e até produção
coexistiam.
Se ninguém (ou melhor, poucos) tem acesso SSH aos servidores de
desenvolvimento e homologação, como será feito o deploy?
Em pouco tempo se torna óbvio que é inviável manter essa tarefa manual.
Não é raro acontecerem dezenas de deploys em homologação no mesmo
dia, se incumbir uma pessoa com essa responsabilidade eu anulo um
desenvolvedor pleno/sênior.
Deploys e Pipelines
Agenda
Introdução Conclusões
DevOps, Integração,
Entrega e Implantação
Contínua
Roll Back, Backup,
Monitoramento, Secrets
Introdução
Visão rápida da porra
toda.
O nome é uma junção das palavras development e operations.
DevOps é uma mudança cultural de TI, que propõe a integração
entre os times de desenvolvimento de software e operações de TI,
em busca de maior eficiência na criação e gerenciamento de uma
aplicação.
O que é DevOps?
7
Diferente do que muitos pensam, não é apenas um cargo, um
grupo de ferramentas ou uma tecnologia.
É um conjunto de práticas, ferramentas e políticas para entregar
tecnologia de forma integrada e rápida, garantindo a qualidade
em todos os estágios de criação.
O que é DevOps?
8
Em alguns modelos, até mesmo as equipes de qualidade e
segurança se integram às de desenvolvimento e operações — esse
modelo também é conhecido como DevSecOps.
O que é DevOps?
9
“Falar em DevOps é também falar
de automatização. ”
É uma forma importante de ganhar eficiência e garantir qualidade
em testes e, assim, poder trabalhar com entrega contínua e
microsserviços.
O que é DevOps?
11
Continuous
Integration,
Continuous
Delivery &
Deployment
(CI/CD)
O CI / CD (integração contínua /
entrega contínua) é uma metodologia
que otimiza o desenvolvimento de
software por meio de colaboração e
automação e é um componente
crítico da implementação do DevOps.
A picture is worth a
thousand words
Integração contínua (continuous integration) é uma prática de
desenvolvimento de software que visa tornar a integração de
código mais eficiente, através de builds e testes automatizados.
Integração contínua
(Continuous Integration)
14
Entrega contínua é uma extensão desse processo.
É a automação do processo de liberação, para que o novo código
seja implantado nos ambientes de destino - normalmente para
ambientes de teste ou preparação - de maneira repetitiva e
automatizada.
Entrega Contínua
(Continuous Delivery)
15
O CD também é usado para descrever a Implantação Contínua, que
se concentra no processo de automação para liberar o que agora é
uma compilação totalmente funcional na produção.
Implantação Contínua
(Continuous Deployment)
16
Infraestrutura ágil
VENUS
Para garantia de que os ambientes sejam
idênticos e contenham apenas mudanças
homologadas, é preciso implementar um
gerenciamento de configuração para que
qualquer mudança inserida
manualmente nos servidores e não
através de uma gerência de
configurações seja automaticamente
desfeita.
Infraestrutura
para negócio
Garantir continuamente a
infraestrutura com foco no negócio.
Implantar mecanismos que permitam
a área de operações atenderem as
expectativas do negócio e ainda sim
manter sua confiabilidade.
Padronização nas
configurações
Tenha um ambiente de homologação que reflita de forma quase que idêntica ao ambiente
do cliente. Isso não necessariamente quer dizer que devo ter a mesma quantidade de dados
no BD de desenvolvimento, mas as mesmas diretivas de ambiente, aplicação, usuários do
sistema e estrutura de diretórios, o que ajuda o desenvolvedor a trabalhar com um cenário
mais próximo possível da realidade.
O ambiente de homologação deve
ser igual ao de produção
Infraestrutura ágil
VENUS
Provisionamento
dinâmico dos
ambientes
As configurações e scripts de execução
para instalação de serviços devem ser
versionados no mesmo repositório e da
mesma forma que o código da aplicação
para que possam ser disponibilizados,
auditados e evoluídos juntos.
Infraestrutura
como um código
Os ambientes devem ser criados
sempre que necessários em processos
automatizados para garantia de que
estejam sempre disponíveis. A equipe
de desenvolvimento deve receber a
infraestrutura necessária para seu
trabalho sem necessidade de
intervenção da equipe de operações.
Provisionamento é o processo que envolve
todas as atividades necessárias para que um
servidor possa ser usado e independente da
razão pela qual ele foi requisitado.
Infraestrutura ágil
VENUS
Liberdade para
Deploy
Automação de infraestrutura é o
processo de criar scripts, desde a
instalação de um sistema operacional
até a instalação e configuração de
serviços. Este processo também atende
por outros nomes como gerenciamento
de configuração ou gerenciamento de TI.
Ambientes
Automatizados
A equipe de desenvolvimento deve ser
autônoma para realização de deploy
nos ambientes, até produção sem
necessidade de processos burocráticos
e interferência da área de operações.
Deploy ou implantação, é a instalação e
configuração da aplicação e seus
componentes.
Infraestrutura ágil
VENUS
Integração
contínua
Para que a infraestrutura seja ágil é
determinante que haja estratégias para
gestão de incidentes bem definidas,
políticas de roll back, backups e
ferramentas de monitoração pró-ativas.
Gestão de
incidentes
Ferramentas devem orquestrar todo o
processo envolvido na entrega de
nova versão da aplicação que inclui a
criação dos ambientes caso
necessário, deploys dos códigos
juntamente as configurações da infra,
testes automatizados, possibilidade de
reversão e auditoria.
O Ciclo de vida de um servidor é diferente
da aplicação.
O mesmo servidor pode ser usado por várias
aplicações e cada aplicação pode efetuar deploys
muitas vezes, enquanto o provisionamento de novos
servidores ocorre menos frequentemente.
Infraestrutura ágil
VENUS
Infraestrutura
com Testes
Com sistemas de controle de versão
como o GIT, é possível definir a
infraestrutura como código da mesma
forma que você faz com seus arquivos de
software.
Controle de
Versão
Uma das consequências positivas de
se automatizar a infraestrutura de TI é
a possibilidade de configurá-la
baseando-se em testes funcionais, são
executados testes para garantir que
aquela alteração não impactará o
serviço ou a continuidade do negócio.
O mais interessante é que em inglês, um dos significados da
palavra deploy, diz o seguinte:
(Mover tropas ou equipamento)
em posição para uma ação
militar.
Infraestrutura ágil
VENUSPipelines
São um conjunto de instruções que
executarão uma determinada ação.
Exemplo: job para criar um pacote para
uma determinada distribuição Linux.
Job
Uma pipeline é um grupo de jobs que
são executados em estágios. Todos os
jobs em um estágio são executados
em paralelo (se houver Runners
suficientes), e se todos eles tiverem
sucesso, a pipeline move para o
próximo estágio.
Single Pipeline
Single Pipeline - Grouped jobs
O Que São Git
Hooks?
Git Hooks são shell scripts
executados automaticamente antes
ou depois que o Git execute um
comando importante, como
“Commit” ou “Push”.
Hooks são armazenados na pasta .git/hooks/ para cada projeto copiado, ou em um
repositório local recém criado. Lá, nós podemos encontrar uma série de exemplos de
Hooks, os quais são ótimos pontos de partida.
Para ativar um Hook, é necessário apenas criar um arquivo e salvá-lo na pasta .git/hooks/.
Entretanto, o nome do arquivo é pré-definido pelo Git.
Muitos dos Hooks que podemos usar são:
Como Usar Git Hooks
Como Usar Git Hooks
Como Usar Git Hooks
Git Hook Comando Git Descrição
commit-msg.sample git commit Para definir uma mensagem de commit.
post-update.sample git push Atualizar todos os dados após push.
pre-commit.sample git commit Antes de executar um committing.
prepare-commit-msg.sample git commit Quando uma mensagem commit for definida.
pre-push.sample git push Antes de realizar um envio.
pre-rebase.sample git rebase Antes de realizar um pass ou merge.
pre-receive.sample git push Quando executamos push e obtemos data do repositório remoto.
update.sample git push Ao atualizar os dados remotos com push.
Codeception
Full-stack testing PHP framework
http://codeception.com
https://github.com/Codeception/Co
deception
PHPUnit
The PHP Unit Testing framework
https://phpunit.de/
https://github.com/sebastianbergm
ann/phpunit
Documentation
Generator for PHP
Documentation Generator for PHP
http://www.phpdoc.org
https://github.com/phpDocumentor/ph
pDocumentor2
Code Climate
An automated code review.
https://codeclimate.com/quality/
Detects violations of a defined set
of coding standards.
https://github.com/squizlabs/PHP_Code
Sniffer
PHP CodeSniffer
PHP Static Analysis Tool - discover
bugs in your code without running
it!
https://github.com/phpstan/phpstan
PHP Stan
PHP Database Migrations for
Everyone
https://phinx.org
https://github.com/cakephp/phinx
Phinx
PHP project build system or build
tool
https://github.com/phingofficial/phing
https://www.phing.info/
PHing
Algumas ferramentas
para ajudar nas tarefas.
Deploys e
Pipelines
Roll Back, Backup,
Monitoramento, Secrets
GitHub
O GitHub é uma plataforma de
hospedagem de repositórios
baseada no Git, lançada
originalmente em 2008 por Tom
Preston-Werner, Chris Wanstrath e
PJ Hyatt. Este é o maior host de
repositório, com mais de 38
milhões de projetos.
https://github.com/
Bitbucket
O Bitbucket também foi lançado em
2008 por uma startup australiana,
originalmente suportando apenas
projetos Mercurial. Em 2010, o
Bitbucket foi adquirido pela Atlassian e
a partir de 2011 também passou a
oferecer suporte à hospedagem Git, que
agora é seu foco principal. Ele se
integra perfeitamente a outros serviços
da Atlassian e seu principal mercado
são as grandes empresas.
https://bitbucket.org
GitLab
O GitLab começou como um
projeto de Dmitriy Zaporozhets e
Valery Sizov, fornecendo uma
alternativa às soluções de
gerenciamento de repositórios
disponíveis em 2011.
Em 2012, o site GitLab.com foi
lançado, mas a empresa só foi
incorporada em 2014.
https://about.gitlab.com/
Cada uma das plataformas é um grande universo por si só quando
se trata de recursos e capacidades.
Fazer uma comparação detalhada dos recursos está além do
escopo desta publicação.
Mas se estivermos olhando apenas para os recursos básicos, eles
mostram muitas semelhanças:
Funcionalidades básicas
47
● Pull request
● Code review
● Edição embutida
● Issue tracking
● Suporte a Markdown
● Autenticações de dois fatores
● Gerenciamento de permissão avançado
● Páginas da Web estáticas hospedadas
● API rica em recursos
● Ações de repositórios: Fork / Clone
● Snippets
● Integrações de terceiros
Funcionalidades básicas
48
O CI/CD do GitLab faz parte do GitLab, um aplicativo da Web com uma API
que armazena seu estado em um banco de dados.
Ele gerencia projetos / constrói e fornece uma ótima interface de usuário,
além de todos os recursos do GitLab.
GitLab Runner é uma aplicação que processa compilações. Ele pode ser
implantado separadamente e funciona com o GitLab CI/CD por meio de
uma API.
Para executar testes, você precisa de pelo menos uma instância do GitLab e
um GitLab Runner.
Arquitetura GitLab
49
Instalando o Gitlab CE
Instalando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Servidor API PHP RS
Servidor API PHP RS
Servidor API PHP RS
Servidor API PHP RS
Usando o Gitlab CE
Criando o projeto com Laravel
Criando o projeto com Laravel
Criando o projeto com Laravel
Criando o projeto com Laravel
Criando o projeto com Laravel
Usando o Gitlab CE
Configurando o Gitlab Runner
Configurando o Gitlab Runner
Configurando o Gitlab Runner
Configurando o Gitlab Runner
Usando o Gitlab CE
Usando o Gitlab CE
Configurando o Gitlab Runner
Configurando o Gitlab Runner
Configurando o Gitlab Runner
Configurando o Gitlab Runner
Usando o Gitlab CE
Configurando o Gitlab Runner
Configurando o Gitlab Runner
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Usando o Gitlab CE
Conclusões
O que aprendemos?
Automatizar os processos errados
A pergunta "Será que isso precisa ser automatizado agora" deve vir
acompanhada de outras perguntas relevantes. Entre elas:
- Com que frequência o processo ou cenário é repetido?
- Quanto tempo dura o processo?
- Quais pessoas e dependências de recursos estão envolvidos no processo?
Eles estão causando atrasos na CICD?
- É o processo sujeito a erros, se não for automatizado?
- Qual é a urgência em adotar o processo automatizado?
Nem tudo são Flores
96
Confundir implantação contínua com entrega contínua
Implantação contínua é o conceito de que todas as alterações feitas no
código são implantadas quase imediatamente para a produção.
Entrega contínua é o conceito de que todas as alterações no código base
passam antes por ambientes de não-produção. A equipe encontra e aborda
questões imediatamente, e não mais tarde, quando já liberaram o código
para uso.
Quando liberar o código-base para a produção é uma decisão de negócios.
Nem tudo são Flores
97
Faltar coordenação entre a CI e CD
Esta armadilha nos leva de volta à nossa definição de consenso de DevOps,
que sustenta que CI e CD são dois itens diferentes.
CI alimenta CD.
A implementação de um pipeline CI decente e um sistema CD completo
leva meses e requer colaboração e garantia de qualidade da equipe de
DevOps, engenheiros de operação, Scrum masters...
Todos devem contribuir. Talvez o aspecto mais difícil da CICD é este fator
humano, em vez de qualquer dos desafios técnicos que discutimos. Assim
como você não pode programar um relacionamento saudável entre duas
pessoas, você não pode automatizar colaboração e comunicação.
Nem tudo são Flores
98
Manter a meta à vista
CICD é essencial porque ele atende os objetivos de negócio.
Executivos de tecnologia sabem que a evolução contínua, consertos rápidos
e a garantia de qualidade ajudam a reter clientes. DevOps pode criar uma
experiência de trabalho melhor para a sua equipe, mas não é por isso que
as empresas implementam DevOps.
Simplificando,vale a pena rever as armadilhas de CICD porque dinheiro está em
jogo.
Nem tudo são Flores
99
O que é DevOps e como usar na sua empresa
https://www.opus-software.com.br/como-usar-devops/
O que é Integração, Entrega e Implantação Contínua?
https://www.opus-software.com.br/o-que-e-integracao-continua/
Continuous Integration, Continuous Delivery & Deployment (CI/CD)
https://www.docker.com/solutions/cicd
Continuous integration vs. continuous delivery vs. continuous deployment
https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-del
ivery-vs-deployment
Existe vida além do FTP: por que sua aplicação merece um deploy automatizado?
https://blog.umbler.com/br/por-que-sua-aplicacao-merece-um-deploy-automatizado/
Referências
100
GitLab CI/CD Pipeline Configuration Reference
https://docs.gitlab.com/ee/ci/yaml/#manual-actions
Reverting changes
https://docs.gitlab.com/ee/user/project/merge_requests/revert_changes.html
Environments and deployments
https://docs.gitlab.com/ee/ci/environments.html
GitLab Infrastructure
https://gitlab.com/gitlab-com/gl-infra/infrastructure
Deploying with Git
https://devcenter.heroku.com/articles/git
Referências
101
Six Strategies for Deploying to Heroku
https://blog.heroku.com/six-strategies-deploy-to-heroku
Managing Multiple Environments for an App
https://devcenter.heroku.com/articles/multiple-environments
Pipelines
https://devcenter.heroku.com/articles/pipelines
Ambientes por branch com openshift next gen usando gitlab
https://blog.coderockr.com/posts/2017/ambientes-por-branch-com-openshift-next-gen-
usando-gitlab/
Referências
102
Referências
Devops
https://www.4linux.com.br/o-que-e-devops
Saiba o que é a automatização de deploy
https://blog-br.softwareone.com/saiba-o-que-e-a-automatizacao-de-deploy
Deploys automatizados com git
https://gist.github.com/gabrielgilini/2993244
Integração contínua usando o drone
https://blog.coderockr.com/posts/2017/integracao-continua-usando-o-drone/
Docs Drone.io
https://docs.drone.io/
103
Referências
Category Vision - Secrets Management
https://about.gitlab.com/direction/release/secrets_management/
https://gitlab.com/gitlab-org/gitlab-foss/issues/40720
Hashicorp Vault
https://www.vaultproject.io/
GitLab CI/CD environment variables
https://docs.gitlab.com/ce/ci/variables/#secret-variables
Como Utilizar Git Hooks?
https://www.hostinger.com.br/tutoriais/como-usar-git-hooks/
A curated list of amazingly awesome PHP libraries, resources and shiny things.
https://github.com/ziadoz/awesome-php
104
Referências
Projeto - phprs-cicd
https://gitlab.com/jacksonfdam/phprs-cicd
Projeto - phprs-api
https://gitlab.com/jacksonfdam/phprs-api
105
Obrigado!
Qualquer dúvida, crítica ou sugestão só me procurar:
@jacksonfdam
jacksonfdam@gmail.com

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

O que é DevOps? Introdução à abordagem pela IBM
O que é DevOps? Introdução à abordagem pela IBMO que é DevOps? Introdução à abordagem pela IBM
O que é DevOps? Introdução à abordagem pela IBM
 
DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014
 
GCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de VersõesGCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de Versões
 
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOps
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOpsE se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOps
E se ao invés de Dev e Ops for DevOps? Uma introdução a cultura DevOps
 
Arquitetura de Software para a Entrega Continua
Arquitetura de Software para a Entrega ContinuaArquitetura de Software para a Entrega Continua
Arquitetura de Software para a Entrega Continua
 
Boas práticas de desenvolvimento ágil com Continuous Integration + Delivery e...
Boas práticas de desenvolvimento ágil com Continuous Integration + Delivery e...Boas práticas de desenvolvimento ágil com Continuous Integration + Delivery e...
Boas práticas de desenvolvimento ágil com Continuous Integration + Delivery e...
 
Migração SVN para GIT
Migração SVN para GITMigração SVN para GIT
Migração SVN para GIT
 
Explicando DevOps
Explicando DevOpsExplicando DevOps
Explicando DevOps
 
DevOps: princípios e práticas para a Entrega Contínua
DevOps: princípios e práticas para a Entrega ContínuaDevOps: princípios e práticas para a Entrega Contínua
DevOps: princípios e práticas para a Entrega Contínua
 
IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
 
DevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de SoftwareDevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de Software
 
TDC2016SP - Infra ágil: conceito e prática
TDC2016SP - Infra ágil: conceito e práticaTDC2016SP - Infra ágil: conceito e prática
TDC2016SP - Infra ágil: conceito e prática
 
Discutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo SatoDiscutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo Sato
 
DevOps - A Origem
DevOps - A OrigemDevOps - A Origem
DevOps - A Origem
 
Integração contínua - Rumo à automação e ao DEVOPS
Integração contínua - Rumo à automação e ao DEVOPSIntegração contínua - Rumo à automação e ao DEVOPS
Integração contínua - Rumo à automação e ao DEVOPS
 
DevOps I - Ambientes padronizados e Monitoramento da Aplicação | Monografia I
DevOps I - Ambientes padronizados e Monitoramento da Aplicação | Monografia IDevOps I - Ambientes padronizados e Monitoramento da Aplicação | Monografia I
DevOps I - Ambientes padronizados e Monitoramento da Aplicação | Monografia I
 
TDC2016SP - Equipes ágeis de infraestrutura
TDC2016SP - Equipes ágeis de infraestruturaTDC2016SP - Equipes ágeis de infraestrutura
TDC2016SP - Equipes ágeis de infraestrutura
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Aplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache KafkaAplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache Kafka
 
Comparativo Geral Seguraça Kaspersky x Concorrência
Comparativo Geral Seguraça Kaspersky x ConcorrênciaComparativo Geral Seguraça Kaspersky x Concorrência
Comparativo Geral Seguraça Kaspersky x Concorrência
 

Semelhante a Phprs meetup - deploys automatizados com gitlab

ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
Antonio Lobato
 
Artigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle BehaveArtigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle Behave
Julian Cesar
 

Semelhante a Phprs meetup - deploys automatizados com gitlab (20)

Automatização de Ambientes CI & CD & DevOps
Automatização de Ambientes CI & CD & DevOpsAutomatização de Ambientes CI & CD & DevOps
Automatização de Ambientes CI & CD & DevOps
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como Código
 
DevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínuaDevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínua
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Integração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimentoIntegração contínua - Prática de desenvolvimento
Integração contínua - Prática de desenvolvimento
 
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
ld0mg1hrlhzbyvgfiyyq-signature-d9919623d100cd87ad7553e4c50163aa9329a439464540...
 
Women@MicrosoftCommunities - DevOps e Azure: uma combinação perfeita!
Women@MicrosoftCommunities - DevOps e Azure: uma combinação perfeita!Women@MicrosoftCommunities - DevOps e Azure: uma combinação perfeita!
Women@MicrosoftCommunities - DevOps e Azure: uma combinação perfeita!
 
GABC 2018 - Hands-On: DevOps, CI e CD
GABC 2018 - Hands-On: DevOps, CI e CDGABC 2018 - Hands-On: DevOps, CI e CD
GABC 2018 - Hands-On: DevOps, CI e CD
 
DevOps
DevOpsDevOps
DevOps
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Descomplicando CI/CD com Jenkins, Docker Swarm e Github
Descomplicando CI/CD com Jenkins, Docker Swarm e GithubDescomplicando CI/CD com Jenkins, Docker Swarm e Github
Descomplicando CI/CD com Jenkins, Docker Swarm e Github
 
12 Factor Apps
12 Factor Apps12 Factor Apps
12 Factor Apps
 
Falando sobre DevOps no azure
Falando sobre DevOps no azureFalando sobre DevOps no azure
Falando sobre DevOps no azure
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
 
DEV-OPS para teste de software
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de software
 
Cloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureCloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows Azure
 
Subm_SamuelPereira_FINAL
Subm_SamuelPereira_FINALSubm_SamuelPereira_FINAL
Subm_SamuelPereira_FINAL
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de Software
 
Artigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle BehaveArtigo Automação de testes funcionais com Demoiselle Behave
Artigo Automação de testes funcionais com Demoiselle Behave
 

Mais de Jackson F. de A. Mafra

Mais de Jackson F. de A. Mafra (20)

PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
PHP Conference 2020 - A eterna luta: compatibilidade retroativa vs. dívida té...
 
PHP SSO no Zentyal
PHP SSO no ZentyalPHP SSO no Zentyal
PHP SSO no Zentyal
 
O que você precisa saber sobre chatbots
O que você precisa saber sobre chatbotsO que você precisa saber sobre chatbots
O que você precisa saber sobre chatbots
 
WCPOA2019 - WordPress como um backend de seus aplicativos
WCPOA2019  - WordPress como um backend de seus aplicativosWCPOA2019  - WordPress como um backend de seus aplicativos
WCPOA2019 - WordPress como um backend de seus aplicativos
 
WordPress como um backend de seus aplicativos
WordPress como um backend de seus aplicativosWordPress como um backend de seus aplicativos
WordPress como um backend de seus aplicativos
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPress
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicações
 
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...Hangout  Tempo Real Eventos - ChatOps (ChatBots e DevOps)  - Como bots podem ...
Hangout Tempo Real Eventos - ChatOps (ChatBots e DevOps) - Como bots podem ...
 
Hangout Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
Hangout  Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...Hangout  Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
Hangout Tempo Real Eventos - Android - Os primeiros passos do desenvolviment...
 
Hangout Tempo Real Eventos - Javascript - Os Primeiros Passos
Hangout  Tempo Real Eventos - Javascript - Os Primeiros PassosHangout  Tempo Real Eventos - Javascript - Os Primeiros Passos
Hangout Tempo Real Eventos - Javascript - Os Primeiros Passos
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
Desmistificando o DialogFlow
Desmistificando o DialogFlowDesmistificando o DialogFlow
Desmistificando o DialogFlow
 
ChatOps (ChatBots + DevOps)
ChatOps (ChatBots + DevOps) ChatOps (ChatBots + DevOps)
ChatOps (ChatBots + DevOps)
 
Conexao kinghost - Vendas inteligentes com intelibots
Conexao kinghost - Vendas inteligentes com intelibotsConexao kinghost - Vendas inteligentes com intelibots
Conexao kinghost - Vendas inteligentes com intelibots
 
WoMakersCode 2016 - Shit Happens
WoMakersCode 2016 -  Shit HappensWoMakersCode 2016 -  Shit Happens
WoMakersCode 2016 - Shit Happens
 
Phalcon 2 High Performance APIs - DevWeekPOA 2015
Phalcon 2 High Performance APIs - DevWeekPOA 2015Phalcon 2 High Performance APIs - DevWeekPOA 2015
Phalcon 2 High Performance APIs - DevWeekPOA 2015
 
Dev Heroes
Dev HeroesDev Heroes
Dev Heroes
 
Trilha Android - Android Evolved
Trilha Android - Android EvolvedTrilha Android - Android Evolved
Trilha Android - Android Evolved
 
TDC 2015 - POA - Trilha PHP - Shit Happens
TDC 2015 - POA - Trilha PHP - Shit HappensTDC 2015 - POA - Trilha PHP - Shit Happens
TDC 2015 - POA - Trilha PHP - Shit Happens
 
Material design
Material designMaterial design
Material design
 

Phprs meetup - deploys automatizados com gitlab

  • 2. Olá! Eu sou o Jackson Mafra Desenvolvedor há mais de 20 anos com background em projetos de e-commerce e mercado imobiliário, desde 2009 com interesses focados para o desenvolvimento de interfaces móveis e aplicações corporativas. @jacksonfdam
  • 3. E essa é a tubaron , onde trabalho! 3 A Tubaron é uma empresa de telecomunicação, que foi pioneira em Triple Play (Voz, Dados e TV) via Fibra Óptica no RS. Link Dedicado - Soluções de internet para provedores, integradores e empresas. IPTV Multicast - Sistema de IPTV para franqueados Tubaron e clientes. Telefonia - Planos de telefonia adequados a demanda de sua empresa. Rastreamento - GPS Tracking próprio de baixo custo. Cloud e Colocation - Infraestrutura de Cloud e Colocation para provedores e empresas.
  • 4. Um dos meus desafíos: organizar a infra. 4 Automação de processos, versionamento do código, não existia real separação de ambientes; homologação, desenvolvimento, e até produção coexistiam. Se ninguém (ou melhor, poucos) tem acesso SSH aos servidores de desenvolvimento e homologação, como será feito o deploy? Em pouco tempo se torna óbvio que é inviável manter essa tarefa manual. Não é raro acontecerem dezenas de deploys em homologação no mesmo dia, se incumbir uma pessoa com essa responsabilidade eu anulo um desenvolvedor pleno/sênior.
  • 5. Deploys e Pipelines Agenda Introdução Conclusões DevOps, Integração, Entrega e Implantação Contínua Roll Back, Backup, Monitoramento, Secrets
  • 7. O nome é uma junção das palavras development e operations. DevOps é uma mudança cultural de TI, que propõe a integração entre os times de desenvolvimento de software e operações de TI, em busca de maior eficiência na criação e gerenciamento de uma aplicação. O que é DevOps? 7
  • 8. Diferente do que muitos pensam, não é apenas um cargo, um grupo de ferramentas ou uma tecnologia. É um conjunto de práticas, ferramentas e políticas para entregar tecnologia de forma integrada e rápida, garantindo a qualidade em todos os estágios de criação. O que é DevOps? 8
  • 9. Em alguns modelos, até mesmo as equipes de qualidade e segurança se integram às de desenvolvimento e operações — esse modelo também é conhecido como DevSecOps. O que é DevOps? 9
  • 10. “Falar em DevOps é também falar de automatização. ”
  • 11. É uma forma importante de ganhar eficiência e garantir qualidade em testes e, assim, poder trabalhar com entrega contínua e microsserviços. O que é DevOps? 11
  • 12. Continuous Integration, Continuous Delivery & Deployment (CI/CD) O CI / CD (integração contínua / entrega contínua) é uma metodologia que otimiza o desenvolvimento de software por meio de colaboração e automação e é um componente crítico da implementação do DevOps.
  • 13. A picture is worth a thousand words
  • 14. Integração contínua (continuous integration) é uma prática de desenvolvimento de software que visa tornar a integração de código mais eficiente, através de builds e testes automatizados. Integração contínua (Continuous Integration) 14
  • 15. Entrega contínua é uma extensão desse processo. É a automação do processo de liberação, para que o novo código seja implantado nos ambientes de destino - normalmente para ambientes de teste ou preparação - de maneira repetitiva e automatizada. Entrega Contínua (Continuous Delivery) 15
  • 16. O CD também é usado para descrever a Implantação Contínua, que se concentra no processo de automação para liberar o que agora é uma compilação totalmente funcional na produção. Implantação Contínua (Continuous Deployment) 16
  • 17. Infraestrutura ágil VENUS Para garantia de que os ambientes sejam idênticos e contenham apenas mudanças homologadas, é preciso implementar um gerenciamento de configuração para que qualquer mudança inserida manualmente nos servidores e não através de uma gerência de configurações seja automaticamente desfeita. Infraestrutura para negócio Garantir continuamente a infraestrutura com foco no negócio. Implantar mecanismos que permitam a área de operações atenderem as expectativas do negócio e ainda sim manter sua confiabilidade. Padronização nas configurações
  • 18. Tenha um ambiente de homologação que reflita de forma quase que idêntica ao ambiente do cliente. Isso não necessariamente quer dizer que devo ter a mesma quantidade de dados no BD de desenvolvimento, mas as mesmas diretivas de ambiente, aplicação, usuários do sistema e estrutura de diretórios, o que ajuda o desenvolvedor a trabalhar com um cenário mais próximo possível da realidade. O ambiente de homologação deve ser igual ao de produção
  • 19. Infraestrutura ágil VENUS Provisionamento dinâmico dos ambientes As configurações e scripts de execução para instalação de serviços devem ser versionados no mesmo repositório e da mesma forma que o código da aplicação para que possam ser disponibilizados, auditados e evoluídos juntos. Infraestrutura como um código Os ambientes devem ser criados sempre que necessários em processos automatizados para garantia de que estejam sempre disponíveis. A equipe de desenvolvimento deve receber a infraestrutura necessária para seu trabalho sem necessidade de intervenção da equipe de operações.
  • 20. Provisionamento é o processo que envolve todas as atividades necessárias para que um servidor possa ser usado e independente da razão pela qual ele foi requisitado.
  • 21. Infraestrutura ágil VENUS Liberdade para Deploy Automação de infraestrutura é o processo de criar scripts, desde a instalação de um sistema operacional até a instalação e configuração de serviços. Este processo também atende por outros nomes como gerenciamento de configuração ou gerenciamento de TI. Ambientes Automatizados A equipe de desenvolvimento deve ser autônoma para realização de deploy nos ambientes, até produção sem necessidade de processos burocráticos e interferência da área de operações.
  • 22. Deploy ou implantação, é a instalação e configuração da aplicação e seus componentes.
  • 23. Infraestrutura ágil VENUS Integração contínua Para que a infraestrutura seja ágil é determinante que haja estratégias para gestão de incidentes bem definidas, políticas de roll back, backups e ferramentas de monitoração pró-ativas. Gestão de incidentes Ferramentas devem orquestrar todo o processo envolvido na entrega de nova versão da aplicação que inclui a criação dos ambientes caso necessário, deploys dos códigos juntamente as configurações da infra, testes automatizados, possibilidade de reversão e auditoria.
  • 24. O Ciclo de vida de um servidor é diferente da aplicação. O mesmo servidor pode ser usado por várias aplicações e cada aplicação pode efetuar deploys muitas vezes, enquanto o provisionamento de novos servidores ocorre menos frequentemente.
  • 25. Infraestrutura ágil VENUS Infraestrutura com Testes Com sistemas de controle de versão como o GIT, é possível definir a infraestrutura como código da mesma forma que você faz com seus arquivos de software. Controle de Versão Uma das consequências positivas de se automatizar a infraestrutura de TI é a possibilidade de configurá-la baseando-se em testes funcionais, são executados testes para garantir que aquela alteração não impactará o serviço ou a continuidade do negócio.
  • 26. O mais interessante é que em inglês, um dos significados da palavra deploy, diz o seguinte: (Mover tropas ou equipamento) em posição para uma ação militar.
  • 27. Infraestrutura ágil VENUSPipelines São um conjunto de instruções que executarão uma determinada ação. Exemplo: job para criar um pacote para uma determinada distribuição Linux. Job Uma pipeline é um grupo de jobs que são executados em estágios. Todos os jobs em um estágio são executados em paralelo (se houver Runners suficientes), e se todos eles tiverem sucesso, a pipeline move para o próximo estágio.
  • 29. Single Pipeline - Grouped jobs
  • 30. O Que São Git Hooks? Git Hooks são shell scripts executados automaticamente antes ou depois que o Git execute um comando importante, como “Commit” ou “Push”.
  • 31. Hooks são armazenados na pasta .git/hooks/ para cada projeto copiado, ou em um repositório local recém criado. Lá, nós podemos encontrar uma série de exemplos de Hooks, os quais são ótimos pontos de partida. Para ativar um Hook, é necessário apenas criar um arquivo e salvá-lo na pasta .git/hooks/. Entretanto, o nome do arquivo é pré-definido pelo Git. Muitos dos Hooks que podemos usar são: Como Usar Git Hooks
  • 32. Como Usar Git Hooks
  • 33. Como Usar Git Hooks Git Hook Comando Git Descrição commit-msg.sample git commit Para definir uma mensagem de commit. post-update.sample git push Atualizar todos os dados após push. pre-commit.sample git commit Antes de executar um committing. prepare-commit-msg.sample git commit Quando uma mensagem commit for definida. pre-push.sample git push Antes de realizar um envio. pre-rebase.sample git rebase Antes de realizar um pass ou merge. pre-receive.sample git push Quando executamos push e obtemos data do repositório remoto. update.sample git push Ao atualizar os dados remotos com push.
  • 34. Codeception Full-stack testing PHP framework http://codeception.com https://github.com/Codeception/Co deception
  • 35. PHPUnit The PHP Unit Testing framework https://phpunit.de/ https://github.com/sebastianbergm ann/phpunit
  • 36. Documentation Generator for PHP Documentation Generator for PHP http://www.phpdoc.org https://github.com/phpDocumentor/ph pDocumentor2
  • 37. Code Climate An automated code review. https://codeclimate.com/quality/
  • 38. Detects violations of a defined set of coding standards. https://github.com/squizlabs/PHP_Code Sniffer PHP CodeSniffer
  • 39. PHP Static Analysis Tool - discover bugs in your code without running it! https://github.com/phpstan/phpstan PHP Stan
  • 40. PHP Database Migrations for Everyone https://phinx.org https://github.com/cakephp/phinx Phinx
  • 41. PHP project build system or build tool https://github.com/phingofficial/phing https://www.phing.info/ PHing
  • 43. Deploys e Pipelines Roll Back, Backup, Monitoramento, Secrets
  • 44. GitHub O GitHub é uma plataforma de hospedagem de repositórios baseada no Git, lançada originalmente em 2008 por Tom Preston-Werner, Chris Wanstrath e PJ Hyatt. Este é o maior host de repositório, com mais de 38 milhões de projetos. https://github.com/
  • 45. Bitbucket O Bitbucket também foi lançado em 2008 por uma startup australiana, originalmente suportando apenas projetos Mercurial. Em 2010, o Bitbucket foi adquirido pela Atlassian e a partir de 2011 também passou a oferecer suporte à hospedagem Git, que agora é seu foco principal. Ele se integra perfeitamente a outros serviços da Atlassian e seu principal mercado são as grandes empresas. https://bitbucket.org
  • 46. GitLab O GitLab começou como um projeto de Dmitriy Zaporozhets e Valery Sizov, fornecendo uma alternativa às soluções de gerenciamento de repositórios disponíveis em 2011. Em 2012, o site GitLab.com foi lançado, mas a empresa só foi incorporada em 2014. https://about.gitlab.com/
  • 47. Cada uma das plataformas é um grande universo por si só quando se trata de recursos e capacidades. Fazer uma comparação detalhada dos recursos está além do escopo desta publicação. Mas se estivermos olhando apenas para os recursos básicos, eles mostram muitas semelhanças: Funcionalidades básicas 47
  • 48. ● Pull request ● Code review ● Edição embutida ● Issue tracking ● Suporte a Markdown ● Autenticações de dois fatores ● Gerenciamento de permissão avançado ● Páginas da Web estáticas hospedadas ● API rica em recursos ● Ações de repositórios: Fork / Clone ● Snippets ● Integrações de terceiros Funcionalidades básicas 48
  • 49. O CI/CD do GitLab faz parte do GitLab, um aplicativo da Web com uma API que armazena seu estado em um banco de dados. Ele gerencia projetos / constrói e fornece uma ótima interface de usuário, além de todos os recursos do GitLab. GitLab Runner é uma aplicação que processa compilações. Ele pode ser implantado separadamente e funciona com o GitLab CI/CD por meio de uma API. Para executar testes, você precisa de pelo menos uma instância do GitLab e um GitLab Runner. Arquitetura GitLab 49
  • 50.
  • 51.
  • 65. Criando o projeto com Laravel
  • 66. Criando o projeto com Laravel
  • 67. Criando o projeto com Laravel
  • 68. Criando o projeto com Laravel
  • 69. Criando o projeto com Laravel
  • 96. Automatizar os processos errados A pergunta "Será que isso precisa ser automatizado agora" deve vir acompanhada de outras perguntas relevantes. Entre elas: - Com que frequência o processo ou cenário é repetido? - Quanto tempo dura o processo? - Quais pessoas e dependências de recursos estão envolvidos no processo? Eles estão causando atrasos na CICD? - É o processo sujeito a erros, se não for automatizado? - Qual é a urgência em adotar o processo automatizado? Nem tudo são Flores 96
  • 97. Confundir implantação contínua com entrega contínua Implantação contínua é o conceito de que todas as alterações feitas no código são implantadas quase imediatamente para a produção. Entrega contínua é o conceito de que todas as alterações no código base passam antes por ambientes de não-produção. A equipe encontra e aborda questões imediatamente, e não mais tarde, quando já liberaram o código para uso. Quando liberar o código-base para a produção é uma decisão de negócios. Nem tudo são Flores 97
  • 98. Faltar coordenação entre a CI e CD Esta armadilha nos leva de volta à nossa definição de consenso de DevOps, que sustenta que CI e CD são dois itens diferentes. CI alimenta CD. A implementação de um pipeline CI decente e um sistema CD completo leva meses e requer colaboração e garantia de qualidade da equipe de DevOps, engenheiros de operação, Scrum masters... Todos devem contribuir. Talvez o aspecto mais difícil da CICD é este fator humano, em vez de qualquer dos desafios técnicos que discutimos. Assim como você não pode programar um relacionamento saudável entre duas pessoas, você não pode automatizar colaboração e comunicação. Nem tudo são Flores 98
  • 99. Manter a meta à vista CICD é essencial porque ele atende os objetivos de negócio. Executivos de tecnologia sabem que a evolução contínua, consertos rápidos e a garantia de qualidade ajudam a reter clientes. DevOps pode criar uma experiência de trabalho melhor para a sua equipe, mas não é por isso que as empresas implementam DevOps. Simplificando,vale a pena rever as armadilhas de CICD porque dinheiro está em jogo. Nem tudo são Flores 99
  • 100. O que é DevOps e como usar na sua empresa https://www.opus-software.com.br/como-usar-devops/ O que é Integração, Entrega e Implantação Contínua? https://www.opus-software.com.br/o-que-e-integracao-continua/ Continuous Integration, Continuous Delivery & Deployment (CI/CD) https://www.docker.com/solutions/cicd Continuous integration vs. continuous delivery vs. continuous deployment https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-del ivery-vs-deployment Existe vida além do FTP: por que sua aplicação merece um deploy automatizado? https://blog.umbler.com/br/por-que-sua-aplicacao-merece-um-deploy-automatizado/ Referências 100
  • 101. GitLab CI/CD Pipeline Configuration Reference https://docs.gitlab.com/ee/ci/yaml/#manual-actions Reverting changes https://docs.gitlab.com/ee/user/project/merge_requests/revert_changes.html Environments and deployments https://docs.gitlab.com/ee/ci/environments.html GitLab Infrastructure https://gitlab.com/gitlab-com/gl-infra/infrastructure Deploying with Git https://devcenter.heroku.com/articles/git Referências 101
  • 102. Six Strategies for Deploying to Heroku https://blog.heroku.com/six-strategies-deploy-to-heroku Managing Multiple Environments for an App https://devcenter.heroku.com/articles/multiple-environments Pipelines https://devcenter.heroku.com/articles/pipelines Ambientes por branch com openshift next gen usando gitlab https://blog.coderockr.com/posts/2017/ambientes-por-branch-com-openshift-next-gen- usando-gitlab/ Referências 102
  • 103. Referências Devops https://www.4linux.com.br/o-que-e-devops Saiba o que é a automatização de deploy https://blog-br.softwareone.com/saiba-o-que-e-a-automatizacao-de-deploy Deploys automatizados com git https://gist.github.com/gabrielgilini/2993244 Integração contínua usando o drone https://blog.coderockr.com/posts/2017/integracao-continua-usando-o-drone/ Docs Drone.io https://docs.drone.io/ 103
  • 104. Referências Category Vision - Secrets Management https://about.gitlab.com/direction/release/secrets_management/ https://gitlab.com/gitlab-org/gitlab-foss/issues/40720 Hashicorp Vault https://www.vaultproject.io/ GitLab CI/CD environment variables https://docs.gitlab.com/ce/ci/variables/#secret-variables Como Utilizar Git Hooks? https://www.hostinger.com.br/tutoriais/como-usar-git-hooks/ A curated list of amazingly awesome PHP libraries, resources and shiny things. https://github.com/ziadoz/awesome-php 104
  • 105. Referências Projeto - phprs-cicd https://gitlab.com/jacksonfdam/phprs-cicd Projeto - phprs-api https://gitlab.com/jacksonfdam/phprs-api 105
  • 106. Obrigado! Qualquer dúvida, crítica ou sugestão só me procurar: @jacksonfdam jacksonfdam@gmail.com