Open Source CLI Tool

Deploy to
Kubernetes.

Interactive CLI for deploying apps to Kubernetes via GitLab CI. Configure once, deploy on every push.

$npx deploy-jagu-app init
Workflow

From zero to deployed

Set up once, then every push to main triggers an automatic deployment.

1

Create your GitLab repository

Start with a new or existing GitLab project. Your code, your repo.

2

Initialize the project

Configure your cluster connection, GitLab project details, and your first app interactively.

$npx deploy-jagu-app init
3

Generate manifests & CI config

Outputs Kubernetes manifests and a ready-to-use .gitlab-ci.yml with deploy pipelines.

$npx deploy-jagu-app generate
4

Set CI/CD variables in GitLab

Add the required credentials in your project's CI/CD settings.

AGENT_DEPLOY_USERAGENT_DEPLOY_PASSAPP_ENV (optional)
5

Push to GitLab

Commit the generated files and push so the CI configuration is available in your repo.

6

Register your apps

Triggers the one-time registration job that connects your app to the Kubernetes cluster.

$npx deploy-jagu-app register
7

Deploy automatically

Every push to main now triggers a deployment. Your app is live.

Features

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 add

Multi-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-instance

PostgreSQL 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.

Reference

CLI Commands

Five commands cover the entire deployment lifecycle.

init

Initialize a new project — configure cluster settings, GitLab project, and your first app.

add

Add another app to an existing project for monorepo deployments.

add-instance

Add a deploy instance to a multi-tenant app — same code, different config.

generate

Generate Kubernetes manifests and GitLab CI config from your jagu-deploy.yaml.

register

Trigger the cluster registration CI job via the GitLab API.

Configuration

Everything lives in jagu-deploy.yaml at your project root.

jagu-deploy.yaml
# 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
FAQ

Common questions

Ready to deploy?

One command to set up. Automatic deploys on every push.

$npx deploy-jagu-app init