For further actions, you may consider blocking this person and/or reporting abuse
Read next
Automating Backup and Restore Processes with Python, Bash, and PowerShell
Oliver Bennet -
Why Use Nix package manager, Even on macOS?
Alexander Shagov -
Does anyone here use an under desk treadmill or elliptical while working?
Jess Lee -
JetBrains WebStorm and Rider Now Free for Non-Commercial Use
Saurabh Rai -
Top comments (15)
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.
It very much depends on what your exact needs are.
I'm personally rather fond of GitHub Actions though, because:
On the other hand, it does have it's issues:
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.
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.
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.
I've been really liking gitlab. They have also been doing a good job making it better, though there is pricing scales for so nice things (I'm on the lowest self hosted paid service).
I didn't like Travis, Jenkins is changing but it doesn't look good to me, though I still need to use it for workflows that don't have a repository. Github seems generally powerful but it looks like it will have the Plugin challenge of Jenkins.
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.
"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'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'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.