"Best" will really depend on your team's needs. For an all-in-one solution, Azure DevOps is pretty good especially if you're in the Microsoft / Azure space. Personally, I've always preferred TeamCity + Octopus Deploy (disclosure, I work for Octopus Deploy but I've used the product since 2013). But with the lack of a cloud hosted TeamCity, I'd probably opt for Azure DevOps, CircleCI, or some other hosted CI service. Maybe BitBucket Pipelines if my team were using Atlassian tools heavily.
I think most CI/CD services are still quite immature. Whichever service you end up choosing depends on what compromises you are willing to accept.
For me, I usually end up with either:
GitHub Actions, if the project is open-source, public, and speed/build times are not prioritized issues.
CircleCI, for anything else, or when I suspect that SSH access to the build servers will be beneficial.
The only thing I'd recommend, regardless of use case, is to stay clear from Jenkins and TeamCity. Both these services have more drawbacks than upsides and are a pain in the butt to work with due to unnecessarily complicated workflows and/or maintenance.
I've used GitHub actions, circle ci to some extent on my side projects but I've mostly used Azure DevOps and was really happy with it. Lots of integrations, very useful online assistants to create build definitions. I also have to say I've used in my working environment but there really wasn't anything I was unhappy about, it worked really well.
I'm going to be a contrarian and say that I haven't any experience with Gitlabs or GitHub integrations, but Azure DevOps is a really capable platform. We're using it to run some really complex PowerShell/Terraform/C# tooling that populates entire AWS accounts from scratch, or updates them, and "it just works™" - really impressed and totally sold on the Azure DevOps environment (From someone who hated TFS, this is quite an admission)
I've worked with many different services and I've learned that when they offer too much ui, then they become dangerous for the team. In my opinion, every project should have defined entry points for e.g. build, test, publish and all the rest are just a matter of driving them with any tool of preference. Then you also have portability from tool to tool.
I've seen a team struggling so bad with gitlabs to a point that I hated it because it offers this culture of just clicking sound that bad developers embrace. If of containing their complicated actions in the repo itself, they choose to implement complex paths outside because why should they code it? When the repo changes though, then the whole system breaks apart. If you are spending more time troubleshooting your ci, then you are doing something wrong.
Any tool should have a very clear change management process embedded in like yaml. I love Travis and appveyor because they allow the configuration and execution to be part of the branch with a very simple and readable format.
GitHub actions is ridiculously simple to set up and works really well and of course is backed by Microsoft. I would be terrified right now if I were CircleCI or TravisCI.
I have a been using codefresh professionally for the past year. It's extremely feature rich and very powerful for docker-based workflows.
In general Gitlab is the most feature rich and most flexible currently, so I'd label it as the best.
However usually the best choice for a given project is what integrates the easiest with other services. So for example if your deploying on GCP, Cloud Build is the best simply because you have to work less to integrate it with the rest of GCP. It does lack more features then gitlab, but most of the time CI/CD just needs to be easy to use since its more of a "get it working and forget" type of utility rather then one that requires more and more capabilities.
Polyglot, autodidact. OSS author and contributor. Addicted to writing code, seeking my next 'fix'. Love communicating with an audience whose eyes don't glaze over when I get to the 'good parts'.
Glitlab is really great. I'm on their online free tier and still use CI/CD with a remote runner (it runs on a external Linode VPS). No costs or limitations so far.
I have no big or slow builds but I am able to run pipelines and deploy Docker images on my VPS.
Latest comments (15)
"Best" will really depend on your team's needs. For an all-in-one solution, Azure DevOps is pretty good especially if you're in the Microsoft / Azure space. Personally, I've always preferred TeamCity + Octopus Deploy (disclosure, I work for Octopus Deploy but I've used the product since 2013). But with the lack of a cloud hosted TeamCity, I'd probably opt for Azure DevOps, CircleCI, or some other hosted CI service. Maybe BitBucket Pipelines if my team were using Atlassian tools heavily.
I think most CI/CD services are still quite immature. Whichever service you end up choosing depends on what compromises you are willing to accept.
For me, I usually end up with either:
The only thing I'd recommend, regardless of use case, is to stay clear from Jenkins and TeamCity. Both these services have more drawbacks than upsides and are a pain in the butt to work with due to unnecessarily complicated workflows and/or maintenance.
I've used GitHub actions, circle ci to some extent on my side projects but I've mostly used Azure DevOps and was really happy with it. Lots of integrations, very useful online assistants to create build definitions. I also have to say I've used in my working environment but there really wasn't anything I was unhappy about, it worked really well.
I'm going to be a contrarian and say that I haven't any experience with Gitlabs or GitHub integrations, but Azure DevOps is a really capable platform. We're using it to run some really complex PowerShell/Terraform/C# tooling that populates entire AWS accounts from scratch, or updates them, and "it just works™" - really impressed and totally sold on the Azure DevOps environment (From someone who hated TFS, this is quite an admission)
I'll second this. Repos, Build/Release Pipelines, Kanban boards, all in one place. It works well and is constantly being improved by Microsoft.
I've worked with many different services and I've learned that when they offer too much ui, then they become dangerous for the team. In my opinion, every project should have defined entry points for e.g. build, test, publish and all the rest are just a matter of driving them with any tool of preference. Then you also have portability from tool to tool.
I've seen a team struggling so bad with gitlabs to a point that I hated it because it offers this culture of just clicking sound that bad developers embrace. If of containing their complicated actions in the repo itself, they choose to implement complex paths outside because why should they code it? When the repo changes though, then the whole system breaks apart. If you are spending more time troubleshooting your ci, then you are doing something wrong.
Any tool should have a very clear change management process embedded in like yaml. I love Travis and appveyor because they allow the configuration and execution to be part of the branch with a very simple and readable format.
I ❤️ gitlab right from the beginning , I pulled all my company employees to use gitlab ci/cd. Currently every project is implementing this.
GitHub actions is ridiculously simple to set up and works really well and of course is backed by Microsoft. I would be terrified right now if I were CircleCI or TravisCI.
I have a been using codefresh professionally for the past year. It's extremely feature rich and very powerful for docker-based workflows.
In general Gitlab is the most feature rich and most flexible currently, so I'd label it as the best.
However usually the best choice for a given project is what integrates the easiest with other services. So for example if your deploying on GCP, Cloud Build is the best simply because you have to work less to integrate it with the rest of GCP. It does lack more features then gitlab, but most of the time CI/CD just needs to be easy to use since its more of a "get it working and forget" type of utility rather then one that requires more and more capabilities.
GitHub Actions and GitLab CI are both fantastic
I have used most of the other popular CI platforms in the past. Nothing works better than a CI that integrates directly with the repo.
Glitlab is really great. I'm on their online free tier and still use CI/CD with a remote runner (it runs on a external Linode VPS). No costs or limitations so far.
I have no big or slow builds but I am able to run pipelines and deploy Docker images on my VPS.