You can only run one CIL at a time.
You should really read the documentation I have linked earlier. The process is to prepare modelstore in Build environment (which was initially cloned from Production AX_model DB). Code should be imported to that environment first via XPO or TFS synchronization.
Full compile (axbuild utility).
Data dictionary synchronization.
Full CIL.
Export AXModelStore with axutil.exe or from the AX PowerShell library with Export-AXModelStore cmdlet.
T-30 mins before maintenance downtime: import AXModelStore to a Temporary schema in AX_Model DB.
T-0 mins: shutdown all AOS instances, SSRS, SSAS, DIXF services
T+5 mins: apply Temporary schema to actual modelstore, so code is replaced
T+6 mins: start 1 AX AOS in maintenance mode, so no other users can connect
T+8 mins: DB synchronize (if there were ID conflicts, resolve that in SQLDictionary table)
T+25 mins: AIFServices form refresh (if services were modified or there are new operations/AIF ports), setup and configuration changes, data upgrade scripts, report deployment, or whatever extra tasks you have to do as part of the release process
T+35 mins: start everything back, testing, end of maintenance
I also clean up the label file folders while AOSes are down, get rid of AUC/KTI files on the Remote Desktop Service Hosts. Once services are back, I validate if AIF ports are running because sometimes it did happen that one of them does not fully come up. Also it could happen that VSAssembly folder is not populated automatically with all DLLs on the server, so I make a visual inspection for all AOS VSAssemblies if files are there. If any of these two are missing, that is a manual restart for the specific AOS instance.
For me the actual downtime rarely takes more than 60 minutes, though I have scripted most of the steps in PowerShell to shorten it as much as possible. We are doing weekly releases.