github.com/freiheit-com/kuberpult@v1.24.2-0.20240328135542-315d5630abe6/tests/integration-tests/cluster-setup/argocd-kuberpult.sh (about) 1 #!/usr/bin/env bash 2 3 set -eu 4 set -o pipefail 5 6 # prefix every call to "echo" with the name of the script: 7 function print() { 8 /bin/echo "$0:" "$@" 9 } 10 11 function waitForDeployment() { 12 ns="$1" 13 label="$2" 14 print "waitForDeployment: $ns/$label" 15 until kubectl wait --for=condition=ready pod -n "$ns" -l "$label" --timeout=30s 16 do 17 sleep 4s 18 print "logs:" 19 kubectl -n "$ns" logs -l "$label" || echo "could not get logs for $label" 20 print "describe pod:" 21 kubectl -n "$ns" describe pod -l "$label" 22 print ... 23 done 24 } 25 26 function portForwardAndWait() { 27 ns="$1" 28 deployment="$2" 29 portHere="$3" 30 portThere="$4" 31 ports="$portHere:$portThere" 32 print "portForwardAndWait for $ns/$deployment $ports" 33 kubectl -n "$ns" port-forward "$deployment" "$ports" & 34 print "portForwardAndWait: waiting until the port forward works..." 35 until nc -vz localhost "$portHere" 36 do 37 sleep 1s 38 done 39 } 40 41 print "setting up manifest repo" 42 waitForDeployment "git" "app.kubernetes.io/name=server" 43 portForwardAndWait "git" "deployment/server" "$SSH_HOST_PORT" "22" 44 45 git clone ssh://git@localhost:$SSH_HOST_PORT/git/repos/manifests 46 47 cp -r environments manifests/ 48 49 cd manifests 50 git add environments 51 git commit -m "add initial environments from template" 52 print "pushing environments to manifest repo..." 53 git push origin master 54 55 cd - 56 57 ## argoCd 58 print "starting argoCd..." 59 60 helm repo add argo-cd https://argoproj.github.io/argo-helm 61 62 cat <<YAML > argocd-values.yml 63 configs: 64 ssh: 65 knownHosts: | 66 $(sed -e "s/^/ /" </kp/known_hosts) 67 cm: 68 accounts.kuberpult: apiKey 69 timeout.reconciliation: 0s 70 params: 71 controller.repo.server.plaintext: "true" 72 server.repo.server.plaintext: "true" 73 repo.server: kuberpult-cd-service:8443 74 rbac: 75 policy.csv: | 76 p, role:kuberpult, applications, get, */*, allow 77 g, kuberpult, role:kuberpult 78 79 YAML 80 helm install argocd argo-cd/argo-cd --values argocd-values.yml --version 5.36.0 81 82 print applying app... 83 84 kubectl apply -f - <<EOF 85 apiVersion: argoproj.io/v1alpha1 86 kind: AppProject 87 metadata: 88 name: test-env 89 namespace: ${ARGO_NAMESPACE} 90 spec: 91 description: test-env 92 destinations: 93 - name: "dest1" 94 namespace: '*' 95 server: https://kubernetes.default.svc 96 sourceRepos: 97 - '*' 98 --- 99 apiVersion: argoproj.io/v1alpha1 100 kind: Application 101 metadata: 102 name: root 103 namespace: ${ARGO_NAMESPACE} 104 spec: 105 destination: 106 namespace: ${ARGO_NAMESPACE} 107 server: https://kubernetes.default.svc 108 project: test-env 109 source: 110 path: argocd/v1alpha1 111 repoURL: ssh://git@server.${GIT_NAMESPACE}.svc.cluster.local/git/repos/manifests 112 targetRevision: HEAD 113 syncPolicy: 114 automated: {} 115 EOF 116 117 waitForDeployment "default" "app.kubernetes.io/name=argocd-server" 118 portForwardAndWait "default" service/argocd-server 8080 443 119 120 argocd_adminpw=$(kubectl -n default get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d) 121 argocd login --port-forward --username admin --password "$argocd_adminpw" 122 token=$(argocd account generate-token --port-forward --account kuberpult) 123 124 kubectl create ns development 125 kubectl create ns development2 126 kubectl create ns staging 127 128 ## kuberpult 129 print 'installing kuberpult helm chart...' 130 131 cat <<VALUES > vals.yaml 132 cd: 133 resources: 134 limits: 135 memory: 200Mi 136 cpu: 0.05 137 requests: 138 memory: 200Mi 139 cpu: 0.05 140 frontend: 141 resources: 142 limits: 143 memory: 200Mi 144 cpu: 0.05 145 requests: 146 memory: 200Mi 147 cpu: 0.05 148 rollout: 149 enabled: true 150 resources: 151 limits: 152 memory: 200Mi 153 cpu: 0.05 154 requests: 155 memory: 200Mi 156 cpu: 0.05 157 ingress: 158 domainName: kuberpult.example.com 159 log: 160 level: INFO 161 git: 162 url: "ssh://git@server.${GIT_NAMESPACE}.svc.cluster.local/git/repos/manifests" 163 sourceRepoUrl: "https://github.com/freiheit-com/kuberpult/tree/{branch}/{dir}" 164 ssh: 165 identity: | 166 $(sed -e "s/^/ /" </kp/client) 167 known_hosts: | 168 $(sed -e "s/^/ /" </kp/known_hosts) 169 argocd: 170 token: "$token" 171 server: "https://argocd-server.${ARGO_NAMESPACE}.svc.cluster.local:443" 172 insecure: true 173 refresh: 174 enabled: true 175 pgp: 176 keyRing: | 177 $(sed -e "s/^/ /" </kp/kuberpult-keyring.gpg) 178 VALUES 179 180 # Get helm dependency charts and unzip them 181 (rm -rf charts && helm dep update && cd charts && for filename in *.tgz; do tar -xf "$filename" && rm -f "$filename"; done;) 182 183 helm template ./ --values vals.yaml > tmp.tmpl 184 helm install --values vals.yaml kuberpult-local ./ 185 print 'checking for pods and waiting for portforwarding to be ready...' 186 187 kubectl get deployment 188 kubectl get pods 189 190 print "port forwarding to cd service..." 191 waitForDeployment "default" "app=kuberpult-cd-service" 192 portForwardAndWait "default" deployment/kuberpult-cd-service 8082 8080 193 194 waitForDeployment "default" "app=kuberpult-frontend-service" 195 portForwardAndWait "default" "deployment/kuberpult-frontend-service" "8081" "8081" 196 print "connection to frontend service successful" 197 198 kubectl get deployment 199 kubectl get pods 200 201 for i in $(seq 1 3) 202 do 203 /kp/create-release.sh echo; 204 done 205 206 echo "Done. Kuberpult and argoCd are running."