What’s the most efficient way to implement CI/CD in a microservices ?

As we transition from a monolithic architecture to a microservices-based approach one of the main challenges we're facing is implementing an efficient Continuous Integration/Continuous Deployment (CI/CD) pipeline. In a monolith, we had a single codebase that made it straightforward to manage automated builds, tests, and deployments. However, with multiple loosely coupled services, the complexity has increased significantly. Each microservice can be developed in a different language, might have its own database, and could depend on different third-party services.

Given this complexity, we're unsure whether to go for a single CI/CD pipeline that manages all microservices or to have individual pipelines for each service. The goal is to have rapid, reliable, and automated deployments without creating a bottleneck in the development process. What are the best practices for implementing CI/CD in a microservices architecture?