New to Kestra?
Use blueprints to kickstart your first workflows.
Promote Kestra flows across tenants and environments automatically with the Kestra REST API. A scheduled multi-tenant CI/CD blueprint for workflow deployment at scale.
Keeping development, QA, and staging tenants in sync by hand is slow and error prone. This system blueprint automates multi-tenant CI/CD for Kestra itself: it exports every flow from a source tenant and imports them into a target tenant on a daily schedule, using only the Kestra REST API. No external CI/CD tooling, manual ZIP downloads, or copy-paste promotion required, just a declarative flow that keeps environments aligned and repeatable.
daily_at_5_pm trigger (io.kestra.plugin.core.trigger.Schedule, cron 0 17 * * *) starts the promotion run once per day.dev_flows task (io.kestra.plugin.core.http.Download) calls the Kestra API endpoint /api/v1/{tenantId}/flows/export/by-query with a Bearer token and downloads all source-tenant flows as a ZIP archive.import_to_staging task (io.kestra.plugin.core.http.Request) POSTs that archive as multipart/form-data to /api/v1/{newTenant}/flows/import, loading every flow into the target tenant.pluginDefaults entry forces a constant retry (3 attempts, PT1S interval) on all io.kestra.plugin.core.http tasks so transient API or network errors do not break the run.The Kestra API can export and import flows, but it cannot schedule, retry, or track the promotion for you. Kestra adds the orchestration layer: an event-driven Schedule trigger, automatic retry on HTTP failures, full execution lineage and logs for every promotion, and a declarative YAML definition you can version and review. The promotion pipeline itself becomes a governed, observable Kestra flow.
API_TOKEN: a Kestra API token (Bearer) with rights to export from the source tenant and import into the target tenant.API_TOKEN secret in the system namespace.host variable to your Kestra instance hostname.newTenant variable to your target tenant id.export/by-query filter to promote only flows from a given namespace or labels.Request tasks.Schedule trigger with a webhook or a Git push to make promotion event-driven.