59 lines
1.8 KiB
Markdown
59 lines
1.8 KiB
Markdown
---
|
|
title: Use Versioning for Blue-Green Deployments
|
|
impact: LOW
|
|
impactDescription: Enables safe deployment of new code versions alongside old ones
|
|
tags: advanced, versioning, blue-green, deployment
|
|
---
|
|
|
|
## Use Versioning for Blue-Green Deployments
|
|
|
|
Set `ApplicationVersion` in configuration to tag workflows with a version. DBOS only recovers workflows matching the current application version, preventing code mismatches during recovery.
|
|
|
|
**Incorrect (deploying new code that breaks in-progress workflows):**
|
|
|
|
```go
|
|
ctx, _ := dbos.NewDBOSContext(context.Background(), dbos.Config{
|
|
AppName: "my-app",
|
|
DatabaseURL: os.Getenv("DBOS_SYSTEM_DATABASE_URL"),
|
|
// No version set - version auto-computed from binary hash
|
|
// Old workflows will be recovered with new code, which may break
|
|
})
|
|
```
|
|
|
|
**Correct (versioned deployment):**
|
|
|
|
```go
|
|
ctx, _ := dbos.NewDBOSContext(context.Background(), dbos.Config{
|
|
AppName: "my-app",
|
|
DatabaseURL: os.Getenv("DBOS_SYSTEM_DATABASE_URL"),
|
|
ApplicationVersion: "2.0.0",
|
|
})
|
|
```
|
|
|
|
By default, the application version is automatically computed from a SHA-256 hash of the executable binary. Set it explicitly for more control.
|
|
|
|
**Blue-green deployment strategy:**
|
|
|
|
1. Deploy new version (v2) alongside old version (v1)
|
|
2. Direct new traffic to v2 processes
|
|
3. Let v1 processes "drain" (complete in-progress workflows)
|
|
4. Check for remaining v1 workflows:
|
|
|
|
```go
|
|
oldWorkflows, _ := dbos.ListWorkflows(ctx,
|
|
dbos.WithAppVersion("1.0.0"),
|
|
dbos.WithStatus([]dbos.WorkflowStatusType{dbos.WorkflowStatusPending}),
|
|
)
|
|
```
|
|
|
|
5. Once all v1 workflows are complete, retire v1 processes
|
|
|
|
**Fork to new version (for stuck workflows):**
|
|
|
|
```go
|
|
// Fork a workflow from a failed step to run on the new version
|
|
handle, _ := dbos.ForkWorkflowstring
|
|
```
|
|
|
|
Reference: [Versioning](https://docs.dbos.dev/golang/tutorials/upgrading-workflows#versioning)
|