Process Versioning in Blue-Green-Deployment Scenarios

Hi,

we just faced a minor issue, which could cause big trouble in the future and i did not find a reliable solution yet in documentation/board:

Scenario:

  • We deploy our application as Spring Boot service (process engine and processdefinitions embedded in the deployment)
  • We use a blue-green-deployment pattern which means, that multiple instances of ServiceV1 and ServiceV2 are running in parallel for a while.
  • During deployment of V2, a new version of the process definition is added
  • V1 starts to execute processes with the new process definition version and also acquires jobs for the new version, but does not support the model (e.g. missing spring beans). This results in errors.

Questions:

  • is there a way to limit a process engine instance to only use definitions and only aquire jobs, which are part of its own deployment? The option deployment-aware binds a process instance to a specific node, if i understand the documentation correctly.
  • If there is no build in support for this feature, would this be a reasonable addition to the engine? What would be the best way to implement this?
  • For new process instances, i could find a way to get this done with versionTags and startProcessInstanceById, but how can we prevent ServiceV1 to acquire jobs for instances of process definitions from V2 while not limiting the sharing of jobs among multiple nodes of ServiceV1?

Update: Now i found process application deployment and reading that, it seems that deployment-ware might indeed solve the problem (if it only compares the bpmn code in the deployment). Need to test i guess…

Regards,
Michael

Hi @mcirikovic,

Indeed, jobExecutorDeploymentAware is the way to go in this case.
For this to work, you must make use of a ProcessApplication (@ProcessApplication, processes.xml etc.).
The camunda-spring-boot-starter community extension supports such a use case.

Cheers,
Christian

You don’t have to make a process application deployment, but can also manually register a deployment with a deployment-aware job executor via ManagementService#registerDeploymentForJobExecutor. It is just that with a process application deployment, the process engine does this automatically which may be more convenient.

Cheers,
Thorben