#!/usr/bin/env sh k3d cluster create inception-of-things # Setup a metrics-server to prevent dumb errors kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml kubectl patch deployment metrics-server -n kube-system --type='json' \ -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--kubelet-insecure-tls"}]' echo '> metrics-server is starting (this takes around ~3 minutes)...' kubectl wait --for=condition=available deployment/metrics-server -n kube-system --timeout=500s kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml echo "> ArgoCD is starting (this takes around ~6 minutes)..." sleep 10 echo '> Starting watch...' sleep 5 # So we have a progress-ish indicator visual while true; do ready=$(kubectl get pods -n argocd --no-headers 2>/dev/null | grep -E "([0-9]+)/\1" | wc -l) total=$(kubectl get pods -n argocd --no-headers 2>/dev/null | wc -l) clear kubectl get pods -n argocd if [ "$ready" -eq "$total" ] && [ "$total" -gt 0 ]; then echo "All ArgoCD pods are ready!" sleep 5 break fi sleep 30 done SCRIPT_PATH="$(realpath "${BASH_SOURCE[0]}")" SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" kubectl create namespace dev kubectl apply -n argocd -f "$SCRIPT_DIR/../confs/argocd-app.yml" echo '>' echo '> App is starting (this takes around ~30 seconds)...' echo '>' kubectl wait --namespace dev \ --for=condition=ready pod \ --selector=app=app-p3 \ --timeout=300s echo 'App imported in ArgoCD' sleep 2 kubectl create namespace gitlab echo '>' echo '> GitLab is starting (this takes around ~10 minutes)...' echo '>' helm repo add gitlab https://charts.gitlab.io/ help repo update helm upgrade --install gitlab gitlab/gitlab \ --namespace gitlab \ --timeout 1200s \ --set global.hosts.domain=gitlab-app.com \ --set global.ingress.enabled=true \ --set global.ingress.className=traefik \ --set certmanager.enabled=false \ --set certmanager-issuer.email=dummy@gitlab-app.com \ --set global.ingress.configureCertmanager=false \ --set nginx-ingress.enabled=false \ --set postgresql.enabled=true \ --set redis.install=true kubectl wait --namespace gitlab \ --for=condition=available \ --timeout=1200s \ deployment/gitlab-webservice-default # kubectl port-forward -n gitlab svc/gitlab-webservice-default 8081:8181 1>/dev/null 2>/dev/null & TRAEFIK_IP=$(kubectl get service -n kube-system traefik -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo Traefik ip is: $TRAEFIK_IP if grep -q argo-app.com /etc/hosts; then sudo sed -i "/argo-app.com/d" /etc/hosts fi echo "$TRAEFIK_IP argo-app.com" | sudo tee -a "/etc/hosts" echo App is now reachable at argo-app.com echo if grep -q gitlab-app.com /etc/hosts; then sudo sed -i "/gitlab-app.com/d" /etc/hosts fi echo "$TRAEFIK_IP gitlab-app.com" | sudo tee -a "/etc/hosts" echo Gitlab is now reachable at gitlab-app.com echo echo "=== Login into ArgoCD with: ===" echo Username: admin echo -n "Password: " kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d echo echo "===============================" echo echo "=== Login into Gitlab with: ===" echo Username: admin echo -n "Password: " kubectl -n gitlab get secret gitlab-gitlab-initial-root-password -o jsonpath='{.data.password}' | base64 -d echo echo "==============================="