Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPRS - Meetup - Deploys Automatizados com Gitlab

PHPRS - Meetup - Deploys Automatizados com Gitlab

O GitLab é um gerenciador de repositórios baseado em Git. Suas ferramentas incluem um wiki, um gerenciador de tarefas e um pipeline de CI/CD, etc. O GitLab é similar ao GitHub, porém, por ser open source, pode ser armazenado em infraestrutura própria, além da versão em nuvem do mesmo, podendo ter repositórios públicos e privados.
GitLab Runner, o GitLab permite que você use o Runner, que é um projeto open source que é usado para executar os jobs e enviar os resultados de volta para o GitLab. Ou seja, ele nos permite buildar sem a necessidade de nenhuma instalação externa.
Veremos uma introdução de como tudo isso funciona.

Jackson F. de A. Mafra

October 28, 2019
Tweet

More Decks by Jackson F. de A. Mafra

Other Decks in Programming

Transcript

  1. 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
  2. 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.
  3. 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.
  4. Deploys e Pipelines Agenda Introdução Conclusões DevOps, Integração, Entrega e

    Implantação Contínua Roll Back, Backup, Monitoramento, Secrets
  5. 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
  6. 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
  7. 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
  8. É 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
  9. 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.
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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.
  16. 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.
  17. 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.
  18. 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.
  19. 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.
  20. 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.
  21. 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.
  22. Infraestrutura ágil VENUS Pipelines 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.
  23. 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”.
  24. 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
  25. 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.
  26. PHP Static Analysis Tool - discover bugs in your code

    without running it! https://github.com/phpstan/phpstan PHP Stan
  27. 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/
  28. 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
  29. 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/
  30. 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
  31. • 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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