Don't be an irritable CM Developer + Deployment Manager—add our portable cmreactor script to your AEM Cloud Service project today!
Adobe Experience Manager (AEM) developers are often caught by surprise the first time they deploy a second codebase to an AEM as a Cloud Service environment when they discover that the first codebase has been completely removed. This is due to a fundamental change to how AEM loads code at runtime in Cloud Service, compared to how the process has traditionally worked in AEM Classic.
Instead of uploading and installing any content packages in the build to a running AEM Package Manager, a Cloud Manager pipeline now builds a complete docker volume from scratch every time it is run by combining the standard AEM platform libraries with the build artifacts resulting only from the current git commit. A major benefit of this new approach is that the server code in every AEM environment is directly traceable back to a particular pipeline execution, AEM SDK version, and git commit, which makes automated testing more predictable and valuable.
One side effect of this behavior, however, is that you can't incrementally install application content packages in an environment by running a CM pipeline to build one feature's source branch and then running a pipeline to build another feature's source branch like you can with AEM Classic. All of the application packages needed to run all desired AEM features need to be sourced from a single branch in the Cloud Manager program's git repository.
The trick is to check out all of the source repositories you want to deploy as subfolders beneath a common parent folder containing a simple maven reactor pom.xml file, then initialize a new git repository that contains all of it, and push that to your Cloud Manager git remote instead.
Unfortunately, some AEM developers who are trying to maintain a stable sandbox environment for training or for testing an important feature may become irritable when they think about all the git commands they will have to carefully execute when another developer requests a deployment of a different project to run in parallel, even if there is no reason to think that there would be code conflicts.