• Concept
  • Version · 6.0
  • Deliver

Design your deployment pipeline

Last updated: September 29, 2026

The docs explain the pieces separately: the setup-liquibase action, flow files, policy checks, operation reports. This page is one opinionated way to assemble them, drawn from implementations that work in production.

Four workflows cover the lifecycle. Adapt the trigger conditions to your branching model; the shape holds either way.

The four workflows

Workflow

Trigger

What it does

Fails when

Pre-merge CI

Pull request opened against a shared branch

Runs changelog-scoped policy checks via a flow

A check violates at blocking severity

Deploy (CD)

Push or merge to a shared branch

Deploys pending changesets, generates an update report

A pre-deploy check or the deployment fails

Manual deploy

Run on demand, environment chosen at run time

Ad-hoc deployment to a named environment

Same as CD

Rollback

Run on demand

Rolls back the last update, generates a rollback report

Rollback fails, or no rollback is defined for a changeset

Why these four

Pre-merge is separate from deploy because feedback is cheapest before the merge. Changelog-scoped checks need no database connection, so this workflow runs in seconds on any runner and tells the developer about a problem while they still have the change in their head. Just as importantly, a policy violation blocks a merge. Leaving the branch as the only thing in a bad state, rather than an environment half-deployed.

Manual deploy exists because ad-hoc deployments always happen. A demo needs a schema change at 4pm on a Thursday. The choice is not whether that happens; it's whether it happens through the same tooling, with the same checks and the same audit trail, or by someone opening a SQL client. Give it a button.

Rollback is a button, not a runbook. The entire point of planning a rollback strategy in advance is that recovery doesn't depend on someone improvising under pressure. If rolling back requires a person to remember a command, you don't have a rollback strategy.

Put the commands in a flow, not in pipeline YAML

The single most useful structural decision: your pipeline YAML should do almost nothing.

loading

Everything else. The command sequence, the checks, the conditionals, the report generation - lives in the flow file. Three reasons this matters:

  • Portability. The same flow runs identically in GitHub Actions, Azure DevOps, Jenkins, and on a developer's laptop. When you migrate CI tools, you rewrite ten lines of YAML rather than your deployment logic.

  • Governance. Flows live in a central repository with read-only access for application teams, so the deployment process is one reviewed artifact instead of one per project.

  • Reproducibility. A developer can run the exact production sequence locally to debug it.

Environment promotion

Map environments to whatever your branching model already uses. Pipeline stages under trunk-based, branches under Gitflow. Two mechanisms control what applies where:

Contexts and labels control which changesets run. A changeset tagged with a context only applies when that context is active, which is how you keep test data out of production.

Separate check-settings files per environment control how strictly changes are judged. Severity should tighten as you approach production. See Policy check roll out best practices.

Keep credentials environment-scoped too, so a QA deployment cannot reach production even by misconfiguration. See Secure your connections.

Reports are the output, not a side effect

Each deploy and rollback generates an operation report. Decide where they go before you need one: emailed, written to object storage, or kept as a pipeline artifact. In an audit, "we can regenerate it" is a much weaker answer than "here it is."

If you run Change Intelligence, these operations also feed its dashboards, which is where the history becomes queryable rather than a pile of files.

A minimal working set

For a first implementation, this is enough:

  • One repository containing changelogs, flow files, and a liquibase.checks-settings.conf

  • Three environments (dev, QA, production) with scoped credentials

  • The four workflows above

  • Changelog-scoped checks in pre-merge; database-scoped checks scheduled post-deploy

Expand from there. Teams that start by building all four workflows and custom checks and multi-schema support at once generally ship none of them.