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

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

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. DevOps e Jenkins Pipeline:
    Conectando o Desenvolvimento a
    Entrega de Software!

    View Slide

  2. 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.

    View Slide

  3. Agenda
    ◆ Pipelines + DevOPS
    ◆ Jenkins
    ◆ Ambiente e aplicação
    ◆ Cenario 1
    ◆ Cenario 2
    ◆ Cenario 3
    ◆ Por que parar por aqui?
    ◆ Perguntas fáceis.

    View Slide

  4. 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:

    View Slide

  5. 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

    View Slide

  6. Pipelines + DevOps
    Alinhado com o CAMS.
    C - cultura
    A - automação (*)
    M - métricas
    S - compartilhamento (sharing)

    View Slide

  7. Pipelines + DevOps
    DevOPS:

    View Slide

  8. Pipelines + DevOps

    View Slide

  9. Pipelines + DevOps
    DevOPS:
    - DEV não vira OPS
    - OPS não vira DEV

    View Slide

  10. Pipelines + DevOps
    Importante!
    ● Pipeline é reflexo dos seus processos
    ○ Processo “torto” gera pipeline “torta”
    ● Software sem teste
    ○ Parabéns, você conseguiu automatizar seu
    Rollback

    View Slide

  11. 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?

    View Slide

  12. 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

    View Slide

  13. Jenkins
    ● Pipeline: Declarativa

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. Ambiente e Aplicação
    API Rest em Flask (python):
    ● MoviePoll
    ○ getmovies
    ○ getresult
    ○ vote
    ○ gettotalvotes (*)
    Algum desenvolvedor Front JS?

    View Slide

  17. Ambiente e Aplicação

    View Slide

  18. Ambiente e Aplicação
    ATENÇÃO

    View Slide

  19. Cenario 1
    - Desenvolvedor único
    - tudo na master (sem branches)
    - Sem testes
    - Execução direta (CD) - Docker
    - FreeStyle vs Coded
    - Notificações

    View Slide

  20. Cenario 1
    ● app.py
    ● Dockerfile
    ● Jenkinsfile
    Fluxo:
    ● Exec FreeStyle Job: Clone-> Build-> Run.
    ● Dev -> commit master -> webhook p/ Jenkins ->
    Clone-> Build-> Run

    View Slide

  21. 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
    ...

    View Slide

  22. DEMO-1
    Cenario 1

    View Slide

  23. Cenario 2
    - + 1 Dev no time
    - Gitflow mínimo (FB)
    - Testes unitários e de integração
    - Ambiente isolado para testes
    - Notificações + completas

    View Slide

  24. Cenario 2
    ● Jenkinsfile
    ● unit.sh
    ● Int.sh
    Fluxo:
    ● Branch -> Push -> Clone -> Build -> Unit tests ->
    (if master) Int tests -> NEW Env.

    View Slide

  25. DEMO-2
    Cenario 2

    View Slide

  26. Cenario 3
    - Testes de Acc (em job separado) - Job Parametrizado
    - Gitflow com MR
    - Ambiente isolado para testes
    - Notificações + completas

    View Slide

  27. 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

    View Slide

  28. DEMO-3
    Cenario 3

    View Slide

  29. 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

    View Slide

  30. Por que parar por aqui?

    View Slide

  31. Referências
    ● https://gitlab.com/requena1/flask-app
    ● https://gitlab.com/my_pipelines/flask-app
    ● https://gitlab.com/my_pipelines/acctests
    ● https://jenkins.io/doc/book/pipeline/
    ● https://opendevops.com.br/

    View Slide

  32. Obrigado!
    Perguntas?
    You can find me at @Daniel_Requena (twitter)
    www.linkedin.com/in/danielrequena/
    [email protected]
    (11) 3447-1144

    View Slide