Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Continuous DeploymentContinuous Deploymentflexível com Assemblyflexível com AssemblyLines for DevOpsLines for DevOps
#QConSP
A pipeline de pipelines
IntroduçãoIntrodução
AgendaAgenda
1. A Evolução das Pipelines2. Assembly Lines for DevOps3. Demonstração
Acompanhe estaAcompanhe estaapresentaçãoapresentação
https://slides.com/eguimaraess/qconsp
Sobre MimSobre MimEric GuimarãesFormação em Banco deDadosLinux há 13 anosInfraestrutura há 9 anosNa Indra há 6 anosDevOps há 3 anos
Vamos começar...Vamos começar...
O Que SãoO Que São Assembly Lines?Assembly Lines?
DefiniçãoDefiniçãoLinha de montagem
“ Pode ser entendida como uma forma de
produção em série; ocorre quando um
estabelecimento industrial com o auxílio de
máquinas transformam as matérias-primas e
produtos semi-acabados em produtos
acabados destinados ao consumo. (Wikipédia)
Em DevOps...Em DevOps...
DevOps Assembly LinesAssembly Lines for DevOps
“ Pipeline de Pipelines
A Evolução dasA Evolução dasPipelinesPipelines
Senta que lá vem história...
Indústria AutomobilísticaIndústria Automobilística
IndústriaIndústria
ManualPartly AutomatedAssembly Lines
PipelinesPipelines
Sem CICI/CD com etapas manuaisAssembly Lines for DevOps
CI SimplesCI Simples
Build - Test - Push
Exemplo (Gitlab CI)Exemplo (Gitlab CI)---stages: - CI ci: stage: CI image: docker:1.11 services: - docker:dind script: # Build - docker build -t registry.gitlab.com/fewbits/pipeline-samples . # Test - docker run --rm registry.gitlab.com/fewbits/pipeline-samples npm test # Push - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY - docker push registry.gitlab.com/fewbits/pipeline-samples
123456789
1011121314151617
CI com EstágiosCI com Estágios
TestBuild Push
Exemplo (Gitlab CI)Exemplo (Gitlab CI)---image: docker:1.11 stages: - Build - Test - Push docker:build: stage: Build services: - docker:dind script: - docker build -t registry.gitlab.com/fewbits/pipeline-samples:temp . - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY - docker push registry.gitlab.com/fewbits/pipeline-samples:temp npm:test: stage: Test services: - docker:dind script: - docker run --rm registry.gitlab.com/fewbits/pipeline-samples:temp npm te docker:push:
stage: Push
123456789
1011121314151617181920212223242526
CI com Estágios ParalelosCI com Estágios Paralelos
Test
Build Push
Exemplo (Gitlab CI)Exemplo (Gitlab CI)---image: docker:1.11 stages: - Build - Test - Push Docker Build: stage: Build services: - docker:dind script: - docker build -t registry.gitlab.com/fewbits/pipeline-samples:temp . - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY - docker push registry.gitlab.com/fewbits/pipeline-samples:temp Image 1: stage: Test services: - docker:dind script: - docker run --rm registry.gitlab.com/fewbits/pipeline-samples:temp npm te Image 2:
stage: Test
123456789
1011121314151617181920212223242526
CD com DecisãoCD com Decisão
TestBuild
Push Deploy
Something else
Exemplo (Gitlab CI)Exemplo (Gitlab CI)---stages: - Build - Test - Escalate - Push - Deploy Docker Build: stage: Build image: docker:1.11 services: - docker:dind script: - docker build -t registry.gitlab.com/fewbits/pipeline-samples:temp . - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY - docker push registry.gitlab.com/fewbits/pipeline-samples:temp Test: stage: Test image: docker:1.11 script: - echo "Flipping a coin - If 0 => OK / If 1 => Error" - coin=`shuf -n1 -i0-1` - echo "Coin is => $coin"
- exit $coin
123456789
1011121314151617181920212223242526
CenáriosCenáriosComplexosComplexos
ProblemasProblemas
ProblemasProblemasA equipe de Operações altera um
script de IaC e quer reconstruir os
ambientes
ProblemasProblemasA equipe de Operações altera um
script de IaC e quer reconstruir os
ambientes
A equipe de Testes, sabendo
disso, quer um novo deploy para
testar o ambiente
ProblemasProblemasA equipe de Operações altera um
script de IaC e quer reconstruir os
ambientes
A equipe de Testes, sabendo
disso, quer um novo deploy para
testar o ambiente
A equipe de Segurança criou uma
nova imagem base para a
empresa, e agora todos têm que
utilizá-la
ProblemasProblemasA equipe de Operações altera um
script de IaC e quer reconstruir os
ambientes
A equipe de Testes, sabendo
disso, quer um novo deploy para
testar o ambiente
A equipe de Segurança criou uma
nova imagem base para a
empresa, e agora todos têm que
utilizá-la
DúvidasDúvidasTudo no mesmo repositório?
Mesma pipeline?
Quantas pipelines?
Quem faz o quê?
Como as equipes interagem?
Como ter a visão do "todo" e não
ficar perdido?
Percebendo os problemas...Percebendo os problemas...
Tentando resolver...Tentando resolver...
Assembly LinesAssembly Lines for DevOpsfor DevOps
CaracterísticasCaracterísticas
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)Conecta diferentes Ilhas de Automação
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)Conecta diferentes Ilhas de AutomaçãoCada parte da Assembly Line pode ser mantida poruma equipe
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)Conecta diferentes Ilhas de AutomaçãoCada parte da Assembly Line pode ser mantida poruma equipeOs objetos compartilham informações e estado
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)Conecta diferentes Ilhas de AutomaçãoCada parte da Assembly Line pode ser mantida poruma equipeOs objetos compartilham informações e estadoOrientado a eventos
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)Conecta diferentes Ilhas de AutomaçãoCada parte da Assembly Line pode ser mantida poruma equipeOs objetos compartilham informações e estadoOrientado a eventosVisualização unificada
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)Conecta diferentes Ilhas de AutomaçãoCada parte da Assembly Line pode ser mantida poruma equipeOs objetos compartilham informações e estadoOrientado a eventosVisualização unificadaTudo "As Code"
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)Conecta diferentes Ilhas de AutomaçãoCada parte da Assembly Line pode ser mantida poruma equipeOs objetos compartilham informações e estadoOrientado a eventosVisualização unificadaTudo "As Code"Filosofia Unix
CaracterísticasCaracterísticas
Workflow (pipeline de pipelines)Conecta diferentes Ilhas de AutomaçãoCada parte da Assembly Line pode ser mantida poruma equipeOs objetos compartilham informações e estadoOrientado a eventosVisualização unificadaTudo "As Code"Filosofia UnixPipelines para todos
PipelinesPipelines
Ponto-a-pontoTem 1 dono
Assembly LinesAssembly Lines
WorkflowMúltiplos donos
ObjetivoObjetivoBuild Staging Production
Continuous Delivery
Continuous Integration
Continuous Deployment
ObjetivoObjetivo
O quê: Continuous Deployment
Build Staging Production
Continuous Delivery
Continuous Integration
Continuous Deployment
ObjetivoObjetivo
O quê: Continuous Deployment
Como: Unindo e orquestrando diferentes Ilhas de Automação
Build Staging Production
Continuous Delivery
Continuous Integration
Continuous Deployment
ResourcesResources JobsJobs
ResourcesResourcesCredenciaisIntegraçõesRepositóriosClustersImagensParâmetrosEtc...
JobsJobs
ResourcesResourcesCredenciaisIntegraçõesRepositóriosClustersImagensParâmetrosEtc...
JobsJobsCriar servidorFazer buildAtualizar DNSDeletar arquivosFazer testesAtualizar pacotesEtc...
ExemploExemplo
Adoçar
Cortar Limões
Espremer Limões
Limonada!
ExemploExemplo
1. O job Adoçar precisa dos resources
Suco do Limão e Açúcar, e entrega
Limonada
Adoçar
Cortar Limões
Espremer Limões
Suco do Limão
Açúcar
Limonada
Limonada!
ExemploExemplo
1. O job Adoçar precisa dos resources
Suco do Limão e Açúcar, e entrega
Limonada
2. O job Cortar Limões precisa do
resource Limão, e entrega Limão
Cortado
Adoçar
Cortar Limões
Espremer Limões
Suco do Limão
Açúcar
Limão
Limonada
Limão Cortado
Limonada!
ExemploExemplo
1. O job Adoçar precisa dos resources
Suco do Limão e Açúcar, e entrega
Limonada
2. O job Cortar Limões precisa do
resource Limão, e entrega Limão
Cortado
3. O job Espremer Limões precisa dos
resources Limão Cortado e
Espremedor, e entrega Suco do
Limão
Adoçar
Cortar Limões
Espremer Limões
Suco do Limão
Açúcar
Limão
Limonada
Limão Cortado
Limão cortado
Espremedor
Suco do Limão
Limonada!
ExemploExemploO workflow (Assembly Line) é definido dinamicamente, de acordo com as necessidades de
cada objeto (resources e jobs).
AdoçarCortar Limões Espremer Limões
Açúcar
Limão LimonadaLimão Cortado
Espremedor
Suco do Limão
“ Os Resources e os Jobs podem estar espalhados entrediversos repositórios diferentes.
Funcionalidades NecessáriasFuncionalidades Necessárias
Funcionalidades NecessáriasFuncionalidades Necessárias
Integração entre ferramentasGatilhos automáticos ou manuaisRoles e permissõesFunções de auditoriaWorkflow as Code
Funcionalidades NecessáriasFuncionalidades Necessárias
Integração entre ferramentasGatilhos automáticos ou manuaisRoles e permissõesFunções de auditoriaWorkflow as CodeHabilidade de compartilhar estado e informaçõesentre pipelinesMétricas e visibilidade das Assembly Lines
DemonstraçãoDemonstração
CenárioCenário
ProjetosProjetos RepositóriosRepositóriosEquipesEquipes
CenárioCenário
ProjetosProjetos RepositóriosRepositóriosEquipesEquipes
Website
Web App
CenárioCenário
ProjetosProjetos RepositóriosRepositórios
Dev
Ops
Test
Sec
EquipesEquipes
Website
Web App
CenárioCenário
ProjetosProjetos RepositóriosRepositórios
Dev
Ops
Test
Sec
EquipesEquipes
Website
Web App
qconsp-dev-site
qconsp-dev-app
qconsp-test
qconsp-sec
qconsp-ops
FerramentasFerramentas
DemoDemoTime!Time!
RoteiroRoteiro
RoteiroRoteiro
1. Os Projetos
RoteiroRoteiro
1. Os Projetos2. Alterar Site
RoteiroRoteiro
1. Os Projetos2. Alterar Site3. Jobs e Resources
RoteiroRoteiro
1. Os Projetos2. Alterar Site3. Jobs e Resources4. Segurança!
RoteiroRoteiro
1. Os Projetos2. Alterar Site3. Jobs e Resources4. Segurança!5. Dependências
RoteiroRoteiro
1. Os Projetos2. Alterar Site3. Jobs e Resources4. Segurança!5. Dependências6. shippable.yml
RoteiroRoteiro
1. Os Projetos2. Alterar Site3. Jobs e Resources4. Segurança!5. Dependências6. shippable.yml7. Segurança!²
ConsideraçõesConsiderações
ConsideraçõesConsideraçõesSer organizado é importante
ConsideraçõesConsideraçõesSer organizado é importanteEste é o resultado de um estudo
ConsideraçõesConsideraçõesSer organizado é importanteEste é o resultado de um estudoSoluções OpenSource
ConsideraçõesConsideraçõesSer organizado é importanteEste é o resultado de um estudoSoluções OpenSourceAceitamos Feedbacks
ReferênciasReferências
Esta ApresentaçãoEsta Apresentação
ContatosContatos
DevOps Diagram GeneratorDevOps Diagram Generator
https://slides.com/eguimaraess/qconsp
linkedin.com/in/lowbit
https://xebialabs.com/devops-diagram-generator
RepositóriosRepositórios
https://gitlab.com/fewbits/pipeline-samples (diferentes branches)
Pipelines
Assembly Line
https://github.com/fewbits/qconsp-dev-sitehttps://github.com/fewbits/qconsp-dev-apphttps://github.com/fewbits/qconsp-testhttps://github.com/fewbits/qconsp-sechttps://github.com/fewbits/qconsp-ops
ArtigosArtigos
https://devops.com/differentiating-ci-pipelines-devops-assembly-lines/
https://www.shippable.com/devops-assembly-lines.html
https://github.com/vfarcic/vfarcic.github.io/blob/master/articles/devops-
assembly-line.md
https://hackernoon.com/8-devops-trends-to-be-aware-of-in-2019-
b4232ac8f351
Obrigado!Obrigado!