ZuploZuplo
LoginStart for Free
  • Documentation
  • API Reference
Getting Started
    Develop in the portal
      1 - Setup Your Gateway2 - Rate Limiting3 - API Key Auth4 - Deploy5 - Dynamic Rate LimitingDynamic MCP Server - Quickstart
    Develop locally with the CLI
      1 - Setup Your Gateway2 - Rate Limiting3 - API Key Auth4 - Deploy5 - Dynamic Rate LimitingDynamic MCP Server - Quickstart
Concepts
API Management
AI Gateway
MCP Gateway
MCP Server
Developer Portal
Development
Deploying & Source Control
    Overview
    GitHub
    GitLab
    Bitbucket
    Azure DevOps
    CircleCI
      Basic DeploymentDeploy and TestPR Preview EnvironmentsLocal testing in CITag-Based ReleasesMulti-Stage Deployment
    Custom CI/CDMonorepo DeploymentTroubleshooting DeploymentsRename/Move Project
Analytics
Observability
Networking & Infrastructure
Account Management
Programming API
Build with AI
Zuplo CLI
Migration Guides
Platform LimitsVersion Support PolicySecuritySupportTrust & ComplianceChangelog
powered by Zudoku
CircleCI

CircleCI: Local testing in CI

Test against a local Zuplo server before deploying anywhere.

Code
version: 2.1 jobs: local-test: docker: - image: cimg/node:24.0 steps: - checkout - run: npm install - run: name: Start local server and run tests command: | npx zuplo dev & # Poll until the server answers — never a fixed sleep deadline=$((SECONDS + 60)) until curl --fail --silent --output /dev/null http://localhost:9000/health; do if (( SECONDS >= deadline )); then echo "Local server did not start within 60s" >&2 exit 1 fi sleep 1 done npx zuplo test --endpoint http://localhost:9000 kill %1 deploy: docker: - image: cimg/node:24.0 steps: - checkout - run: npm install - run: npx zuplo deploy --api-key "$ZUPLO_API_KEY" workflows: test-and-deploy: jobs: - local-test - deploy: requires: - local-test filters: branches: only: main

Local tests run first. Only if they pass does deployment proceed.

The readiness poll replaces a fixed sleep. A sleep is a guess about startup time that is wrong in both directions, and it is the most common reason a gateway test suite "needs" a retry. The example polls /health — add an unauthenticated health route if your gateway does not have one. See health checks.

Next steps

  • Add multi-stage deployment with staging
Edit this page
Last modified on August 21, 2026
PR Preview EnvironmentsTag-Based Releases
On this page
  • Next steps
YAML