Running Operations Center and Client controllers on Windows is fully supported, but there are a number of possible challenges you may face when doing this. We generally advise customers to run their Operations Center and Client controllers on Linux when possible. It is easy to run builds on Windows using Windows build agents, and there is no issue with combining Windows agents and Linux controllers.
Some of the issues with running the Operations Center or Client controllers on Windows are:
Windows file systems use different file locking semantics than Linux file systems. The differences in locking semantics frequently expose plugin bugs which do not affect Linux controllers.
In the wider Jenkins open source community, the vast majority of users and developers are running Jenkins on Linux. As a result, many third-party Jenkins plugins are not tested under Windows, and Windows-specific bugs can be overlooked. It is also more likely that a Windows-specific issue won’t have been seen or reported before, and therefore it is less likely that a solution will already be known. By running Jenkins controllers on Linux, users benefit from a kind of "herd immunity" due to its greater popularity.
Configuring shared network drives for best performance can be difficult because of the large variance in SMB versions and dialects that may be used, depending on the version of Windows on the client and what is supported by the file server. We have seen issues with this for customers with large controllers, and for those setting up high availability, where the active and standby controllers must use a shared network drive.
Disk performance is hard to measure because Windows does not provide built-in CLI tools for this. Jenkins is sensitive to storage performance, so when our Support team is investigating reports of slowness, it can be challenging to gather useful metrics about disk performance.
Windows event logs and system hardware configuration are not accessible to users who don’t have Administrator privileges, and we don’t recommend running Jenkins with those privileges for security reasons. As a result, this information cannnot be included in support bundles. This can make it harder to diagnose certain system-level issues that might negatively impact Jenkins.