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

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 init

Or run each step individually

1

Create your GitLab repository

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

2

Configure the project

Set up cluster connection, GitLab project, and app config. Cluster settings are saved as reusable presets.

$npx deploy-jagu-app init
3

Generate manifests & CI config

Creates Kubernetes manifests and an includable .gitlab-ci.deploy.yml for your pipeline.

$npx deploy-jagu-app generate
4

Set 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 setup
REGISTRY_DEPLOY_USERREGISTRY_DEPLOY_PASSWORDAGENT_DEPLOY_USERAGENT_DEPLOY_PASSAPP_ENV_*
5

Push to GitLab

Commits the generated files and pushes to your repository.

6

Register your apps

Triggers the one-time registration CI job that connects your app to the 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. Cluster settings are saved as named presets and reused across projects. Modify individual values without re-entering everything.

Reference

CLI Commands

Five commands cover the entire deployment lifecycle.

init

All-in-one wizard — configure, generate, set up CI, push, and register in one interactive flow. Each step is skippable.

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 an includable CI deploy config from your jagu-deploy.yaml.

setup

Create a deploy token and set CI/CD variables via GitLab API. Detects existing variables.

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