Integração contínua vs. entrega contínua vs. implementação contínua

We will see in this article what these three practices mean and what's required to use them.

Sten Pittet Sten Pittet

CI e CD são dois acrônimos que costumam ser mencionados quando as pessoas falam sobre práticas de desenvolvimento modernas. CI é direta e significa integração contínua, uma prática focada em facilitar a preparação de uma versão. Porém, CD pode significar tanto entrega contínua quanto implementação contínua e, embora ambas as práticas tenham muito em comum, elas também têm uma diferença significativa que pode ter consequências críticas para um negócio.

We will see in this article what these three practices mean and what's required to use them.

Quais são as diferenças entre integração contínua, entrega contínua e implementação contínua?

Integração contínua

Desenvolvedores praticando integração contínua mesclam suas alterações de volta ao branch principal assim que possível. As alterações do desenvolvedor são validadas criando um build e executando testes automatizados com relação ao build. Ao fazer isso, você evita o inferno de integração que normalmente acontece quando as pessoas esperam o dia do lançamento para mesclar as alterações no branch de lançamento.

Continuous integration puts a great emphasis on testing automation to check that the application is not broken whenever new commits are integrated into the main branch.

Serviço constante

Continuous delivery is an extension of continuous integration to make sure that you can release new changes to your customers quickly in a sustainable way. This means that on top of having automated your testing, you also have automated your release process and you can deploy your application at any point of time by clicking on a button.

In theory, with continuous delivery, you can decide to release daily, weekly, fortnightly, or whatever suits your business requirements. However, if you truly want to get the benefits of continuous delivery, you should deploy to production as early as possible to make sure that you release small batches that are easy to troubleshoot in case of a problem.

Implementação contínua

Implementação contínua vai um passo além da entrega contínua. Com essa prática, toda alteração que passa em todos os estágios do seu pipeline de produção é lançada para os clientes. Não há intervenção humana, e apenas um teste com falha impedirá uma nova alteração de ser implementada na produção.

Continuous deployment is an excellent way to accelerate the feedback loop with your customers and take pressure off the team as there isn't a Release Day anymore. Developers can focus on building software, and they see their work go live minutes after they've finished working on it.

How the practices relate to each other

Para simplificar, integração contínua faz parte de entrega contínua e de implementação contínua. E implementação contínua é como entrega contínua, exceto que os lançamentos acontecem de modo automático.

What are the differences between continuous integration, continuous delivery, and continuous deployment? | Atlassian CI/CD

What are the benefits of each practice?

We've explained the difference between continuous integration, continuous delivery, and continuous deployments but we haven't yet looked into the reasons why you would adopt them. There's an obvious cost to implementing each practice, but it's largely outweighed by their benefits.

Prática Do que você precisa (custo) O que você ganha

Integração contínua

  • Your team will need to write automated tests for each new feature, improvement or bug fix.
  • Você precisa de um servidor de integração contínua que possa monitorar o repositório principal e executar testes automaticamente para cada nova confirmação enviada por push.
  • Os desenvolvedores precisam mesclar suas alterações com a maior frequência possível, pelo menos uma vez por dia.
  • Less bugs get shipped to production as regressions are captured early by the automated tests.
  • Building the release is easy as all integration issues have been solved early.
  • Menos mudança de contexto, uma vez que os desenvolvedores são alertados assim que causam uma falha ao build e podem trabalhar em corrigi-lo antes de passarem para outra tarefa.
  • Testing costs are reduced drastically – your CI server can run hundreds of tests in the matter of seconds.
  • Your QA team spend less time testing and can focus on significant improvements to the quality culture.
Serviço constante
  • You need a strong foundation in continuous integration and your test suite needs to cover enough of your codebase.
  • Deployments need to be automated. The trigger is still manual but once a deployment is started there shouldn't be a need for human intervention.
  • Your team will most likely need to embrace feature flags so that incomplete features do not affect customers in production.
  • The complexity of deploying software has been taken away. Your team doesn't have to spend days preparing for a release anymore.
  • Você pode lançar com mais frequência, acelerando o ciclo de feedback com seus clientes.
  • There is much less pressure on decisions for small changes, hence encouraging iterating faster.
Implementação contínua
  • Sua cultura de teste precisa estar em seu melhor. A qualidade do seu pacote de teste determinará a qualidade das suas versões.
  • Seu processo de documentação precisará acompanhar o ritmo das implementações.
  • Feature flags become an inherent part of the process of releasing significant changes to make sure you can coordinate with other departments (Support, Marketing, PR...).
  • You can develop faster as there's no need to pause development for releases. Deployments pipelines are triggered automatically for every change.
  • Releases are less risky and easier to fix in case of problem as you deploy small batches of changes.
  • Os clientes veem um fluxo contínuo de melhorias e aumentos de qualidade todos os dias, em vez de a cada mês, trimestre ou ano.

Integração contínua

Do que você precisa (custo)

  • Your team will need to write automated tests for each new feature, improvement or bug fix.
  • Você precisa de um servidor de integração contínua que possa monitorar o repositório principal e executar testes automaticamente para cada nova confirmação enviada por push.
  • Os desenvolvedores precisam mesclar suas alterações com a maior frequência possível, pelo menos uma vez por dia.

O que você ganha

  • Less bugs get shipped to production as regressions are captured early by the automated tests.
  • Building the release is easy as all integration issues have been solved early.
  • Menos mudança de contexto, uma vez que os desenvolvedores são alertados assim que causam uma falha ao build e podem trabalhar em corrigi-lo antes de passarem para outra tarefa.
  • Testing costs are reduced drastically – your CI server can run hundreds of tests in the matter of seconds.
  • Your QA team spend less time testing and can focus on significant improvements to the quality culture.

Serviço constante

Do que você precisa (custo)

  • You need a strong foundation in continuous integration and your test suite needs to cover enough of your codebase.
  • Deployments need to be automated. The trigger is still manual but once a deployment is started there shouldn't be a need for human intervention.
  • Your team will most likely need to embrace feature flags so that incomplete features do not affect customers in production.

O que você ganha

  • The complexity of deploying software has been taken away. Your team doesn't have to spend days preparing for a release anymore.
  • Você pode lançar com mais frequência, acelerando o ciclo de feedback com seus clientes.
  • There is much less pressure on decisions for small changes, hence encouraging iterating faster.

Implementação contínua

Do que você precisa (custo)

  • Sua cultura de teste precisa estar em seu melhor. A qualidade do seu pacote de teste determinará a qualidade das suas versões.
  • Seu processo de documentação precisará acompanhar o ritmo das implementações.
  • Feature flags become an inherent part of the process of releasing significant changes to make sure you can coordinate with other departments (Support, Marketing, PR...).

O que você ganha

  • You can develop faster as there's no need to pause development for releases. Deployments pipelines are triggered automatically for every change.
  • Releases are less risky and easier to fix in case of problem as you deploy small batches of changes.
  • Os clientes veem um fluxo contínuo de melhorias e aumentos de qualidade todos os dias, em vez de a cada mês, trimestre ou ano.

One of the traditional cost associated with continuous integration is the installation and maintenance of a CI server. But you can reduce significantly the cost of adopting these practices by using a cloud service like Bitbucket Pipelines which adds automation to every Bitbucket repository. By simply adding a configuration file at the root of your repository you will be able to create a continuous deployment pipeline that gets executed for every new change pushed to the main branch.

A continuous deployment pipeline with Bitbucket | Atlassian CI/CD

Going from continuous integration to continuous deployment

If you're just getting started on a new project with no users yet, it might be easy for you to deploy every commit to production. You could even start by automating your deployments and release your alpha version to a production with no customers. Then you would ramp up your testing culture and make sure that you increase code coverage as you build your application. By the time you're ready to onboard users, you will have a great continuous deployment process where all new changes are tested before being automatically released to production.

But if you already have an existing application with customers you should slow things down and start with continuous integration and continuous delivery. Start by implementing basic unit tests that get executed automatically, no need to focus yet on having complex end-to-end tests running. Instead, you should try automating your deployments as soon as possible and get a to a stage where deployments to your staging environments are done automatically. The reason is that by having automatic deployments, you will be able to focus your energy on improving your tests rather than having periodically to stop things to coordinate a release.

Once you can start releasing software on a daily basis, you can look into continuous deployment, but make sure that the rest of your organization is ready as well. Documentation, support, marketing. These functions will need to adapt to the new cadence of releases, and it is important that they do not miss on significant changes that can impact customers.

Read our guides

You can find some guides that will go more in depth to help you getting started with these practices.