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."