Loading .gitlab-ci.yml +79 −39 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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"' Loading Loading
.gitlab-ci.yml +79 −39 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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"' Loading