DevOps platforms bill per user and per pipeline-minute, and top features are gated behind premium tiers — costs climb with team size. Self-hosted, open toolchains (Gitea/Forgejo, Drone, Woodpecker, Argo CD) remove seat licensing. The catch is that pipelines are platform-specific, so translation is the real work. Bamboo’s Server/Data Center end-of-life makes this especially timely.
Inventory first
Catalog repositories, pipeline definitions, runners, secrets, and artifacts; map integrations (SCM, container registries, deploy targets); and document permissions and environments.
Migrate repos, then pipelines
Most targets can pull-mirror repositories directly from the source (including issues/PRs via API). The bigger lift is translating pipelines: .gitlab-ci.yml / Azure Pipelines YAML / Bamboo plans become Gitea Actions, Drone, or Woodpecker definitions. Re-create runners/agents, migrate secrets, and re-point webhooks and service connections.
Cutover team-by-team
Mirror repos and migrate issues/artifacts, translate and dry-run pipelines (build/test/deploy), then switch teams over project-by-project. Keep the source platform active until pipelines are green; re-point webhooks/runners back on failure.
Validation
Pipeline dry-runs covering build, test, and deploy; secret and artifact resolution; webhook/integration tests; and a deploy + rollback verification. The acceptance bar is “a representative project builds, tests, and deploys end-to-end on the new platform.”
De-risking
Pilot one representative project first to validate the full pipeline shape, and keep both platforms running during transition so a broken pipeline never blocks releases.
Open a source→target page for platform-specific steps and a per-seat TCO model.