Previously, our team used Jenkins. However, since it's a shared deployment resource we don't have admin access. We tried GoCD as it's open source and we really like. We set up our deployment pipeline to run whenever codes are merged to master, run the unit test and revert back if it doesn't pass. Once it's deployed to the staging environment, we can simply do 1-click to deploy the appropriate version to production. We use this to deploy to an on-prem server and also AWS. Some deployment pipelines use custom Powershell script for.Net application, some others use Bash script to execute the docker push and cloud formation template to build elastic beanstalk.
Upsource is the best review tool we've found but it still has some flaws. Notably, it makes reviewing small and quick changes less convenient than they need to be, and diff viewing (especially collaboratively) can be tedious.
It does handle larger, iterative reviews well. Especially when using a feature branch, Upsource will track that branch and automatically add all commits to the review. You can then review the branch as a whole, or look at a subset of diffs.
Pipeline-as-Code works really well. All our pipelines are defined in yml files, which are checked into SCM.
The ability to link multiple pipelines together is really cool. Later pipelines can declare a dependency to pick up the build artifacts of earlier ones.
Agents definition is really great. We can define multiple different kinds of environments to best suit our diverse build systems.
Creating and closing reviews isn't as quick as it could be. You must create a review, assign reviewers, approve and close. I wish there would be a quick review-approve-close for a commit where the change is simple and doesn't require multiple review iterations.
Web based interface can be clunky, especially when looking at big diffs side-by-side
JetBrains IDE integration is somehow less convenient than going using it in browser.
GoCD is easier to setup, but harder to customize at runtime. There's no way to trigger a pipeline with custom parameters.
Jenkins is more flexible at runtime. You can define multiple user-provided parameters so when user needs to trigger a build, there's a form for him/her to input the parameters.
Compared to the other tools we evaluated, Upsource was the only tool that allowed distinct reviews without needing explicit pull requests while still being able to go in-depth when required. The diff viewer is serviceable and better than the alternatives, as well, especially the side-by-side viewer.
Settings.xml need to be backed up periodically. It contains all the settings for your pipelines! We accidentally deleted before and we have to restore and re-create several missing pipelines
More straight forward use of API and allows filtering e.g., pull all pipelines triggered after this date