Ok, after a bit of work I believe I have a solution.
As part of my CI (Continuous Integration) job I run:
cdk synth
I then save the contents of the cdk.out folder to a repository (I'm using Octopus Deployment).
As part of my CD (Continuous Deployment) job I have the following (Powershell):
$Env:AWS_ACCESS_KEY_ID={your key}
$Env:AWS_SECRET_ACCESS_KEY={your secret}
$Env:AWS_DEFAULT_REGION={your region}
$cdk=[Environment]::GetFolderPath([Environment+SpecialFolder]::ApplicationData) + "\npm\cdk.cmd"
& $cdk --app . deploy {your stack name} --require-approval never
So the "cdk synth" will generate the template and assets required for deployment.
The "cdk --app . depoy {your stack name} --require-approval never" is telling aws-cdk to us the existing templates and assets. This avoids a situation where the CD process may produce a different setup than the CI process. The "." indicates that the templates & assets are in the current folder.
You will need to install node & aws-cdk on the CD server (in my case an Octopus Deploy tentacle);
Node install is easy, just log in and install.
To add aws-cdk perform the following (using an administrator powershell):
npm prefix -g // Make note of the path
npm config set prefix C:\Windows\System32\config\systemprofile\AppData\Roaming\npm
npm install -g aws-cdk
npm config set prefix {original path}
Note that the npm path maybe different for your usage - will depend on the user account used for the CD process and Windows version.