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

DevOPS e Jenkins Pipelines. Conectando o Desenv...

DevOPS e Jenkins Pipelines. Conectando o Desenvolvimento a Entrega de Software

Apresentação feita no Meetup DevOps-SP no evento CVC-Digital. O objetivo dessa talk foi mostrar a evolução de maturidade técnica e de processo para um time de desenvolvimento de software e como uma pipeline (as code - no Jenkins) reflete e reforça essa evolução.

drequena

April 18, 2018
Tweet

More Decks by drequena

Other Decks in Technology

Transcript

  1. Hello! - whoami Daniel DevOps @ Rivendel (não é cargo,

    eu sei) Sysadmin há 12 anos LPI-1/LPI-2 e Zabbix Specialist Bacharel em CCP / Mestre em Eng. da Computação. Barista Júnior.
  2. Agenda ◆ Pipelines + DevOPS ◆ Jenkins ◆ Ambiente e

    aplicação ◆ Cenario 1 ◆ Cenario 2 ◆ Cenario 3 ◆ Por que parar por aqui? ◆ Perguntas fáceis.
  3. Pipelines + DevOps Hippie: “Uma pipeline é onde a manifestação

    do DevOPS realmente acontece.” Rosa Weber: “segundo Friedrich Carl Freiherr (1815), uma pipeline, é a união completa dos Altos empresariais , lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation…” (+4 páginas) Definições:
  4. Pipelines + DevOps ◆ Automatizar o processo de entrega de

    software em produção de forma rápida e garantindo sua qualidade, estabilidade e resiliência. Objetivo: Pipeline Processos GitFlow Provisionamento Burocracia CD Estratégias códi go
  5. Pipelines + DevOps Alinhado com o CAMS. C - cultura

    A - automação (*) M - métricas S - compartilhamento (sharing)
  6. Pipelines + DevOps Importante! • Pipeline é reflexo dos seus

    processos ◦ Processo “torto” gera pipeline “torta” • Software sem teste ◦ Parabéns, você conseguiu automatizar seu Rollback
  7. Jenkins • Mais antigo no "mercado" • Orientado a plugins

    (extensível) • Muito conhecido e utilizado • Muito flexivel • Farta documentação e material (livros, cursos, posts) • Oferece versão com suporte (para quem interessar) Por que?
  8. Jenkins • Pipeline: Declarativa X Script Considerações ▪ Declarativa •

    Mais recente • Não precisa aprender Groovy • Em processo de adoção • Documentação mais escassa ▪ Script • Mais flexível • Groovy • Mais poderosa • Muito utilizada
  9. Jenkins • Plugins ◦ Extendem as funcionalidades básicas do Jenkins

    ◦ Ferramental padronizado para pipelines ◦ Abaixo do “guarda-chuva” do Java/Jenkins ◦ Ajuda a evitar o uso do bom e velho “sh” Ex: ◆ Amazon ◆ Docker ◆ Slack Considerações
  10. Ambiente e Aplicação Jenkins: • Instalado na AWS em ec2

    t2.micro • Debian 9 • Versão 2.1XYZ • Plugins (Gitlab, Slack, BlueOcean) • Docker • Utilitários do SO (curl, jq, etc…) Gitlab: • Na nuvem, com projetos públicos + webhooks
  11. Ambiente e Aplicação API Rest em Flask (python): • MoviePoll

    ◦ getmovies ◦ getresult ◦ vote ◦ gettotalvotes (*) Algum desenvolvedor Front JS?
  12. Cenario 1 - Desenvolvedor único - tudo na master (sem

    branches) - Sem testes - Execução direta (CD) - Docker - FreeStyle vs Coded - Notificações
  13. Cenario 1 • app.py • Dockerfile • Jenkinsfile Fluxo: •

    Exec FreeStyle Job: Clone-> Build-> Run. • Dev -> commit master -> webhook p/ Jenkins -> Clone-> Build-> Run
  14. Cenario 1 • Gitlab Webhook env VARs gitlabMergeRequestDescription gitlabMergeRequestTargetProjectId gitlabSourceRepoURL

    gitlabTargetRepoHttpUrl gitlabUserEmail gitlabMergeRequestTitle gitlabTargetBranch gitlabTargetRepoSshUrl gitlabMergeRequestLastCommit gitlabTargetNamespace gitlabTargetRepoName gitlabSourceNamespace gitlabSourceRepoHttpUrl gitlabMergeRequestState gitlabUserName gitlabSourceRepoName gitlabActionType gitlabSourceBranch gitlabSourceRepoHomepage gitlabMergedByUser gitlabMergeRequestIid gitlabBranch gitlabMergeRequestId gitlabSourceRepoSshUrl ...
  15. Cenario 2 - + 1 Dev no time - Gitflow

    mínimo (FB) - Testes unitários e de integração - Ambiente isolado para testes - Notificações + completas
  16. Cenario 2 • Jenkinsfile • unit.sh • Int.sh Fluxo: •

    Branch -> Push -> Clone -> Build -> Unit tests -> (if master) Int tests -> NEW Env.
  17. Cenario 3 - Testes de Acc (em job separado) -

    Job Parametrizado - Gitflow com MR - Ambiente isolado para testes - Notificações + completas
  18. Cenario 3 • Jenkinsfile • unit.sh • Int.sh • Nova

    Pipeline (Acc tests) Fluxos: • Branch -> Push -> Clone -> Build -> Unit tests -> Int tests -> Acc tests -> NEW Env. • MR p/ master -> Clone -> Build -> Unit tests -> Int tests -> Acc tests -> PROD
  19. Por que parar por aqui? • Criação de repositório e

    Webhook • Criação de Pipeline • Setup de sistemas auxiliares • Escolha de tecnologia (PaaS) • Subida da Infra ◦ Terraform ◦ Ansible