TeamCity, Github Actions, and Jenkins

What I like to use each one for

Tue, 02 May 2023

Recently I’ve been playing around with a couple of different softwares that would help build and test my projects. This is just a quick list of what I made that I like and dislike about each one of these products. Currently I primarily use TeamCity for almost all of my pipelines and GitHub Actions is for my web projects that I host on netlify. I mostly do this because the Netlify bot for GitHub is quite powerful



  • Easy to config. Out of all the self hosted options this one was the easiest. I was able to start up the server via docker, add an agent and start a complex (Unreal Engine) build all within about 2 or 3 hours
  • Almost everything you need will be built in. I run flutter(android/ios), Unreal Engine 5 and node builds without having to install a single external plugin
  • Easily shareable templates. It took me a few days to understand and build a simple Jenkins Pipeline Library. The build configurations in TeamCity are so fuild its incredible. On top of that, they are all stored inside of the server itself so you can configure and start a build without having to make updates via git like you typical would for Jenkins. You can also pull your config from the repo as well
  • Environment variable configuration is incredible. From the UI you can see all system, job and env variables available to an agent so you don’t have to guess your configuration


  • Not a fan of the build script syntax that TeamCity uses. Granted its optional so not a huge con. You can make your entire pipeline in the UI and if you want to, export it
  • Parallel jobs aren’t too intuitive. Jenkins can either let you start multiple agents via docker or install directly on a machine and configure how many jobs your agent can do at the same time. TeamCity needs a completely new build agent on each machine for the amount of parallel jobs you want to run on it. For example I have 3 agents, 1 Windows agent and 2 Mac agents that are on the same machine which will let me do a max of 3 parallel jobs

GitHub Actions


  • Extra convenient. The configurations are quite simple to setup and can be done through the UI in your repository
  • Get access to some nice intuitive tools that would require a lot of custom configuration on another CICD framework. For example, I like to use the Release Drafter action where you can easily pass a token and then the release drafter will draft out a release based on your PR’s
  • Easily connect to checks. TeamCity can do that with a little bit of setup and Jenkins can do that with a plugin
  • Completely free for any public repository
  • Offers docker in docker support right out of the box


  • Unless you host your own agents you can’t access the host that your build is running on. Mostly useful for some more complicated pipelines such as fastlane or Unreal Engine



  • You can customize this software to the ends of the earth
  • Related to the above, the access control that you can set up is incredible and fine grained
  • Documentation. I think to date, out of the three Jenkins has the most documentation and has been around the longest


  • You have to host it
  • Shared pipelines could use more documentation. They are not quite as intuitive as I’d hope they would be
  • Setting up agents using the Jar method is kind of a pain and the docker in docker support isn’t where I’d like it to be
  • Adding external triggers and monitoring repos that aren’t standard VCS are a pain. The biggest being perforce. Getting the trigger just right is a pain, with TeamCity the perforce plugin not only worked out of the box but it easily should all my streams and was able to create an experience similar as if I was using git
Buy Me A CoffeeDigitalOcean Referral Badge
Edward Beazer

Edward Beazer - I just like to build shit. Sometimes I get stuck for hours, even days while trying to figure out how to solve an issue or implement a new feature. Hope my tips and tutorials can save you some time.

DigitalOcean Referral Badge