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.
2. 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
3. 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.
4. 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.
7. 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
8. 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
9. 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
11. É 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
14. 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
15. 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
16. 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
17. 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
18. 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
19. 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.
20. 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.
21. 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.
23. 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.
24. 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.
25. 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.
26. 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.
27. Infraestrutura ágil
VENUSPipelines
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.
30. 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”.
31. 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
33. 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.
44. 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/
45. 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
46. 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/
47. 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
48. ● 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
49. 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
96. 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
97. 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
98. 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
99. 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
100. 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
102. 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
103. 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
104. 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