Automate deployments by connecting your GitHub repositories to Ankra GitOps
This guide shows you how to build a CI/CD pipeline with GitHub Actions that automatically deploys your applications to Kubernetes when you push code. Your workflow builds container images and updates the GitOps repository. Ankra handles the rest.
First, connect a GitHub repository to your cluster. This enables GitOps and installs the necessary components on your cluster.
1
Navigate to Integration Settings
Go to your cluster → Settings → Integration tab.
2
Add a GitHub Credential
If you haven’t connected GitHub yet, you’ll see a prompt to connect a repository.Select an existing GitHub credential from the dropdown, or click to add a new one. This authorizes Ankra to access your repositories.
3
Select a Repository
Choose the repository that will store your GitOps configuration. This can be an existing repo or a new one.
We recommend creating a dedicated repository (e.g., infrastructure-gitops) to keep your cluster configurations separate from application code.
4
Confirm Installation
When you connect for the first time, Ankra will install:
In Ankra, manifests are organized into Stacks. A Stack is a collection of related Kubernetes resources that are deployed together.
1
Open the Stacks Page
Navigate to your cluster → Stacks.
2
Create a New Stack
Click Create to open the Stack Builder.
3
Name Your Stack
Give your stack a descriptive name, like backend-services or production-apps.
4
Add a Manifest Using AI
Press ⌘+J (or Ctrl+J) to open the AI Assistant and describe your deployment:
Create a deployment manifest for my backend service:- Image: ghcr.io/my-org/backend:latest- Namespace: production- 2 replicas- Port 8080- Health check on /health- 256Mi memory, 100m CPU requests
The AI will provide a manifest you can add to your stack.
5
Create the Stack
Review your configuration in the Builder tab, then click Create Stack.Ankra will commit the manifests to your GitOps repository and deploy them to your cluster.
You can view your stack’s manifests in the GitOps repository under clusters/{cluster-name}/manifests/.
This creates deploy_key (private) and deploy_key.pub (public).
2
Add Public Key to GitOps Repo
Go to your GitOps repository on GitHub → Settings → Deploy keys → Add deploy key.Paste the contents of deploy_key.pub and check Allow write access.
3
Add Private Key to App Repo
Go to your application repository → Settings → Secrets and variables → Actions.Create a new repository secret called GITOPS_DEPLOY_KEY with the contents of deploy_key.
Add a GitHub Actions workflow to your application repository that builds your container and updates the GitOps repo.
1
Create the Workflow File
In your application repository, create .github/workflows/deploy.yml.
2
Use the AI to Generate the Workflow
Open the AI Assistant (⌘+J) and describe your pipeline:
Generate a GitHub Actions workflow that:- Triggers on push to main branch- Builds a Docker image from my Dockerfile- Pushes to GitHub Container Registry- Tags with the git SHA- Updates my GitOps repo at github.com/my-org/infrastructure-gitops- Updates the image tag in clusters/my-cluster/manifests/backend-deployment.yaml
The AI will generate a complete workflow tailored to your setup.
3
Add Registry Secrets
Add these secrets to your application repository under Settings → Secrets and variables → Actions:
Secret
Description
GITOPS_DEPLOY_KEY
The SSH private key from Step 3
GitHub Container Registry (GHCR) is available by default in GitHub Actions via the GITHUB_TOKEN — no extra registry secrets needed. For external registries (GCR, ECR, Docker Hub), add the appropriate credentials as secrets.
Example Workflow: GitHub Container Registry
Here’s a workflow using GitHub’s built-in container registry. Use the AI to customize it for your setup:
To add CI/CD for additional services, use the AI Assistant to scaffold everything:
1
Add to Existing Stack or Create New
Either edit your existing stack or create a new one for the service.
2
Generate the Deployment Manifest
Open the AI Assistant (⌘+J) and describe your service:
Add a deployment for my frontend service:- Image: ghcr.io/my-org/frontend- Namespace: production- 3 replicas- Port 3000- Expose via a Service on port 80
3
Generate the CI Workflow
In your frontend app repo, create .github/workflows/deploy.yml or ask the AI:
Generate a GitHub Actions workflow to build and deploy my frontend:- Build from ./frontend/Dockerfile- Push to GitHub Container Registry- Update clusters/my-cluster/manifests/frontend-deployment.yaml in my GitOps repo
4
Add the Secrets
Copy the same secrets (GITOPS_DEPLOY_KEY, registry credentials) to the new repository.
Use these prompts with the AI Assistant (⌘+J) to set up your CI/CD:
Create a Deployment
Create a deployment manifest for my backend service:- Image: ghcr.io/my-org/backend:latest- Namespace: production- 2 replicas with rolling update strategy- Port 8080- Health checks on /health and /ready- Resource requests: 256Mi memory, 100m CPU- Resource limits: 512Mi memory, 500m CPU- Environment variables from a ConfigMap called backend-config
Create a Complete Service Stack
Set up a complete service stack for my API:- Deployment with 3 replicas- Service exposing port 80- Ingress with TLS using cert-manager- HorizontalPodAutoscaler scaling 2-10 replicas at 70% CPU- PodDisruptionBudget allowing 1 unavailable
Add Image Pull Secret
Create a docker registry secret for pulling images from:- Registry: ghcr.io- Namespace: productionThen update my backend deployment to use this secret.
Generate GitHub Actions Workflow
Generate a GitHub Actions workflow that:- Builds my Docker image on push to main- Pushes to GitHub Container Registry- Updates clusters/prod/manifests/app-deployment.yaml in my GitOps repo- Only builds when files in src/ or Dockerfile change
Add Canary Deployment
Modify my deployment to support canary releases:- Create a canary deployment with 1 replica- Use labels to route 10% of traffic to canary- Add a Service that selects both stable and canary pods
Troubleshoot Deployment
My backend deployment isn't updating after CI pushed a new image.Help me troubleshoot why the pods aren't rolling out.
The AI Assistant has full context of your cluster. It can see your existing resources, logs, and events. Describe what you want to achieve and it will generate the right configuration.
Always use unique, immutable tags like ${{ github.sha }} or ${{ github.run_number }}. Avoid relying solely on latest.Ask the AI: “Ensure my deployment uses immutable image tags and imagePullPolicy IfNotPresent”
Use GITHUB_TOKEN for GHCR
GitHub Actions provides GITHUB_TOKEN automatically — no need to create a Personal Access Token for pushing to GHCR. Just add packages: write to your job permissions.
Leverage GitHub Actions Cache
Use cache-from: type=gha and cache-to: type=gha,mode=max with docker/build-push-action to speed up builds using GitHub’s built-in Actions cache.
Add Health Checks
Let the AI configure proper health checks for your deployments.Ask the AI: “Add appropriate liveness and readiness probes to my backend deployment for a Node.js app”
Set Resource Limits
Prevent runaway resource usage with proper limits.Ask the AI: “Review my deployment and suggest appropriate resource requests and limits based on a typical web API”
Use SOPS for Secrets
Encrypt sensitive values in your GitOps repository.Ask the AI: “Help me encrypt my database password using SOPS”
Use Environment Protection Rules
For production deployments, set up GitHub Environments with required reviewers and branch restrictions to gate deployments.