Descomplicando o CI/CD
com Jenkins, Docker Swarm e Github
Marcelo de Souza Vieira
Quando a gente lê sobre CI/CD
“CI/CD é um método para entregar aplicações com frequência aos clientes. Para isso,
é aplicada a automação nas etapas do desenvolvimento de aplicações. Os principais
conceitos atribuídos a esse método são integração, entrega e implantação contínuas.
Com o CI/CD, é possível solucionar os problemas que a integração de novos códigos
pode causar para as equipes de operações e desenvolvimento (o famoso ‘inferno de
integração’).
Especificamente, o CI/CD aplica monitoramento e automação contínuos a todo o
ciclo de vida das aplicações, incluindo as etapas de teste e integração, além da
entrega e implantação. Juntas, essas práticas relacionadas são muitas vezes
chamadas de ‘pipeline de CI/CD’ e compatíveis com o trabalho conjunto das equipes
de operações e desenvolvimento com métodos ágeis.”
Quando vamos aplicar pela primeira
vez
Simples assim?
● Projetos longos;
● Ficamos 1 mês fazendo uma atividade;
● Muitas vezes nem ambiente de homologação existe;
Daí lembro de algumas características dos projetos que participei.
Eu fico pensando.
“Vai dar uma merda se for pra produção
direto.”
Em resumo
● Ter um processo de desenvolvimento eficiente;
● Ter um time com maturidade no processo de C/CD;
● Ter uma infraestrutura com monitoramento;
● etc...
Não é bem assim. Implantar um CI/CD eficiente, com todos os seus
benefícios, depende de muitos detalhes;
Então vamos descomplicar.
O que é o CI/CD?
CI/CD é um método para entregar aplicações com frequência aos clientes.
● Monitoramento;
● Automatização continua a todo o ciclo de vida das aplicações;
● Entrega e implantações;
Todo time de desenvolvimento, toda empresa, deseja desenvolver o
melhor software, que no final, alcance uma alta qualidade técnica e que
entregue maior valor às reais necessidades do negócio.
Para atingir esses objetivos, não adianta chegar no final e testar toda a
aplicação, para saber se está tudo funcionando.
A chave é ter um feedback curto, tanto na qualidade do código quanto na
validação do negócio.
Quanto mais rápido for para desenvolver algo, fazer o code review, colocar
em um ambiente de teste para ser validado pelo dono do produto e ir
para a produção, melhor vai ser o resultado final.
Mas o que é um CI (Continuos Integration)
Então o CI é uma prática de desenvolvimento que tem o
objetivo de fazer merges constantes com a branch principal,
fazer automatização dos testes e code review. Essas práticas
fazem com que as interações sejam curtas, evitando os
métodos antigos, que ficávamos semanas ou meses
trabalhando em uma atividade, sem atualizar o código e
quando iríamos fazer os merges, dava conflito em tudo. A
integração contínua coloca uma grande ênfase na
automatização de testes para verificar se o código não está
corrompido sempre que novos commits são integrados.
O que é um CD (Continuous Delivery)
É a automatização do processo de liberação para seu cliente.
Com o CD você automatiza seu processo de liberação decidindo
liberar diariamente, semanalmente, mensalmente,
dependendo da maturidade do seu time.
O que é um CD (Continuous Deployment)
É o continuous delivery com um detalhe. Não tem interação
humana.
Estou desenvolvendo um produto
complexo ou um MVP para minha
startup, porque o CI/CD é
importante?
“Se sua empresa puder implantar coisas
novas na produção centenas de vezes
por dia, poderá se recuperar de erros
quase instantaneamente. Se você puder
se recuperar de erros quase
instantaneamente, poderá assumir mais
riscos. Se você poder assumir mais
riscos, poderá fazer mais experimentos.
Os resultados dos experimentos podem
transformar na sua próxima vantagem
competitiva.”

Descomplicando CI/CD com Jenkins, Docker Swarm e Github

  • 1.
    Descomplicando o CI/CD comJenkins, Docker Swarm e Github Marcelo de Souza Vieira
  • 2.
    Quando a gentelê sobre CI/CD “CI/CD é um método para entregar aplicações com frequência aos clientes. Para isso, é aplicada a automação nas etapas do desenvolvimento de aplicações. Os principais conceitos atribuídos a esse método são integração, entrega e implantação contínuas. Com o CI/CD, é possível solucionar os problemas que a integração de novos códigos pode causar para as equipes de operações e desenvolvimento (o famoso ‘inferno de integração’). Especificamente, o CI/CD aplica monitoramento e automação contínuos a todo o ciclo de vida das aplicações, incluindo as etapas de teste e integração, além da entrega e implantação. Juntas, essas práticas relacionadas são muitas vezes chamadas de ‘pipeline de CI/CD’ e compatíveis com o trabalho conjunto das equipes de operações e desenvolvimento com métodos ágeis.”
  • 3.
    Quando vamos aplicarpela primeira vez
  • 4.
    Simples assim? ● Projetoslongos; ● Ficamos 1 mês fazendo uma atividade; ● Muitas vezes nem ambiente de homologação existe; Daí lembro de algumas características dos projetos que participei. Eu fico pensando. “Vai dar uma merda se for pra produção direto.”
  • 5.
    Em resumo ● Terum processo de desenvolvimento eficiente; ● Ter um time com maturidade no processo de C/CD; ● Ter uma infraestrutura com monitoramento; ● etc... Não é bem assim. Implantar um CI/CD eficiente, com todos os seus benefícios, depende de muitos detalhes;
  • 6.
    Então vamos descomplicar. Oque é o CI/CD? CI/CD é um método para entregar aplicações com frequência aos clientes. ● Monitoramento; ● Automatização continua a todo o ciclo de vida das aplicações; ● Entrega e implantações;
  • 7.
    Todo time dedesenvolvimento, toda empresa, deseja desenvolver o melhor software, que no final, alcance uma alta qualidade técnica e que entregue maior valor às reais necessidades do negócio. Para atingir esses objetivos, não adianta chegar no final e testar toda a aplicação, para saber se está tudo funcionando.
  • 8.
    A chave éter um feedback curto, tanto na qualidade do código quanto na validação do negócio. Quanto mais rápido for para desenvolver algo, fazer o code review, colocar em um ambiente de teste para ser validado pelo dono do produto e ir para a produção, melhor vai ser o resultado final.
  • 9.
    Mas o queé um CI (Continuos Integration) Então o CI é uma prática de desenvolvimento que tem o objetivo de fazer merges constantes com a branch principal, fazer automatização dos testes e code review. Essas práticas fazem com que as interações sejam curtas, evitando os métodos antigos, que ficávamos semanas ou meses trabalhando em uma atividade, sem atualizar o código e quando iríamos fazer os merges, dava conflito em tudo. A integração contínua coloca uma grande ênfase na automatização de testes para verificar se o código não está corrompido sempre que novos commits são integrados.
  • 11.
    O que éum CD (Continuous Delivery) É a automatização do processo de liberação para seu cliente. Com o CD você automatiza seu processo de liberação decidindo liberar diariamente, semanalmente, mensalmente, dependendo da maturidade do seu time.
  • 12.
    O que éum CD (Continuous Deployment) É o continuous delivery com um detalhe. Não tem interação humana.
  • 14.
    Estou desenvolvendo umproduto complexo ou um MVP para minha startup, porque o CI/CD é importante?
  • 15.
    “Se sua empresapuder implantar coisas novas na produção centenas de vezes por dia, poderá se recuperar de erros quase instantaneamente. Se você puder se recuperar de erros quase instantaneamente, poderá assumir mais riscos. Se você poder assumir mais riscos, poderá fazer mais experimentos. Os resultados dos experimentos podem transformar na sua próxima vantagem competitiva.”