Continuous Integration
Existem diversas opções para realizar a integração continua atualmente. Dentre elas, uma das mais usadas é o Jenkins.
Por que?
O ciclo de integração continua garante que um projeto esteja seguindo os padrões de qualidade definidos. Ele previne que deixemos um código quebrado passe para a produção.

Continuous Delivery
Em conjunto com a integração continua, que garante um código executável e dentro de alguns requisitos, a entrega contínua permite ao desenvolvedor escolher um ambiente para executar o projeto (de forma automática exceto em ambiente de produção).

Com CI/CD podemos trabalhar em ciclos curtos, garantindo que tenhamos uma versão pronta para publicação a qualquer momento. Tornando assim o ciclo de desenvolvimento de um projeto mais rápido.
Quando utilizar
CD ajuda a fazer a entrega de aplicações rapidamente, porém instaurar esse processo a um projeto consome um tempo inicial maior. Por esse motivo, em projetos publicados em períodos longos de tempo (e.g. 6 meses) deve ser avaliada a utilização ou não de CD. Porém, em aplicações cujas publicações ocorrem em prazos curtos (e.g. 15 em 15 dias) o processo CD trará apenas benefícios ao projeto.
É interessante ir um passo além em ambientes não críticos, como testes ou staging. Nesses casos o continuous deployment (também CD) tira mais um passo do processo de publicação de um projeto. (Esse processo pode também ser feitos em ambientes críticos - como em produção - mas o processo de integração continua e entrega continua devem estar bem maduros para garantir que não ocorram erros.)
Problemas
Ao tentar implementar o processo de CD em aplicações legado, podemos encontrar muitos problemas. Isso ocorre pois em projetos de CD algumas definições precisam ser feitas no início do projeto, e em sistemas legado onde isso não foi feito teremos um trabalho extra para realizar a automação.
Continuous Code Quality
Este processo de qualidade de código continua, comumente implementado pela ferramenta SonarQube (existem outras ferramentas como codacy e codebeat), garante que o código de um projeto esteja de acordo com alguns requisitos previamente definidos.