As said above having a script do everything is half the battle when it comes to CI. If you can build in the cloud I suggest checking out Travis as I hear it now does all three platforms (https://blog.travis-ci.com/2018-10-11-windows-early-release). If you want to setup build machines (or better still VMs) then I recommend GitLab either self hosted or in the the cloud, obviously in the cloud is more hassle free (https://about.gitlab.com/). If you want a combination of both, Azure for DevOps might be worth a look, although it’s not free to run builds in the cloud (https://azure.microsoft.com/en-gb/services/devops/ Azure pipelines is the bit you should be most interested in). Certainly in the case of Travis and GitLab you will have a much easier and quicker time setting them up than you likely will with Jenkins.
Back to the original point, the jucer file can have a fourth number laid out like so 0.0.0 I suggest the forth number is not a git revision but instead a build number produced by your CI system (travis, gitlab, azure, jenkins, etc.). The reason being is that from this number you will be able to get back to everything and see not just the git revision but the logs and all the artifacts produced such as a crash symbolication file for example. You can set the version number from the command line, save it on your repo as 1.2.3 then call --get-version using the projucer and search are replace  before calling --set-version. The CI systems will set the build number as an environment variable, so have your script only replace the number when the environment is there or what I’ve done in the past is added an argument to my build script --build-number I default it to 0 so that’s what local builds use and on CI systems I call my script with the argument like so
build.py --build-number CI_BUILD_NUMBER_VARIABLE
One other point to make is that forth number in the jucer file is not used in the version numbers reported to hosts (in most cases at least) so make sure all public builds have at least one of the other numbers bumped before release or a host might not realise it’s changed from one version to the next.