Windows, C++/.NET based
Visual Studio, Installshield
My project has been ramping up on TeamCity for a few months now. I built our controller and agents out on a free version (proof of concept), but now I'm looking to migrate this to our internal team which manages the TeamCity server for the whole company. The TeamCity server is located in North America. However, our poject will utilize 20-30 agents initially (and will grow), split evenly between North America and another country. Obviously, the download/upload pipe between this 'other country' and our server in North America, isn't very fast.
We make heavy use of snapshot dependencies and artifact dependencies. I understand that TeamCity caches the artifacts on each agent. Howvever, it's not clear to me whether all agents in an agent pool will first query the agents to determine if they have the required artifacts before going to the server or if the artifact cache only works for the local agent.
I need to avoid at all costs any artifact dependency download from Agents in the 'other country' from the server in North America as this could take hours. These agents will have very slow download/upload speeds to the server in North America, and will defeat the purpose of CI.
How does the Agent artifact cache work? Will agents only look for artifacts in their local cache, or will/can they query other agents to determine if these agents have the artifact they require, prior to falling back to the server for the artifact download?
What is TeamCity's best recommendation for how to handle this scenario? Our intent is to have one managed teamcity server with multiple agents spread across different geographical locations all part of one 'big project' that retains all the great speed/efficiency that CI offers. So for instance, the team in North America might have 15 agents working on 50% of the project, while another country has 15 agents working on the other 50% of the project. All these agents can require artifacts/dependencies from the other 50% of the project - they may need to download/upload artifacts that are worked on in another country. How do I ensure the agents in the 'other country' do not get slowed down resolving artifacts from North America?
1.) I could build out 2 servers, one for each country, with the full stack on each side, but that is a waste of resources, is inefficient to manage, and doesn't provide a single location to view the current state of the entire project.
2.) I could require that all bulid chains get built on a single agent, but that defeats the scalable architecture of the agents.
3.) I could try some sort of DFS strategy to attempt to 'hide' this bandwidth issue from teamcity. Not sure if this would be feasible.
4.) I could schedule all agents in this 'other country' to build all their build configurations before their day starts thereby pulling down all the most recent code changes from North America. Same could be done in reverse. This would be hepful, but any changes that occur after the scheduled kick off time would have to be downloaded from the server. It also seems silly to have to force all agents to build prior to their day starting just to ensure that their artifact cache is updated locally on every agent.
5.) Some other configuration/option I'm not aware of? Or a new feature to better support multiple geo configurations in future teamcity versions?