Fluid Forge
Why Forge
Concepts
Get Started
  • Consume a Data Product
  • See it run
  • Demos
  • Local (DuckDB)
  • Source-Aligned (Postgres → DuckDB)
  • AI Forge + Data Models
  • MCP Output Port — Serve to AI Agents
  • GCP (BigQuery)
  • Snowflake Team Collaboration
  • Declarative Airflow
  • Orchestration Export
  • Jenkins CI/CD
  • Universal Pipeline
  • 11-Stage Production Pipeline
  • Catalog Forge End-to-End
CLI Reference
  • Agent Policy (concept)
  • MCP Output Port — Serve to Agents
  • MCP deep-dive
  • AI-assisted authoring
  • LLM providers & backends
  • Overview
  • Quickstart
  • Examples
  • Your own CI
  • Your own scaffolding
  • Custom validator
  • Apply hook
  • Reference
  • Overview
  • Architecture
  • GCP (BigQuery)
  • AWS (S3 + Athena)
  • Snowflake
  • Local (DuckDB)
  • Custom Providers
  • Roadmap
GitHub
Why Forge
Concepts
Get Started
  • Consume a Data Product
  • See it run
  • Demos
  • Local (DuckDB)
  • Source-Aligned (Postgres → DuckDB)
  • AI Forge + Data Models
  • MCP Output Port — Serve to AI Agents
  • GCP (BigQuery)
  • Snowflake Team Collaboration
  • Declarative Airflow
  • Orchestration Export
  • Jenkins CI/CD
  • Universal Pipeline
  • 11-Stage Production Pipeline
  • Catalog Forge End-to-End
CLI Reference
  • Agent Policy (concept)
  • MCP Output Port — Serve to Agents
  • MCP deep-dive
  • AI-assisted authoring
  • LLM providers & backends
  • Overview
  • Quickstart
  • Examples
  • Your own CI
  • Your own scaffolding
  • Custom validator
  • Apply hook
  • Reference
  • Overview
  • Architecture
  • GCP (BigQuery)
  • AWS (S3 + Athena)
  • Snowflake
  • Local (DuckDB)
  • Custom Providers
  • Roadmap
GitHub
  • Introduction

    • Home
    • Why Fluid Forge
    • Getting Started
    • Snowflake Quickstart
    • See it run
    • Forge Data Model
    • Vision & Roadmap
    • Playground
    • FAQ
  • Concepts

    • Concepts
    • Builds, Exposes, Bindings
    • What is a contract?
    • Quality, SLAs & Lineage
    • Governance & Policy
    • Agent Policy (LLM/AI governance)
    • Providers vs Platforms
    • Fluid Forge vs alternatives
  • Data Products

    • Consume a Data Product
    • Product Types — SDP, ADP, CDP
  • Walkthroughs

    • Walkthrough: Local Development
    • Source-Aligned: Postgres → DuckDB → Parquet
    • AI Forge And Data-Model Journeys
    • Walkthrough: MCP Output Port
    • Walkthrough: Deploy to Google Cloud Platform
    • Walkthrough: Snowflake Team Collaboration
    • Declarative Airflow DAG Generation - The FLUID Way
    • Generating Orchestration Code from Contracts
    • Jenkins CI/CD for FLUID Data Products
    • Universal Pipeline
    • The 11-Stage Pipeline
    • End-to-End Walkthrough: Catalog → Contract → Transformation
  • CLI Reference

    • CLI Reference
    • Core workflow

      • fluid init
      • fluid demo
      • fluid forge
      • fluid validate
      • fluid plan
      • fluid apply
      • fluid diff
      • fluid status
    • Build & ship

      • fluid bundle
      • fluid generate
      • fluid generate artifacts
      • fluid validate-artifacts
      • fluid verify-signature
      • fluid generate iac
      • fluid generate-airflow
      • fluid generate-pipeline
      • fluid generate vector
      • fluid viz-graph
      • fluid publish
      • fluid ship
      • fluid rollback
      • fluid schedule-sync
    • AI & Agents

      • fluid ai
      • fluid agents
      • fluid mission
      • fluid mcp
      • fluid memory
      • fluid stats
      • fluid skills
    • Quality & governance

      • fluid test
      • fluid verify
      • fluid contract-tests
      • fluid contract-validation
      • fluid policy
      • fluid policy check
      • fluid policy compile
      • fluid policy apply
    • Standards & interoperability

      • fluid odps
      • fluid odps-bitol
      • fluid odcs
      • fluid export
      • fluid export-odps
      • fluid exporters
      • fluid import
      • fluid market
      • fluid datamesh-manager
    • Project & workspace

      • fluid product-new
      • fluid product-add
      • fluid workspace
      • fluid contract
      • fluid split
      • fluid config
      • fluid providers
      • fluid plugins
      • fluid provider-init
      • fluid auth
      • fluid secrets
      • fluid ide
      • fluid scaffold-ci
      • fluid scaffold-composer
      • fluid scaffold-ide
      • fluid docs
      • fluid runs
      • fluid retention
      • fluid describe
      • fluid doctor
      • fluid roadmap
      • fluid version
    • Catalog adapters

      • Source Catalog Integration (V1.5)
      • Publishing to a Catalog — Overview
      • BigQuery Catalog
      • Snowflake Horizon Catalog
      • Databricks Unity Catalog
      • Google Dataplex Catalog
      • AWS Glue Data Catalog
      • DataHub Catalog
      • Data Mesh Manager Catalog
      • OpenMetadata Catalog
    • CLI by task

      • CLI by task
      • Add quality rules
      • Add agent governance
      • Debug a failed pipeline run
      • Switch clouds with one line
  • Recipes

    • Recipes
    • Recipe — add a quality rule
    • Recipe — switch clouds with one line
    • Recipe — tag PII in your schema
    • Write a contract that consumes another contract
    • Generate per-environment overlays
  • SDK & Plugins

    • SDK & Plugins
    • Quickstart — your first plugin
    • Examples

      • Runnable examples
      • Example: hello-scaffold — the minimal viable plugin
      • Example: gitlab-ci-scaffold — generate a complete CI project
      • Example: steward-validator — a custom governance rule
      • Example: prod-key-guard — apply-time invariant check
    • Journeys

      • Journeys
      • Your own CI/CD

        • You have your own CI/CD setup, no problem
        • GitLab CI — the bundle template
        • GitHub Actions — the bundle template
        • Jenkins — the bundle template
        • CircleCI — the bundle template
      • You have a strict project layout, no problem
      • You have governance rules, no problem
      • You want a check at apply time, no problem
    • Reference

      • Reference
      • Roles reference
      • Entry points reference
      • Trust model
      • Packaging
      • Companion packages
  • Providers

    • Providers
    • Provider Architecture
    • GCP Provider
    • AWS Provider
    • Snowflake Provider
    • Local Provider
    • Creating Custom Providers
    • Provider Roadmap
  • AI & Agents

    • MCP Server
    • Built-in And Custom Forge Guidance
    • Forge Discovery Guide
    • Forge Memory Guide
    • Authoring Forge Tools
    • Guided fluid forge UX
    • LLM Providers
    • LiteLLM Backend
    • Capability Warnings
    • Cost Tracking
    • FLUID Forge Contract GPT Packet
    • Agentic Primitives
  • Operate & Deploy

    • Operating in CI
    • Production Troubleshooting
    • Airflow Integration
    • Blueprints
    • Source-Aligned Acquisition
  • Govern & Secure

    • Governance, Compliance & the Business Case
    • Governance & Compliance
    • Network Safety
    • Credential Resolver — Security Model
  • Configuration & Reference

    • Environment Variables
    • Typed Errors
    • Typed CLI Errors
    • API Stability — fluid_build.api
  • Architecture & Releases

    • V1.5 Catalog Integration — Architecture Deep-Dive
    • V1.5 + V2 Hardening — Release Notes
  • Project

    • Contributing to Fluid Forge
    • Fluid Forge Docs Baseline: CLI 0.14.0
    • Fluid Forge Docs Baseline: CLI 0.13.0
    • Fluid Forge Docs Baseline: CLI 0.12.0
    • Fluid Forge Docs Baseline: CLI 0.11.0
    • Fluid Forge Docs Baseline: CLI 0.10.0
    • Fluid Forge Docs Baseline: CLI 0.9.0
    • Fluid Forge Docs Baseline: CLI 0.8.11
    • Fluid Forge Docs Baseline: CLI 0.8.10
    • Fluid Forge Docs Baseline: CLI 0.8.9
    • Fluid Forge Docs Baseline: CLI 0.8.8
    • Fluid Forge Docs Baseline: CLI 0.8.7
    • Fluid Forge Docs Baseline: CLI 0.8.6
    • Fluid Forge Docs Baseline: CLI 0.8.5
    • Fluid Forge Docs Baseline: CLI 0.8.4
    • Fluid Forge Docs Baseline: CLI 0.8.3
    • Fluid Forge Docs Baseline: CLI 0.8.0
    • Fluid Forge Docs Baseline: CLI 0.7.11
    • Fluid Forge Docs Baseline: CLI 0.7.9
    • Fluid Forge v0.7.1 - Multi-Provider Export Release

Operating in CI

Runbook for running fluid pipelines unattended — on Jenkins, GitHub Actions, GitLab CI, or any other runner. Everything on this page is verified against CLI v0.11.0.

Companion page

When a CI stage fails, jump to Production Troubleshooting for the symptom → diagnosis → fix tables.

The 11-stage pipeline

Every generated CI template drives the same 11 stages, one CLI command per stage. Stages 1–7 form the integrity chain: the bundle digest computed in stage 1 is stamped into the plan in stage 6 and re-verified in stage 7 before any DDL runs.

#StageCommandWhat it gates
1Bundlefluid bundle <contract> --format tgz --out runtime/bundle.tgzDeterministic tgz with MANIFEST.json, per-file SHA-256, merkle root
2Validatefluid validate <contract>Contract vs the versioned JSON schema (--strict treats warnings as errors)
3Generate artifactsfluid generate artifacts <contract>Transformation + schedule artifacts under dist/artifacts/
4Validate artifactsfluid validate-artifacts dist/artifacts/Generated artifacts are internally consistent
5Diff (drift gate)fluid diff <contract> --out runtime/diff.jsonDrift between the contract and the last applied state
6Planfluid plan <contract> --out plan.jsonEmits plan.json carrying bundleDigest + planDigest
7Applyfluid apply plan.json --yesRe-verifies both digests, then executes (see plan binding)
8Policy applyfluid policy-apply dist/artifacts/policy/bindings.jsonGovernance policy bindings
9Verifyfluid verify <contract> --out runtime/verify.jsonDeployed state matches the contract
10Publishfluid publish <contract> --target <catalog>Catalog registration (repeatable --target)
11Schedule syncfluid schedule-sync <contract>Declared schedules match the scheduler

Use the tgz bundle format in CI: stages 4, 6, and 7 all require the tgz MANIFEST.json. A yaml/json bundle is valid for fluid bundle itself but breaks every downstream stage of this pipeline.

Generating a pipeline

fluid generate ci                          # GitLab CI (default)
fluid generate ci --system github          # GitHub Actions
fluid generate ci --system jenkins         # Jenkins (Jenkinsfile)
fluid generate ci --system azure           # Azure DevOps
fluid generate ci --system bitbucket       # Bitbucket Pipelines
fluid generate ci --system circleci        # CircleCI
fluid generate ci --system tekton          # Tekton (writes tekton/*.yaml)

Useful knobs:

FlagPurpose
--complexity {basic,standard,advanced,enterprise}basic = validate+apply; standard (default) = full workflow; advanced = multi-env + approvals; enterprise = + governance/compliance
--install-mode {pypi,dev-source}How the generated Jenkinsfile installs fluid (Jenkins only today; other systems ignore it)
--out <path>Output path override (single-file systems only)
--no-generate-artifactsSkip stages 3–4 for reference-only contracts (hybrid-reference dbt, external Airflow); auto-detected for builds[].pattern: hybrid-reference
--default-publish-target <TARGET>Bake a fallback catalog target into stage 10's publish shell (${PUBLISH_TARGETS:-<TARGET>}) — matters for the first Pipeline-from-SCM build Jenkins auto-triggers, where parameter defaults are not yet exported as env vars

The Jenkins template is the reference implementation of the 11 stages: every stage gets a boolean RUN_STAGE_* toggle plus per-stage config in the parameters { } block, so operators can run a subset from "Build with Parameters" without editing Groovy.

Install modes (Jenkins)

  • pypi (default, production) — pip install data-product-forge from stable PyPI. Overridable at build time via the four parameters below.
  • dev-source (lab / contributor) — installs from a /forge-cli-src bind mount inside the Jenkins container and fails loud if the mount is missing. No silent fallback to PyPI. The generated Jenkinsfile carries exactly one mode's logic — regenerate to switch.

The four Jenkins build parameters (pypi mode)

ParameterDefaultPurpose
FLUID_PACKAGE_SPECdata-product-forgePackage spec for pip. Pin a version via data-product-forge==X.Y.Z
FLUID_PIP_INDEX_URL(blank)Primary pip index. Blank = stable PyPI; set https://test.pypi.org/simple/ for TestPyPI pilots, or a private mirror
FLUID_PIP_EXTRA_INDEX_URL(blank)Fallback index — usually https://pypi.org/simple/ when the primary points at TestPyPI so transitive deps still resolve
FLUID_ALLOW_PRERELEASEfalsePass pip --pre (pulls alpha/rc releases). Leave false in prod

Two global parameters ride alongside them: CONTRACT (contract path, default contract.fluid.yaml) and FLUID_ENV (environment overlay, default dev).

Plan binding: the integrity chain

fluid plan stamps two digests into plan.json:

  • bundleDigest — SHA-256 identity of the tgz bundle the plan was generated against
  • planDigest — digest over the plan body itself

fluid apply re-verifies both before any DDL. A mismatch raises PlanBindingError with a stable kind tag (bundle-mismatch, plan-tamper, …) that CI log parsers can grep — the full catalog is on the troubleshooting page.

The DR escape hatches log at WARNING

fluid apply --no-verify-plan-binding skips the digest verification and --no-verify-federation skips the federated-consumes upstream-digest gate. Each is a narrowly-scoped disaster-recovery hatch (they were deliberately split — a single waiver for both trust domains was a security finding), and each logs at WARNING level so audit trails catch every use. Never bake either into a pipeline default.

Passing --bundle <path> to apply pins which tgz the plan is verified against; when omitted, a sibling .tgz is auto-discovered.

Non-interactive operation

SettingEffect
fluid apply --yesSkip the apply confirmation prompt
FLUID_AUTO_CONFIRM=1Env-var equivalent of --yes
FLUID_NONINTERACTIVE=1Skip prompts and use defaults across prompting surfaces (also set by fluid forge --non-interactive)
FLUID_FORGE_NO_PICKER=1Suppress the interactive 5-mode fluid forge menu on runners
FLUID_LOG_FORMAT=jsonStructured logs — parseable by CI log processors
FLUID_LOG_FILE=<path>Also write logs to a file you can archive as a build artifact

Generated templates already run every stage with non-interactive flags; set the env vars when you script stages by hand.

Credentials on runners

Never bake credentials into the pipeline file. The generated templates read them from the CI system's secret store at runtime:

  • Cloud provider auth — inject via the provider's own env-var / secret-file conventions; see the AWS, GCP, and Snowflake provider pages for the exact variables, and fluid auth for interactive setup outside CI.
  • Pipeline secrets (database passwords, API tokens consumed by acquisition runners) — resolve through ${SECRET:...} references; see the credential resolver. fluid secrets reads secret values only from stdin or an interactive prompt, never from argv — so a CI seeding step is printf '%s' "$DB_PASSWORD" | fluid secrets login postgres.prod.password.
  • Encrypted credential store — on ephemeral runners, supply the Fernet key via FLUID_ENCRYPTION_KEY (or FLUID_ENCRYPTION_PASSPHRASE) from the CI secret store.

Cost caps for LLM-driven stages

If the pipeline invokes any LLM-driven command, cap spend explicitly:

VariableScope
FLUID_COST_LIMIT_USDGlobal cap across a CLI invocation
FLUID_COST_LIMIT_USD_PER_RUNPer-run cap
FLUID_COST_LIMIT_USD_PER_PRODUCTPer-product cap (multi-product runs)
FLUID_STAGE_BUDGET_<STAGE>Per-stage budget, e.g. FLUID_STAGE_BUDGET_PLAN

See cost tracking for how overruns surface.

OpenTofu on runners

Cloud applies route through the OpenTofu engine, which shells out to the tofu binary:

  • Version floor — tofu must be >= 1.6.0; older versions fail loud before any state is touched.
  • Provision on demand — fluid apply --ensure-opentofu downloads a pinned, SHA-256-verified OpenTofu build when tofu is missing (no root or gpg needed). fluid generate ci bakes this into the apply stage so generated pipelines work on any runner.
  • Timeouts — each tofu subprocess has a wall-clock cap of 1800 s by default; raise it for very large first applies with FLUID_TOFU_TIMEOUT_SECONDS.
  • Review before apply — fluid generate iac <contract> emits a deterministic, credential-free main.tf.json you can archive or review in a PR; see fluid generate iac.

See also

  • Production Troubleshooting — when a stage goes red
  • Jenkins CI/CD walkthrough and 11-Stage Production Pipeline walkthrough — end-to-end tours
  • fluid generate — full generate ci reference
  • fluid apply / fluid plan / fluid bundle — stage command references
  • Environment variables — the canonical FLUID_* index
  • Credential resolver — ${SECRET:...} resolution order
Edit this page on GitHub
Last Updated: 7/18/26, 7:43 AM
Contributors: fas89
Next
Production Troubleshooting