Deploy to
Kubernetes.
Interactive CLI for deploying apps to Kubernetes via GitLab CI. Configure once, deploy on every push.
npx deploy-jagu-app initFrom zero to deployed
One command walks you through the entire setup. Every step is optional — skip any and run the individual commands later.
Interactive wizard
Run one command and the wizard guides you through every step — from cluster config to deployment. Cluster settings are saved as named presets and reused across projects.
npx deploy-jagu-app initOr run each step individually
Create your GitLab repository
Start with a new or existing GitLab project. Your code, your repo.
Configure the project
Set up cluster connection, GitLab project, and app config. Cluster settings are saved as reusable presets.
npx deploy-jagu-app initGenerate manifests & CI config
Creates Kubernetes manifests and an includable .gitlab-ci.deploy.yml for your pipeline.
npx deploy-jagu-app generateSet up CI/CD variables
Creates a deploy token and sets all required CI variables via the GitLab API. Detects existing variables and asks before overwriting.
npx deploy-jagu-app setupPush to GitLab
Commits the generated files and pushes to your repository.
Register your apps
Triggers the one-time registration CI job that connects your app to the cluster.
npx deploy-jagu-app registerDeploy automatically
Every push to main now triggers a deployment. Your app is live.
Everything you need to ship
From single apps to multi-tenant SaaS platforms, deploy-jagu-app handles the infrastructure.
Single App Deploy
Deploy a single application with generated Kubernetes manifests and automated CI/CD pipelines. One command to set up, automatic deploys on every push.
Monorepo Support
Deploy multiple independent apps from one repository. Each gets its own manifests, namespace, and deploy pipeline.
npx deploy-jagu-app addMulti-tenant Instances
Deploy the same codebase multiple times with different domains, databases, and config per tenant. One build, many deploys.
npx deploy-jagu-app add-instancePostgreSQL Databases
Provision dedicated PostgreSQL databases via Crossplane with automatic user, role, and grant creation.
S3-Compatible Storage
Create DigitalOcean Spaces buckets with scoped access keys via Crossplane and OpenTofu.
Review Apps
Automatic preview deployments for every merge request with unique URLs. Cleaned up when the MR is closed.
GitLab CI Integration
Generates complete .gitlab-ci.yml with register, build, deploy, and review stages. Uses GitLab CI components for clean pipelines.
Configurable Cluster
No hardcoded infrastructure. Cluster settings are saved as named presets and reused across projects. Modify individual values without re-entering everything.
CLI Commands
Five commands cover the entire deployment lifecycle.
initAll-in-one wizard — configure, generate, set up CI, push, and register in one interactive flow. Each step is skippable.
addAdd another app to an existing project for monorepo deployments.
add-instanceAdd a deploy instance to a multi-tenant app — same code, different config.
generateGenerate Kubernetes manifests and an includable CI deploy config from your jagu-deploy.yaml.
setupCreate a deploy token and set CI/CD variables via GitLab API. Detects existing variables.
registerTrigger the cluster registration CI job via the GitLab API.
Configuration
Everything lives in jagu-deploy.yaml at your project root.
# Cluster infrastructure settings cluster: baseDomain: cluster.example.com gitlabHost: gitlab.example.com ciComponentsRegistry: gitlab.example.com/infra/ci-components k8sAgentName: my-cluster dbHost: "10.0.0.1" pgProviderConfig: pg-admin # GitLab project gitlabGroup: my-group gitlabProject: my-app # Apps apps: - appName: my-app containerPort: 3000 namespace: app primaryDomain: my-app.example.com needsDatabase: true needsBucket: false needsReviewApps: true
Common questions
Ready to deploy?
One command to set up. Automatic deploys on every push.
npx deploy-jagu-app init