Add gates, retries, and chains to Argo CD.

Trigger argocd app sync from CI completions, image pushes, or any HTTP signal. Add manual approval gates between staging and prod, retry transient sync failures, poll until Synced and Healthy, and chain Terraform, Ansible, and Argo CD in one execution history.

Around every sync, every revision, every cluster.

Argo CD reconciles desired state from Git. Kestra wraps that controller with the orchestration layer above it: when a sync fires, what runs before, who approves the promotion to prod, and where the cross-tool audit trail lives. The Argo CD server, the Application objects, and the cluster reconciliation stay where they are.

Triggers beyond Git polling: webhooks, image push, CI events

Argo CD reconciles when its controller polls Git, which adds reconcile lag on every change. Kestra fires argocd app sync the moment upstream signals arrive: a GitHub Actions completion, a Docker image push to the registry, a Terraform apply finishing, or any HTTP webhook. The flow waits for upstream confirmation, then triggers the sync directly with the matching revision.

Pause-and-resume between staging and prod

The native Pause task suspends the flow after the staging sync confirms Synced and Healthy via apps.Status. A named reviewer reads the staging diff in the Kestra UI and explicitly resumes. Only then does the prod sync fire. The reviewer identity and timestamp are recorded in the execution history alongside the Argo CD revision.

Provision, configure, deploy in one chain

terraform apply provisions the cluster and writes outputs (kubeconfig, ingress IP). ansible-playbook configures the underlying nodes. argocd app sync deploys the app stack. All three share one execution history. If Ansible fails, only the Ansible step retries. The Terraform apply does not re-run.

Poll until Synced and Healthy, alert on either fail

apps.Status returns syncStatus and healthStatus. Pair it with a retry block to wait until both report green, with a hard timeout. On Degraded or sync timeout, the errors branch sends a Slack alert with the app name, the failing revision, and a direct link to the Argo CD UI.

Block the sync when the image is unsigned or unscanned

Trivy scans the candidate image for critical CVEs. Cosign verifies the signature against the keyless attestation from the build. A manifest validator checks the Kustomize or Helm output. Each runs as a flow step before apps.Sync. If any check fails, the sync never fires and on-call gets a structured alert with the scan output.

One flow, many Argo apps, environment-shaped inputs

Pass the Argo CD app name and Git revision as flow inputs. The same flow promotes the same revision through staging, qa, and prod Argo apps in sequence, with a Pause gate before every environment beyond staging. No duplicate YAML per environment, the inputs determine which app gets synced.

How GitOps teams use Argo CD and Kestra

Patterns platform teams run in production today. Each one shows the flow end to end, with the real plugin classes in play.

Event-driven

Sync Argo CD the moment the CI build is green

A GitHub Actions webhook fires when the build artifact is signed and pushed. The flow validates the payload, triggers argocd app sync at the new revision, polls apps.Status until Synced and Healthy, then posts to Slack with the revision and the application URL. No more reconcile lag while the Argo CD git poller catches up to the new commit.

Sync fires on the upstream event

The sync runs the moment CI finishes, not when Argo CD's controller next polls Git. Cuts minutes from the deploy lag.

Revision pinned at trigger time

The flow passes the exact commit SHA from the webhook payload to apps.Sync, so the sync hits the verified build.

Health gates the success message

Slack only posts :white_check_mark: once apps.Status reports both Synced and Healthy.

Failure goes to on-call with the link

On Degraded or timeout, the errors branch pages on-call with the application name and a direct link to the Argo CD UI.

ci webhook
GitHub Actions
validate payload
signed digest
argocd sync
at revision
poll status
until Healthy
notify
Slack with revision
Multi-tool

Provision with Terraform, configure with Ansible, deploy with Argo CD

terraform apply provisions the EKS cluster and writes the cluster endpoint to a task artifact. ansible-playbook configures the underlying nodes using that endpoint, with per-step retries. argocd app sync deploys the app stack. Slack confirms when all three steps succeed. If Ansible fails, only Ansible retries. The Terraform apply does not re-run.

One execution ID across three tools

Terraform outputs flow forward to Ansible. Ansible's host facts flow forward to the Argo CD step. One UI to debug.

Per-step retries, no full re-run

If ansible-playbook hits a transient SSH error, Kestra retries only that step. Terraform apply does not re-run.

Gate between provision and configure

A Pause task between Terraform and Ansible lets a reviewer inspect the new infra before configuration starts.

Argo CD does what it does best

Kestra coordinates the chain. Argo CD still owns the cluster reconciliation, the manifests, and the rollback target.

scheduled
release window
terraform apply
EKS cluster
approve
before configure
ansible playbook
node config
argocd sync
app deploy
status check
Synced + Healthy
notify
Slack summary
Promotion

Promote the same revision through staging, qa, and prod

The flow takes a revision SHA as input. apps.Sync deploys it to the staging Argo app. apps.Status waits for Synced and Healthy. An HTTP probe runs smoke tests against the staging endpoint. A Pause task gates the promotion. Once a reviewer resumes, the same revision deploys to the prod Argo app, followed by another status poll and probe.

Same revision, every environment

The flow pins the same Git SHA across staging and prod. No drift between what was tested and what ships.

Named reviewer per promotion

The Pause task records who approved the prod sync and when. The Argo CD revision links back from the audit log.

Smoke test before promotion

An HTTP probe runs against staging before the gate opens. A 5xx from staging stops the promotion automatically.

Per-environment Argo app

application is a flow input, so staging-app, qa-app, and prod-app are three Argo Application objects driven from one flow definition.

revision input
git SHA
sync staging
staging app
staging status
Synced + Healthy
smoke probe
/health
approval gate
named reviewer
sync prod
prod app
prod status
Synced + Healthy
notify
Slack release
Supply chain

Pre-sync supply chain verification with Trivy and Cosign

The flow runs on every image push to the registry. Trivy scans the new image for critical CVEs. Cosign verifies the keyless signature against the build provenance. If both pass, apps.Sync fires at the matching revision. If either fails, the sync never runs and on-call gets the scan output as a structured Slack message.

Sync blocked when checks fail

An If task evaluates Trivy and Cosign exit codes. If either is non-zero, the sync step never runs.

Scan output flows forward

Trivy's JSON output is captured as a task artifact and attached to the Slack alert, so on-call sees exactly which CVE blocked the deploy.

Same digest in registry and Argo CD

The image digest from the webhook is the same one passed to Argo CD's revision. No room for a swapped artifact between scan and sync.

registry webhook
image push
trivy scan
CRITICAL CVE check
cosign verify
signature check
gate on results
block on fail
argocd sync
at verified digest
status poll
until Healthy
notify
result to Slack
Terraform provisions the VM, Ansible configures the application, ArgoCD handles the deployment. All orchestrated through Kestra.
Censhare

Blueprints for Argo CD orchestration.

One blueprint per use case above. Copy the YAML, point it at your Argo CD server, ship it.

Event-driven sync on CI completion
Terraform, Ansible, Argo CD chain
Staged promotion with approval gate

Sync Argo CD the moment CI passes, then poll until Healthy

A GitHub Actions webhook triggers the flow with the new revision. Kestra calls apps.Sync, polls apps.Status until both syncStatus and healthStatus report green, then posts to Slack with the revision and application URL.

Explore Blueprints

Provision the cluster, configure the nodes, deploy the app

terraform apply provisions an EKS cluster. A Pause task gates before configuration. ansible-playbook configures the nodes. argocd app sync deploys the app. apps.Status waits for Healthy. Slack confirms or alerts. Per-step retries keep the chain moving on transient errors.

Explore Blueprints

Sync staging, smoke test, gate, then sync prod with the same revision

The flow takes a revision SHA as input. Syncs the staging Argo app, polls until Healthy, runs a smoke test against the staging endpoint, pauses for a named reviewer, then syncs the prod Argo app at the same revision. Slack notifies at each stage.

Explore Blueprints

Kestra vs Argo CD orchestration alternatives

Capability
GitHub Actions + argocd CLI
Argo Workflows
Argo CD ApplicationSet
Trigger argocd app sync from non-Git events
Webhook, S3, Kafka, image push, schedule, any HTTP signal
Webhook + custom Action stepsWebhook + custom workflow templatesGit-only by design
Approval gate (Pause/resume) between syncs
Native Pause + resume, named reviewer logged
GitHub Environments approval (Action-specific)Suspend node, no first-class reviewer logNot native
Sync status polling until Synced + Healthy
apps.Status + retry block in one task
Custom polling script in BashWorkflow loop with delay stepNative, no external polling needed
Chain Terraform + Ansible + Argo CD
Native plugin tasks, outputs flow forward
Each tool as a separate Action, manual handoffWorkflow templates per tool, no native chainingArgo CD-centric, no Terraform or Ansible
Pre-sync image scan / signature verify as flow step
Trivy + Cosign as upstream tasks, sync blocked on fail
Action steps, manual conditional skipWorkflow steps, custom conditionalArgo CD does not run scans
Multi-environment promotion in one flow
Single flow, app and revision as inputs
One Action per environment, repeated YAMLWorkflow per environmentApplicationSet generates apps, no flow logic
Cross-stack execution history
One execution ID across Terraform, Ansible, Argo CD
Action run log, Argo CD events separatelyWorkflow events, Argo CD events separatelyArgo CD events only
Self-hosted, air-gapped, OSS edition
Self-hosted by default, OSS edition free
Self-hosted GHE Actions or hostedSelf-hosted KubernetesSelf-hosted Kubernetes
Beyond Argo CD: orchestrate the rest of the stack
1300+ plugins, cross-stack
Action marketplace, CI-centricKubernetes-centric workflow engineArgo CD app delivery only

Argo CD & Kestra: common questions

Find answers to your questions right here, and don't hesitate to Contact Us if you couldn't find what you're looking for.

See How

Ready to orchestrate Argo CD beyond Git polling?

Trigger argocd app sync on CI completions or image pushes, gate promotion to prod with a named reviewer, chain Terraform and Ansible upstream, and verify supply chain checks before every deploy. Open source, self-hosted, event-driven.