CIs are detected based on environment variables present during the execution of the scanner. We'll use the existing 'CiVendor' interface.
SCMs are detected when a scm provider is used by the scanner. This means that out of the box, the scanner can detect Git and SVN. If community plugin is installed for it, we may be able to also detect Mercurial, CVS, etc. See [here|https://docs.sonarqube.org/display/PLUG/Plugin+Library.]
If no CI or SCM is detected, the scanner will set them to 'undetected'.
These 2 fields will be saved in the "Scanner context" or the project, and will therefore be saved in the DB table 'analysis_properties".