We run everything through TeamCity. Not going to claim its the best tool in the world but it's certainly the best I've used, and it's fairly straightforward to work with!
I definitely prefer TC over Jenkins though. The Jetbrains support for TC is also really good and they have been helpful whenever we contacted them or opened an issue on their public tracker.
It has a Kotlin DSL that is quite powerful and flexible, but of course you need to know your way around Java to make the most of it.
Custom plugins is also an option if you need something special that is not provided out of the box.
Even though I have moved on to Azure DevOps Services, it's still good to see that JetBrains have fixed a 10 year old feature request.