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
Set up once, then every push to main triggers an automatic deployment.
Create your GitLab repository
Start with a new or existing GitLab project. Your code, your repo.
Initialize the project
Configure your cluster connection, GitLab project details, and your first app interactively.
npx deploy-jagu-app initGenerate manifests & CI config
Outputs Kubernetes manifests and a ready-to-use .gitlab-ci.yml with deploy pipelines.
npx deploy-jagu-app generateSet CI/CD variables in GitLab
Add the required credentials in your project's CI/CD settings.
Push to GitLab
Commit the generated files and push so the CI configuration is available in your repo.
Register your apps
Triggers the one-time registration job that connects your app to the Kubernetes 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. Base domain, GitLab host, CI components, database, and storage providers are all configured during init.
CLI Commands
Five commands cover the entire deployment lifecycle.
initInitialize a new project — configure cluster settings, GitLab project, and your first app.
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 GitLab CI config from your jagu-deploy.yaml.
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