I've used TeamCity at most contracts I've worked at but it’s always already been setup. At this job, its installed and they've wanted to get it working for 18 months. I have come along and am also not getting much success fast, I have gotten two tiny projects setup but the big stuff is a struggle. I've personally struggled with it for 9 months. I spent weeks writing a file copy system for deploying files to Linux (from the Windows TC box) with rollback mechanism because there's no transactional Linux filecopy task in TC.
I'm not ashamed to admit I struggle with TC. I'm a very technical programmer, I'm a former Microsoft support engineer, I have an IQ ~148 but I find TeamCity really hard work. I actually think it’s a very good piece of software and I recommend it to people. When it’s working, its superb, the support is great and the dev team seem to really care about making a great product. But I'm also a strange programmer; I don't seem to see things how other people do. I'm not nerdy about anything other than the code in the software I'm writing - I don't care or want to learn TeamCity, like I don't want to learn how my microwave oven works, I just want hot food.
Programmers I've met tend to be concerned with nerdy details, they blame end-users for being stupid, not themselves for being unable to empathise and build useable software. They seem to want to expose the complexity of a product to show how clever they have been to build it in the first place. This has changed in the last decade since UX, interaction designers and Agile processes have come in, but where programmers build apps for other programmers, they tend not to remember that other programmers are just users, concerned only with getting their jobs done and remaining in a good mood.
TeamCity mostly fills me with dread. Even my project managers de-emphasise any TC stories in the backlog because they've learnt that they just eat very expensive developer/consultancy time and delivery very little. Although I can see that you've really tried with this product, I regret to say that it's still very hard to succeed with it.
What's more, I don't really know how this is so, considering that I mainly want to do the same thing with it every time. That is, I think there are maybe 10 main, popular 'recipes' that a .NET team would need. Likewise for Java. Most of them will be something like, Setup with source control > Build some project/product/site/service in some configuration > Test it > Deploy or package it. I think some of the hand-holding/wizard setup falls down because there's no mechanism for TC to read the repo/code/project-files and offer options and help during setup, it’s all trial and error. Often, the details of MSBuild are exposed - and that's a problem because (Microsoft certainly) programmers only know F5 = running app, how Visual Studio does this is just magic that's rarely needed to be learned. It's not lazy, we just don't need to know.
So often I'll be confronted with all sorts of problems I don't understand and will involve hours of reading about MSBuild, which I could avoid if I just wrote a macro in VS2012 and hosted it like a build server (my point is, stuff breaks on TC that doesn't in VS). I cost my client a lot of money, so they aren't getting good value - they're not getting new features or insights in their product for their business. If there was a TeamCity man I could call out to set this up, I would, like a plumber. Money well spent.
Today, for instance, I setup a simple test build of a solution. The solution has two websites, it uses NuGet packages (external and internal via TC) and a bunch of dependent library projects, one of which is a .NET Portable lib. It builds in VS2012 but it just gives me a list of 100s of errors from a simple 'Build sln file' TC build step:
Hypermedia\RelatedLinkCollection.cs(14, 6): error CS0246: The type or namespace name 'CollectionDataContractAttribute' could not be found (are you missing a using directive or an assembly reference?)
... Almost the same error over and over ...
Mathematics\SpatialVector.cs(49, 35): error CS0234: The type or namespace name 'DataContract' does not exist in the namespace 'System.Runtime.Serialization' (are you missing an assembly reference?)
Mathematics\SpatialVector.cs(49, 35): error CS0234: The type or namespace name 'DataContractAttribute' does not exist in the namespace 'System.Runtime.Serialization' (are you missing an assembly reference?)
Project CompanyNamePortableCore\CompanyNamePortableCore.csproj failed.
Project WebCore\WebCore.csproj failed.
E:\TeamCity-BuildAgent\work\62023563850993a7\Web\.nuget\nuget.targets(88, 9): Unable to find version '220.127.116.11' of package 'MarkLogicManager40'.
E:\TeamCity-BuildAgent\work\62023563850993a7\Web\.nuget\nuget.targets(88, 9): error MSB3073: The command ""E:\TeamCity-BuildAgent\work\62023563850993a7\Web\.nuget\nuget.exe" install "E:\TeamCity-BuildAgent\work\62023563850993a7\CompanyNameImagesMvc\packages.config" -source "" -RequireConsent -solutionDir "E:\TeamCity-BuildAgent\work\62023563850993a7\Web\ "" exited with code 1.
Project CompanyNameImagesMvc\CompanyNameImagesMvc.csproj failed.
... etc. etc. more of the same ...
The project uses a NuGet package from TeamCity (one of the two successfully running TC projects). I don't know why it can't find this 18.104.22.168 version. My VS works.
And of course, why it can't find 100s of standard .NET types I have no idea, again, it builds find on all our machines. I just don't understand how a simple solution can just fail to build like this? I fear using TeamCity. I know I'm going to go from failure to failure all day and face grillings from my boss/client at every stand-up.
I don't even know if building the whole solution will be what I should be doing anyway. My objective is to create a QA MSDeploy package for just one of the projects in the solution. That's all and I think that's a 'top 10' use case. Would it be possible to have 'recipes' or templates based around use-cases? Would it be beneficial to check out the repo and read and process the solution and project files and have the UI offer better guidance? Or maybe use a VS add-in and the VS API to read the list of projects and build configurations etc. and have a TC UI in VS that writes the correct config to TeamCity?
I don't know. But I did want to feedback how hard I think TC is to use and why we are yet to buy a license. I also want to add that this friction is why Azure, TFS and cloud build and deploy is what I use for my own personal apps. I just want a microwave that gives me hot food and I don't care who makes it.
Message was edited by: Yegor Yarko (returned newlines back)