Commit 44afb3e9 authored by Nikos Psaromanolakis's avatar Nikos Psaromanolakis
Browse files

fix: Edit .gitlab-ci.yml to support testing of hypo on merge requests

parent af3837e0
Loading
Loading
Loading
Loading
Loading
+79 −39
Original line number Diff line number Diff line
@@ -46,10 +46,30 @@ dev_deploy_job:
    name: labs.etsi.org:5050/osl/hypo/code/org.etsi.osl.hypo.ops/cicd/integration.tests/python-argocd:3.9
    pull_policy: [always, if-not-present]

  variables:
    HELM_RELEASE_NAME: "test"
    HELM_NAMESPACE: "test"
    REMOTE_DEPLOY_DIR: "/home/ubuntu/etsi_installer"

  before_script:
    - mkdir -p /tmp/bin
    - mkdir -p /tmp/bin ~/.ssh
    - chmod 700 ~/.ssh
    - export PATH="/tmp/bin:$PATH"

    # Install SSH client and required utilities
    - |
      if command -v apk >/dev/null 2>&1; then
        apk add --no-cache openssh-client curl tar
      elif command -v apt-get >/dev/null 2>&1; then
        apt-get update
        apt-get install -y --no-install-recommends \
          openssh-client curl tar
        rm -rf /var/lib/apt/lists/*
      else
        echo "Unsupported container base image."
        exit 1
      fi

    # Install age
    - curl -L -o /tmp/age.tar.gz https://github.com/FiloSottile/age/releases/download/v1.2.1/age-v1.2.1-linux-amd64.tar.gz
    - tar -xzf /tmp/age.tar.gz -C /tmp
@@ -62,59 +82,79 @@ dev_deploy_job:
    - sops --version
    - age --version

    # Git configuration
    - git config --global user.email "$GITLAB_USER_EMAIL"
    - git config --global user.name "$GITLAB_USER_NAME"

    # Authenticate Git using the Group Access Token
    - git remote set-url origin "https://${GITLAB_USER_NAME}:${GROUP_ACCESS_TOKEN}@labs.etsi.org/rep/osl/hypo/code/org.etsi.osl.hypo.ops/installer.git"

    # Checkout GitOps branch
    - git fetch origin gitops-cd
    - git checkout gitops-cd
    - git pull origin gitops-cd
    # Configure the SSH private key
    - chmod 600 "$ETSI_SSH_KEY"

    # SOPS key
    - echo "$SOPS_AGE_KEY_PRIVATE" > ~/.sops-age-key.txt
    - chmod 600 ~/.sops-age-key.txt
    - export SOPS_AGE_KEY_FILE=~/.sops-age-key.txt

  script:
    # Decrypt values
    - sops --decrypt charts/hypo/values-cd.enc.yaml > charts/hypo/values-cd.yaml
    # Add the deployment server host key
    - ssh-keyscan -H "$DEPLOYMENT_SERVER_IP" >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts

    # Update Helm values
    - python3 scripts/helm_update_etsi.py $DEV_PORTAL_CART_IMAGE $DEV_TMF_API_IMAGE $DEV_SONATA_CORE_IMAGE $DEV_SONATA_HELM_IMAGE $DEV_SONATA_OSS_IMAGE $DEV_TELEMETRY_IMAGE $DEV_PEERING_IMAGE $DEV_REGISTRY_IMAGE $DEV_FABRIC_IMAGE $DEV_PORTAL
    # Verify SSH connection
    - |
      ssh \
        -i "$ETSI_SSH_KEY" \
        -o IdentitiesOnly=yes \
        -o BatchMode=yes \
        -o ConnectTimeout=10 \
        "$DEPLOYMENT_SERVER_USER@$DEPLOYMENT_SERVER_IP" \
        'echo "SSH connection successful on $(hostname)"'

    # Encrypt values again
    - sops --encrypt --age "$SOPS_AGE_KEY_PUBLIC" charts/hypo/values-cd.yaml > charts/hypo/values-cd.enc.yaml
  script:

    # Cleanup
    - rm -f charts/hypo/values-cd.yaml ~/.sops-age-key.txt
    # Decrypt the installer values directly inside the chart
    - |
      set -eu

    # Commit & Push
    - git add charts/hypo/values-cd.enc.yaml
      sops --decrypt \
        --output charts/hypo/values-installer.yaml \
        "$HELM_VALUES_ENCRYPTED"

    - |
      if git diff --cached --quiet; then
        echo "No changes to commit."
      else
        git commit -m "Update values.yaml for GitOps CD [skip ci]"
        git push origin HEAD:gitops-cd
      fi
      chmod 600 charts/hypo/values-installer.yaml

    # Sync ArgoCD
      # Remove and recreate the temporary remote directory
    - |
      ssh \
        -i "$ETSI_SSH_KEY" \
        -o IdentitiesOnly=yes \
        "$DEPLOYMENT_SERVER_USER@$DEPLOYMENT_SERVER_IP" "
          rm -rf '$REMOTE_DEPLOY_DIR'
          mkdir -p '$REMOTE_DEPLOY_DIR'
        "
    - |
      scp \
        -i "$ETSI_SSH_KEY" \
        -o IdentitiesOnly=yes \
        -r \
        charts/hypo/. \
        "$DEPLOYMENT_SERVER_USER@$DEPLOYMENT_SERVER_IP:$REMOTE_DEPLOY_DIR/"

    # Build dependencies and deploy
    - |
      ssh \
        -i "$ETSI_SSH_KEY" \
        -o IdentitiesOnly=yes \
        "$DEPLOYMENT_SERVER_USER@$DEPLOYMENT_SERVER_IP" "

          set -e
      argocd login "$ARGOCD_SERVER" \
        --username "$ARGOCD_USERNAME" \
        --password "$ARGOCD_PASSWORD" \
        --insecure
          
      argocd app get hypo --refresh >/dev/null
      argocd app wait hypo --sync --health --timeout 120
          cd '$REMOTE_DEPLOY_DIR'

          helm dependency build .
  
          helm upgrade --install '$HELM_RELEASE_NAME' . \
            --namespace '$HELM_NAMESPACE' \
            --create-namespace \
            --values values-installer.yaml \
            --wait \
            --timeout 10m

      echo "Argo CD application 'hypo' is synced and healthy."
          echo 'Helm deployment completed successfully.'
        "

  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'