DevOps: desenvolvedores e sysadmins cooperando na prática

760 visualizações

Publicada em

Por muito tempo desenvolvedores e administradores de infraestrutura tentam fazer integrações para que a implantação (deployment) seja mais efetiva, com menos sofrimento ao portar do ambiente de desenvolvimento para homologação/produção.
Essa apresentação introduz ao movimento DevOps, que aproxima desenvolvedores e administradores de sistema (sysadmin), para que trabalhem em maior sinergia.
A proposta é ilustrar os pilares da cultura DevOps, bem como os softwares que a permeia, focada em ferramentas e práticas reais, com exemplos do ecossistema PHP.

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
760
No SlideShare
0
A partir de incorporações
0
Número de incorporações
29
Ações
Compartilhamentos
0
Downloads
20
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Administradores leia-se: administradores de sistema, administradores de rede, sysadmin, infraestrutura, segurança e outros.
  • Workers (mecanismo de filas como ActiveMQ), Querys SQL x MapReduce.
    Recomenda-se autenticar via par de chaves, ao invés de login/senha. Karma Level. Arquitetura de cloud: IaaS x Paas - Exexmplos de IaaS: Digital Ocean, AWS, Linode, Azure, Rackspace e Open Stack
    - Exemplos de PaaS: OpenShift, Heroku, Google App Engine (Google Cloud), AppFog, Pagoda Box, Fortrabbit, Laravel Forge
  • Estereótipos: Cena do seriado Silicon Valley da HBO numa das eternas brigas do Dinesh (desenvolvedor) e Gilfoyle (administrador de sistemas).
  • Não é minha máquina, é o seu código! Não é meu código, é o seu servidor.
  • Palestra "Empathy Gives You Superpowers" por Matt Stauffer [ Laracon EU 2015 ]
    https://www.youtube.com/watch?v=fMFjO2szDnk
  • Dê acesso aos desenvolvedores. Atualmente estão surgindo cargos de DevOps, que antes não existia. Perde-se o medo de errar.
  • Qual administrador daqui já abriu código para averiguar o que estava acontecento? Certamente poucos…
    Há tempos existe demanda para desenvolvedores full stack, então muitos já estão familiarizados com SO, plataforma, banco, servidor de aplicação e linguagem (pilha completa).
    Voltando a serem mais generalistas com equipes multifuncionais.
    LAMP stack está dando lugar ao NGINX, MongoDB e outras versões de PHP (HHVM e Hack).
  • Geralmente criam-se canais # onde cada canal é um projeto. Cada commit pode aparecer na interface do Slack e com um clique é possível enxergar as mudanças, ver se (por acaso) alguém mexeu no mesmo código que você está trabalhando etc. O Laravel integra de forma nativa os warnings e todo o tipo de erro gerado. A RedHat usa IRC.
  • Totalmente integrado ao GitHub.
    Gitter tem um setup mais fácil.
  • Compartilhar a visão
  • Visibilidade, transparência, o que está acontecendo agora, quem está trabalhando e onde, compartilhar código, rastrear tarefas, gerenciar o backlog (Scrum). O MSProject perdeu mercado em função da sua complexidade e pela falta de integração com os repositórios. Cada pessoa tem um perfil: alguns preferem papel e artefatos "físicos". https://trello.com/atomicopenshift No Trello é possível "votar" para aprovar ou mensurar alguma demanda.
  • Da 37signals (dos autores do Ruby On Rails), que agora tornaram-se Basecamp.
    O ambiente de HomeOffce foi muito beneficiado com esse tipo de software, pois é possível ter um acompanhamento global remotamente.
  • Resposta rápida, triagem de solicitações, prioridades. Mais pertinente no contexto onde há necessidade de feedback ao cliente, onde ele possa acompanhar o desenvolvimento das demandas. BugZilla, Trac, Mantis e o próprio issues do GitHub.
  • https://bugzilla.redhat.com/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=MODIFIED&bug_status=ON_DEV&classification=Red%20Hat&list_id=3982480&order=bug_severity%2Cpriority%2Cassigned_to%20DESC%2Cbug_id%20DESC&product=OpenShift%20Origin&query_format=advanced&short_desc=\[fork\]&short_desc_type=notregexp&version=3.x É possível parametrizar de modo que o ticket só seja fechado pelo time de QA. Permite também upload privado, em caso de dados sigilosos que necessitem serem enviados para o desenvolvedor.
  • One time now (da Axosoft), porém mais focado em Scrum. Ele não permitia dois responsável por uma tarefa (princípio fundamental do Pair programming – XP). Target Process, Mantis, Bugzilla
  • Alarmes, verificação periódica da saúde das máquinas, tempo de resposta, obtém as exceções – quando o aplicativo já está online.
  • https://pt.wikipedia.org/wiki/ISO_8601
  • Coletar, extrair, parsing, explorar logs Analisa UM log é fácil. Analisar milhares é muito complicado.
    ISO 8601.
  • Nagios também tem esse propósito, embora seja mais "old school". GitHub Status também é um indício interessante, embora menos preciso e com um certo delay. ZendServer tem uma solução muito robusta para trabalhar com PHP. New relic, além de monitoramento, é considerado uma ferramenta bastante poderosa como Analytics.
  • Manter o estado consistente
  • Animal de estimação x rebanho
  • Preparar um servidor pode levar dois dias de trabalho, ou mais. E se forem 200 servidores? Chef salva tempo e a sanidade mental. Preparar a Stack para servir a aplicação. Chef e Puppet são os precursores. Quando a aplicação cresce demais, é necessário apelar para Chef e Puppet. Puppet, Chef, PuPHPet e Ansible/Phansible Possuem mecanismos de failover, lidam com problemas que possam ocorrer na instalação
    DECLARATIVA
  • Provisionamento é uma arte. SaltStack tem programa de certificação Puppet promove conferências em todo o mundo (também tem certificação). Powershell DSC permite mexer no registro do Windows e muitas outras tarefas. Salt e Ansible são mais focados nos desenvolvedores. Salt utiliza YAML, enquanto que Ansible usa SSH (não requer instalação de recursos na máquina client)
    Phansible é uma solução mais voltada para o desenvolvimento (não em produção). Homestead do Laravel.
  • Rastrear mudanças
  • Era pré-Git os administradores eram os "inimigos".
  • Gitosis e Gitorious pode-se baixar e instalar num servidor local. Através de um servidor, é possível ter maior controle sobre os dados. Existe também o Garrit e outros...
  • Hook é no sentido de interceptar. Existem hooks no lado do cliente e outros no servidor. touch .git/hooks/pre-commit
    chmod +x .git/hooks/pre-commit
    É agnóstico do ponto de vista de linguagem.
  • Mashup
  • Tudo isso foi possível com o advento do GitHub (SaaS), lembrando que Git é apenas o versionamento – enquanto que o GitHub é a plataforma social de código.
    Cada pull request dispara Hooks (ganchos) para outros aplicativos, fazendo com que o processo seja automático. Através de Single SignOn (OAuth2) é possível se habilitar em qualquer outro serviço
  • Replicar toda a stack do servidor de aplicação
  • Espelhamento de ambientes. Qual a imagem usar, que script Chef executar, habilitar rede, pastas compartilhadas.
    Com uma linha é possível testar em diferentes versões de sistema operacional e combinações de configuração.
    Usa Hyper-V (Microsoft), VirtualBox (Oracle), KVM, VMWare etc. Orientado a ambientes de desenvolvimento, pois utilizam uma camada de vitualização – prejudicando a performance. Criar um ambiente que possa ser reproduzido, quando se precisa de algo que fuja do LAMP, compatibilidade cross-platform, time trabalhando em diferentes SO. Provisionamento: setup automatizado, quanto tempo para subir uma máquina, maximizar dev/prod parity, isolamento de ambientes,
  • Docker não usa virtualização. Ele sobe uma instância do kernel, monta um filesystem criptografado, isola num processo – formando um "container", que pode ser facilmente portado em uma cloud como OpenShift, AWS, DigitalOcean etc. Muito mais performático que o Vagrant. A montagem da configuração da máquina de produção é feita uma única vez e depois é distribuída entre os desenvolvedores. Usa a técnica de kernel namespaces. Em https://hub.docker.com é possível baixar uma imagem Docker (definição) e executando-a transforma-se em "container". Vantagens são segurança, velocidade e granularidade. Ex.: docker pull nome | docker run nome
    O Docker ganhou destaque (com relação ao LXC), pois utiliza os "Docker file". Lembre-se que ele não guarda estados, portanto é necessário montar um volume externo para persistir algum dado.
  • Kubernetes, Mesos e Docker Swarm
  • Social development onde você pode praticar Pair programming com outro desenvolvedor remoto.
    Enxerga as mudanças no código em tempo real.
  • Integração Contínua é teste! Jenkins, Travis, GitLab CI, Bamboo, Liquibase, TeamCity e Code Climate.
  • Antecipar gargalos e problemas ANTES de colocar em produção. Progresso incremental.
    É possível realizar o commit e evitar o disparo do CI. Ex.: git commit –m "mensagem [CI SKIP]" http://docs.travis-ci.com/user/languages/php/
  • E o SaaS (Software as a Service)?
  • Garantia de qualidade
  • Inspeção
  • Ele confronta o código com uma série de ferramentas de QA: http://phpqatools.org Sumariza a saida das principais ferramentas de qualidade. Roda uma série de análises. Métricas. Faz revisão do código, atribui badges (selos) onde a nota 4 é a máxima,
  • Automatização de forma simples, previsível e reversível. Compacta, transfere, descompacta, executa as migrations etc. É mais fácil realizar um Hot Deploy (atômico) em PHP, comparado ao Java – pois os binários do Java estão em memória, enquanto que os bytecodes PHP são gerados em tempo de execução.
    Booking fazem várias entregas DIÁRIAS (releases). GlassFish e Jboss possuem mecanismos de hotdeploy incorporados no servidor de aplicação. Na nuvem, é possível fazer a implantação horizontal: sobe um servidor com a versão nova do software e desce um com a versão antiga, e vai fazendo o shift gradativamente. Capistrano, Deployer, Magallanes, Rocketeer, Juju, Envoyer e Phing (manual)
  • Habilitar SSL (Certificação digital) nos servidores, gerar documentação, Stress test: Apache Bench e Seige ECMAScript 5 é mais compatível.
  • Proposed Standards Recommendation
  • Phing é baseado no Apache Ant.
  • Workflow bastante utilizado
  • Integração contínua x Entrega contínua
  • Siga esse mantra
    Simples: procure concentrar o processo de implantação e dispará-lo em apenas UM comando.
    Previsível : saber o que está acontecendo. Se houver efeitos colaterais, mantenha a versão corrente.
    Reversível: UM comando e o sistema volta ao que era.
  • Implementados em Node.js Usa o gerenciador de pacotes NPM. Grunt e Gulp são mais focados em FrontEnd. Extraído de:
    https://travismaynard.com/writing/getting-started-with-gulp

    1) Instale o Node.js
    https://nodejs.org

    2) Crie um diretório, entre nele e execute:
    npm init
    [ preencha as perguntas que ele for perguntando ]

    3) sudo npm install --global gulp
    [ para habilitar o utilitário gulp por linha de comando ]

    4) npm install --save-dev gulp

    5) instale os complementos
    npm install gulp-jshint gulp-sass gulp-concat gulp-uglify gulp-rename --save-dev

    5) Crie o arquivo gulpfile.js e coloque:
    var gulp = require('gulp');

    gulp.task('default', function() {
    // place code for your default task here
    });

    6) Execute:
    gulp
  • CloudFormation usa o conceito de template (em JSON) onde é possível especificar os requisitos desejados (ou até mesmo usar um templete pré-pronto), então ele será criado na cloud. Definir número de instâncias etc. Capistrano, Deployer, Magallanes, Rocketeer e Juju. Envoyer vende a possibilidade de "Zero Downtime", caso contrário execute php artisan down (para suspender o serviço temporariamente).
  • Por força bruta é possível quebrar uma senha.
  • Ou "vendor lock-in" geralmente afeta o sysadmin (infraestrutura) Google Cloud restringe demais a migração para outra plataforma.
  • Testes de aceitação (Codeception) são mais proveitosos para times pequenos. Emulam a navegação no site/sistema, experimentando o funcionamento como um todo.
  • entregar adesivos!
  • Brinde
  • DevOps: desenvolvedores e sysadmins cooperando na prática

    1. 1. DevOps: desenvolvedores e sysadmins cooperando na prática Ari Stopassola Junior
    2. 2. Bacharel em Informática com ênfase em Análise de Sistemas pela Unisinos, cursou mestrado em Engenharia Informática e de Computadores pelo Instituto Superior Técnico da Universidade Técnica de Lisboa (Portugal), perito judicial ad hoc especializado em TI (mantenedor do site PERITO.inf.br), Zend Certified Engineer (PHP 5.3), Zend Certified PHP Engineer (PHP 5.5) e Zend Framework 2 Certified Architect (ZFCA) #ZEND004019, Certified ScrumMaster pela Scrum Alliance #203613, Microsoft Certified Professional (MCP), idealizador do projeto Certificamp, consultor web e PHP evangelist. Ari Stopassola Junior
    3. 3. SlideShare
    4. 4. Realidade • Estruturada x Orientada à Objetos • Relacional x NoSQL • Waterfall x Agile • FTP x git push • Equipes remotas • Virtualização • Curriculum Vitae x GitHub | Stack Overflow • Cloud
    5. 5. "A harmonia do mundo depende da retificação dos nomes." Confúcio 551-479 a.C.
    6. 6. Introdução • Termo "DevOps" foi cunhado em 2009 por Patrick Debois • Movimento que enfatiza a comunicação entre desenvolvedores e administradores de sistema • Desenvolvedores adicionam novos recursos enquanto que Administradores mantém o sistema estável, seguro e performático • Diminiur riscos de implantação através da cultura + ferramental Foto:https://www.linkedin.com/in/patrickdebois
    7. 7. Desenvolvedor X Administrador de Sistemas http://www.hbo.com/silicon-valley
    8. 8. "Na minha máquina funciona!"
    9. 9. em.pa.ti.a Ação de se colocar no lugar de outra pessoa, buscando agir ou pensar da forma como ela pensaria ou agiria nas mesmas circunstâncias.
    10. 10. Cultura • Interesses da companhia são superiores aos EGOs de sysadmins e desenvolvedores • DevOps são práticas • Através da automação, tem-se como resultado a melhoria contínua • Postura amistosa: respeito, jamais esconda o problema, evite dizer não, confiança, seja transparente, evite fingerpointing. Foto: http://cshr.cmb.ac.lk/?page_id=1678
    11. 11. Fonte: http://www.gohorseprocess.com.br
    12. 12. Full-stack developer Fonte: https://flic.kr/p/4RyRRW
    13. 13. Imagem inspirada no curso "DevOps: The Big Picture" da PluralSight por Richard Seroter: http://www.pluralsight.com/courses/devops-big-picture
    14. 14. Collaboration
    15. 15. Slack https://slack.com
    16. 16. Gitter www.gitter.im
    17. 17. Planning
    18. 18. Trello www.trello.com
    19. 19. Issue tracking
    20. 20. Bugzilla https://www.bugzilla.org
    21. 21. Jira https://www.atlassian.com/software/jira
    22. 22. Monitoring
    23. 23. ISO 8601
    24. 24. New Relic http://newrelic.com
    25. 25. • LogStash https://www.elastic.co/products/logstash • Microsoft System Center http://www.microsoft.com/en-us/server- cloud/products/system-center-2012-r2/ • Kibana https://www.elastic.co/products/kibana
    26. 26. Configuration Management
    27. 27. Pet x Cattle Foto: https://steakbuenosaires.files.wordpress.com/2014/02/herding-sheep.jpg
    28. 28. Pet 10.0.0.11 "Poseidon" poseidon.empresa.com.br Compaq Proliant ML330 Foto:https://flic.kr/p/bF4xXY
    29. 29. Cattle ec2-54-91-213-25.compute-1.amazonaws.com ec2-54-91-213-26.compute-1.amazonaws.com ec2-54-91-213-27.compute-1.amazonaws.com ec2-54-91-213-28.compute-1.amazonaws.com ec2-54-91-213-29.compute-1.amazonaws.com Foto:https://prezi.com/nftldtcqniju/recursos-biologicos/
    30. 30. Infrastructure as code Puppet, Chef e Ansible package "ntpd" do action :install end template "/etc/ntpd.conf" do source "ntpd.conf.erb" owner "0755" notifies :restart, "service[ntpd]" end service "ntpd" do action [:start, :enable] end ["site1", "site2", "site3"].each do |dir| directory "/srv/vhosts/#{dir}" do mode 0775 owner "root" group "root" action :create recursive true end end
    31. 31. Provisionamento • SaltStack www.saltstack.com • Phansible (focado em PHP) www.phansible.com • PuPHPet https://puphpet.com • Windows PowerShell Desired State Configuration https://technet.microsoft.com/en- us/library/dn249912.aspx
    32. 32. Controle de versão
    33. 33. GNU/Linux Distro Timeline http://futurist.se/gldt/
    34. 34. Controle de versão • Concurrent Version System – CVS • Subversion • BitKeeper (características híbridas) • Microsoft Visual SourceSafe • Git • Mercurial Modelo descentralizado
    35. 35. Repositório central Hospedado • GitHub • BitBucket • Atlassian Stash Servidor próprio • Gitosis • Gitorious • GitLab • GitBlit
    36. 36. Hooks
    37. 37. Fonte: https://enterprise.github.com/features
    38. 38. P.J. Hyett Tom Preston-Werner Chris Wanstrath
    39. 39. Environment
    40. 40. Vagrant www.vagrantup.com
    41. 41. Docker www.docker.com Foto: https://flic.kr/p/9Wwj79
    42. 42. Foto:https://flic.kr/p/qSBYah Orquestração
    43. 43. Continuous Integration
    44. 44. By Martin Fowler "Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration Foto: https://www.flickr.com/photos/adewale_oshineye/2933030620/
    45. 45. Travis CI www.travis-ci.org .travis.yml
    46. 46. Jenkins www.jenkins-ci.org Fonte:https://ci.openshift.redhat.com/jenkins/
    47. 47. java -jar jenkins.war Quem precisa de SaaS?
    48. 48. IaaS PaaS SaaS OpenShift, Heroku, Google App Engine (Google Cloud), AppFog, Pagoda Box, Fortrabbit, Laravel Forge Digital Ocean, AWS, Linode, Azure, Rackspace, Open Stack
    49. 49. QA: quality assurance http://phpqatools.org
    50. 50. Code Climate https://codeclimate.com
    51. 51. Deployment
    52. 52. O que seria um build no PHP? • Submeter aos testes (unitário, comportamento e integração) • Executar as migrations • Concatenar e minificar arquivos JavaScript e CSS • Comprimir imagens • Compilar Sass e LESS • Atribuir permissões em arquivos/pastas • Produzir arquivos estáticos, como HTMLs • Agendamentos na CRON • php.ini local x php.ini do servidor x php.ini do CLI • Transformar código de ECMA6 para ECMA5
    53. 53. Padronização de código: PSR http://www.php-fig.org
    54. 54. Abordagem rudimentar…
    55. 55. Zero Downtime Deployment (implantação atômica) Fonte: https://leanpub.com/deploying-php-applications
    56. 56. Migrations: Phinx https://phinx.org
    57. 57. Quem nunca…
    58. 58. Foto:https://flic.kr/p/6mNHcj Simples, previsível e
    59. 59. //Carrega o Gulp e seus plug-ins var gulp = require('gulp'); var jshint = require('gulp-jshint'); var sass = require('gulp-sass'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); var rename = require('gulp-rename'); //Analisa o código gulp.task('lint', function() { return gulp.src('src/js/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')); }); //Compila o Sass gulp.task('sass', function() { return gulp.src('scss/*.scss') .pipe(sass()) .pipe(gulp.dest('css')); }); //Concatena e minifica o JavaScript gulp.task('scripts', function() { return gulp.src('src/js/*.js') .pipe(concat('src/js/all.js')) .pipe(gulp.dest('dist')) .pipe(rename('src/js/all.min.js')) .pipe(uglify()) .pipe(gulp.dest('dist')); }); // Default Task gulp.task('default', ['lint', 'sass', 'scripts']); Grunt e Gulp
    60. 60. Lock-in • Banco de dados específico daquela hospedagem • Mecanismo de filas exclusivo • Replica em diferentes data-centers (worldwide) e troca automática de DNS • S3 criptografado, gera token para acesso ao documento que usa UMA vez e expira Foto: https://flic.kr/p/bAUx5j
    61. 61. • DevOps é habilidade • Trata-se de gestão de configuração • Outsourced é impraticável • Focado em sistemas modernos • DevOps é ideologia • Trata-se de comunicação • Outsourced é totalmente viável • Para qualquer tipo de sistema
    62. 62. Fonte:http://theimitationgamemovie.com Setup
    63. 63. E-mail: arijunior@gmail.com Twitter: @stopassola Skype: stopassola LinkedIn: http://pt.linkedin.com/in/stopassola Facebook: http://www.facebook.com/arijunior Sites: http://www.perito.inf.br http://www.certificamp.com http://www.rumoacertificacaophp.com Contatos
    64. 64. Obrigado! [ tem brinde ]

    ×