Skip to content

Installation Guide

This guide covers all installation methods for TRIGRA.

Section titled “Method 1: Quick Install Script (Recommended)”

The easiest way to install TRIGRA:

Terminal window
# Install to default namespace
curl -fsSL https://raw.githubusercontent.com/Taiwrash/trigra/main/quick-install.sh | bash -s -- default
# Install to custom namespace
curl -fsSL https://raw.githubusercontent.com/Taiwrash/trigra/main/quick-install.sh | bash -s -- my-namespace
# With custom webhook secret
curl -fsSL https://raw.githubusercontent.com/Taiwrash/trigra/main/quick-install.sh | bash -s -- default my-secret-key

The script will:

  • ✅ Check prerequisites (kubectl, cluster connection)
  • ✅ Create namespace if needed
  • ✅ Generate webhook secret (if not provided)
  • ✅ Deploy RBAC, controller, and service
  • ✅ Optionally start Cloudflare Tunnel

For more control over installation:

Terminal window
# Clone the repository
git clone https://github.com/Taiwrash/trigra.git
cd trigra
# Generate webhook secret
WEBHOOK_SECRET=$(openssl rand -hex 32)
# Install with Helm
helm install trigra ./helm/trigra \
--namespace default \
--set github.webhookSecret="$WEBHOOK_SECRET" \
--set github.token="YOUR_GITHUB_TOKEN" # Optional for private repos
# Get webhook URL
kubectl get svc trigra

For full manual control:

Terminal window
# 1. Apply RBAC
kubectl apply -f https://raw.githubusercontent.com/Taiwrash/trigra/main/deployments/kubernetes/rbac.yaml
# 2. Create secret
kubectl create secret generic trigra-secret \
--from-literal=GITHUB_TOKEN="YOUR_TOKEN" \
--from-literal=WEBHOOK_SECRET="$(openssl rand -hex 32)"
# 3. Deploy controller
kubectl apply -f https://raw.githubusercontent.com/Taiwrash/trigra/main/deployments/kubernetes/deployment.yaml
kubectl apply -f https://raw.githubusercontent.com/Taiwrash/trigra/main/deployments/kubernetes/service.yaml

Best for clusters with LoadBalancer support (cloud providers, MetalLB):

service:
type: LoadBalancer

For clusters without LoadBalancer:

Terminal window
helm install trigra ./helm/trigra \
--set service.type=NodePort \
--set service.nodePort=30080

Access via: http://<NODE-IP>:30080/webhook

For production with Ingress controller:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: trigra
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- gitops.yourdomain.com
secretName: trigra-tls
rules:
- host: gitops.yourdomain.com
http:
paths:
- path: /webhook
pathType: Prefix
backend:
service:
name: trigra
port:
number: 80
Terminal window
# Check deployment status
kubectl get deployment trigra
kubectl get pods -l app=trigra
# Check service
kubectl get svc trigra
# View logs
kubectl logs -f deployment/trigra
# Test health endpoint
curl http://<SERVICE-IP>/health
Terminal window
helm upgrade trigra ./helm/trigra \
--reuse-values \
--set image.tag=new-version
Terminal window
kubectl apply -f deployments/kubernetes/deployment.yaml
kubectl rollout restart deployment/trigra
Terminal window
helm uninstall trigra
Terminal window
kubectl delete -f deployments/kubernetes/
kubectl delete clusterrolebinding trigra
kubectl delete clusterrole trigra
Terminal window
kubectl describe pod -l app=trigra
kubectl logs -l app=trigra
Terminal window
# Check service is accessible
kubectl get svc trigra
# Test health endpoint
curl http://<SERVICE-IP>/health
# Check GitHub webhook deliveries in your repo settings
Terminal window
kubectl get sa trigra
kubectl get clusterrolebinding trigra