refactor: enhance deploy_preview.sh script for improved AWS configura… (#41042)
…tion
### Changes Made
- Updated the script to set strict error handling with `set -euo
pipefail`.
- Streamlined AWS CLI configuration by creating the `~/.aws/config` file
directly.
- Removed deprecated `dp-node-affinity-values.yaml` file and integrated
node affinity and tolerations directly into the Helm chart deployment
command.
- Improved pod name retrieval and added optional cleanup logic for
better resource management during deployment.
These changes enhance the reliability and maintainability of the
deployment process.
## Description
> [!TIP]
> _Add a TL;DR when the description is longer than 500 words or
extremely technical (helps the content, marketing, and DevRel team)._
>
> _Please also include relevant motivation and context. List any
dependencies that are required for this change. Add links to Notion,
Figma or any other documents that might be relevant to the PR._
Fixes #`Issue Number`
_or_
Fixes `Issue URL`
> [!WARNING]
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._
## Automation
/ok-to-test tags=""
### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results -->
> [!CAUTION]
> If you modify the content in this section, you are likely to disrupt
the CI result for your PR.
<!-- end of auto-generated comment: Cypress test results -->
## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No
This commit is contained in:
parent
c921a3c37d
commit
3bac05feeb
|
|
@ -1,27 +1,30 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Params are in environment variables as PARAM_{SLUG}, e.g. PARAM_USER_ID
|
# Params are in environment variables as PARAM_{SLUG}, e.g. PARAM_USER_ID
|
||||||
|
|
||||||
edition=ce
|
set -euo pipefail
|
||||||
|
|
||||||
# Configure the AWS & kubectl environment
|
edition="ce"
|
||||||
|
|
||||||
mkdir ~/.aws; touch ~/.aws/config
|
# Configure AWS CLI and kubectl environment
|
||||||
|
mkdir -p ~/.aws
|
||||||
|
cat > ~/.aws/config <<EOF
|
||||||
|
[default]
|
||||||
|
region = ap-south-1
|
||||||
|
output = json
|
||||||
|
EOF
|
||||||
|
|
||||||
aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID"
|
aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID"
|
||||||
aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY"
|
aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY"
|
||||||
|
|
||||||
export region=ap-south-1
|
export region="ap-south-1"
|
||||||
export cluster_name=uatx-cluster
|
export cluster_name="uatx-cluster"
|
||||||
|
|
||||||
echo "[default]
|
|
||||||
region = $region
|
|
||||||
output = json"
|
|
||||||
|
|
||||||
echo "Region: $region"
|
echo "Region: $region"
|
||||||
echo "Cluster name: $cluster_name"
|
echo "Cluster name: $cluster_name"
|
||||||
echo "Pull Request Number: $PULL_REQUEST_NUMBER"
|
echo "Pull Request Number: $PULL_REQUEST_NUMBER"
|
||||||
echo "DP_EFS_ID: $DP_EFS_ID"
|
echo "DP_EFS_ID: $DP_EFS_ID"
|
||||||
|
|
||||||
|
# Set naming context
|
||||||
export NAMESPACE="$edition$PULL_REQUEST_NUMBER"
|
export NAMESPACE="$edition$PULL_REQUEST_NUMBER"
|
||||||
export CHARTNAME="$edition$PULL_REQUEST_NUMBER"
|
export CHARTNAME="$edition$PULL_REQUEST_NUMBER"
|
||||||
export SECRET="$edition$PULL_REQUEST_NUMBER"
|
export SECRET="$edition$PULL_REQUEST_NUMBER"
|
||||||
|
|
@ -29,6 +32,8 @@ export DBNAME="$edition$PULL_REQUEST_NUMBER"
|
||||||
export DOMAINNAME="$edition-$PULL_REQUEST_NUMBER.dp.appsmith.com"
|
export DOMAINNAME="$edition-$PULL_REQUEST_NUMBER.dp.appsmith.com"
|
||||||
export HELMCHART="appsmith"
|
export HELMCHART="appsmith"
|
||||||
export HELMCHART_URL="http://helm-ee.appsmith.com"
|
export HELMCHART_URL="http://helm-ee.appsmith.com"
|
||||||
|
|
||||||
|
# Optional environment variables (already set externally)
|
||||||
export OPENAI_ASSISTANT_ID="$OPENAI_ASSISTANT_ID"
|
export OPENAI_ASSISTANT_ID="$OPENAI_ASSISTANT_ID"
|
||||||
export OPENAI_API_KEY="$OPENAI_API_KEY"
|
export OPENAI_API_KEY="$OPENAI_API_KEY"
|
||||||
export APPSMITH_CARBON_API_KEY="$APPSMITH_CARBON_API_KEY"
|
export APPSMITH_CARBON_API_KEY="$APPSMITH_CARBON_API_KEY"
|
||||||
|
|
@ -36,67 +41,62 @@ export APPSMITH_CARBON_API_BASE_PATH="$APPSMITH_CARBON_API_BASE_PATH"
|
||||||
export APPSMITH_AI_SERVER_MANAGED_HOSTING="$APPSMITH_AI_SERVER_MANAGED_HOSTING"
|
export APPSMITH_AI_SERVER_MANAGED_HOSTING="$APPSMITH_AI_SERVER_MANAGED_HOSTING"
|
||||||
export IN_DOCKER="$IN_DOCKER"
|
export IN_DOCKER="$IN_DOCKER"
|
||||||
|
|
||||||
|
# Update kubeconfig
|
||||||
# aws eks update-kubeconfig --region "$region" --name "$cluster_name" --profile eksci
|
|
||||||
aws eks update-kubeconfig --region "$region" --name "$cluster_name"
|
aws eks update-kubeconfig --region "$region" --name "$cluster_name"
|
||||||
|
|
||||||
echo "Set the default namespace"
|
|
||||||
kubectl config set-context --current --namespace=default
|
kubectl config set-context --current --namespace=default
|
||||||
|
|
||||||
echo "Getting the pods"
|
|
||||||
kubectl get pods
|
kubectl get pods
|
||||||
|
|
||||||
if [[ -n "${RECREATE-}" ]]
|
# Optional cleanup logic
|
||||||
then
|
if [[ -n "${RECREATE-}" ]]; then
|
||||||
mongosh "mongodb+srv://$DB_USERNAME:$DB_PASSWORD@$DB_URL/$DBNAME?retryWrites=true&minPoolSize=1&maxPoolSize=10&maxIdleTimeMS=900000&authSource=admin" --eval 'db.dropDatabase()'
|
mongosh "mongodb+srv://$DB_USERNAME:$DB_PASSWORD@$DB_URL/$DBNAME?retryWrites=true&minPoolSize=1&maxPoolSize=10&maxIdleTimeMS=900000&authSource=admin" --eval 'db.dropDatabase()'
|
||||||
pod_name="$(kubectl get pods -n "$NAMESPACE" -o json | jq '.items[0].metadata.name' | tr -d '"')"
|
pod_name="$(kubectl get pods -n "$NAMESPACE" -o json | jq -r '.items[0].metadata.name')"
|
||||||
kubectl exec "$pod_name" -n "$NAMESPACE" -- bash -c "rm -rf /appsmith-stacks/*"
|
kubectl exec "$pod_name" -n "$NAMESPACE" -- bash -c "rm -rf /appsmith-stacks/*"
|
||||||
kubectl delete ns "$NAMESPACE" || true
|
kubectl delete ns "$NAMESPACE" || true
|
||||||
# Placeholder to use access points more effectively
|
|
||||||
kubectl patch pv "$NAMESPACE-appsmith" -p '{"metadata":{"finalizers":null}}' || true
|
kubectl patch pv "$NAMESPACE-appsmith" -p '{"metadata":{"finalizers":null}}' || true
|
||||||
kubectl delete pv "$NAMESPACE-appsmith" --grace-period=0 --force || true
|
kubectl delete pv "$NAMESPACE-appsmith" --grace-period=0 --force || true
|
||||||
# Below lines are a placeholder to use access points more effectively
|
|
||||||
# echo "deleting Accessing points"
|
|
||||||
# ACCESS_POINT_ID=$(aws efs describe-access-points --file-system-id "$DP_EFS_ID" | jq -r '.AccessPoints[] | select(.Name=="'"$edition$PULL_REQUEST_NUMBER"'") | .AccessPointId')
|
|
||||||
# echo "Deleting Accessing Point $ACCESS_POINT_ID"
|
|
||||||
# aws efs delete-access-point --access-point-id $ACCESS_POINT_ID
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#echo "Create Access Point and Access Point ID"
|
# Create namespace and image pull secret
|
||||||
### Use DP-EFS and create ACCESS_POINT
|
|
||||||
#ACCESS_POINT=$(aws efs create-access-point --file-system-id $DP_EFS_ID --tags Key=Name,Value=$edition$PULL_REQUEST_NUMBER)
|
|
||||||
#ACCESS_POINT_ID=$(echo $ACCESS_POINT | jq -r '.AccessPointId');
|
|
||||||
|
|
||||||
echo "Use kubernetes secret to Pull Image"
|
|
||||||
kubectl create ns "$NAMESPACE" || true
|
kubectl create ns "$NAMESPACE" || true
|
||||||
|
|
||||||
kubectl create secret docker-registry "$SECRET" \
|
kubectl create secret docker-registry "$SECRET" \
|
||||||
--docker-server=https://index.docker.io/v1/ \
|
--docker-server=https://index.docker.io/v1/ \
|
||||||
--docker-username="$DOCKER_HUB_USERNAME" \
|
--docker-username="$DOCKER_HUB_USERNAME" \
|
||||||
--docker-password="$DOCKER_HUB_ACCESS_TOKEN" -n "$NAMESPACE"
|
--docker-password="$DOCKER_HUB_ACCESS_TOKEN" \
|
||||||
|
-n "$NAMESPACE" || true
|
||||||
|
|
||||||
echo "Add appsmith-ee to helm repo"
|
# Add Helm repo and deploy
|
||||||
AWS_REGION=us-east-2 helm repo add appsmith-ee "$HELMCHART_URL"
|
AWS_REGION=us-east-2 helm repo add appsmith-ee "$HELMCHART_URL"
|
||||||
helm repo update
|
helm repo update
|
||||||
helm plugin install https://github.com/helm/helm-mapkubeapis -n "$NAMESPACE"
|
helm plugin install https://github.com/helm/helm-mapkubeapis -n "$NAMESPACE" || true
|
||||||
helm plugin ls
|
|
||||||
helm mapkubeapis "$CHARTNAME" -n "$NAMESPACE"
|
helm mapkubeapis "$CHARTNAME" -n "$NAMESPACE"
|
||||||
helm show chart appsmith-ee/$HELMCHART
|
helm show chart appsmith-ee/$HELMCHART
|
||||||
|
|
||||||
echo "Deploy appsmith helm chart"
|
echo "Deploying Appsmith Helm chart..."
|
||||||
helm upgrade -i "$CHARTNAME" "appsmith-ee/$HELMCHART" -n "$NAMESPACE" --create-namespace --recreate-pods \
|
helm upgrade -i "$CHARTNAME" "appsmith-ee/$HELMCHART" -n "$NAMESPACE" --create-namespace --recreate-pods \
|
||||||
--set _image.repository="$DOCKER_HUB_ORGANIZATION/appsmith-dp" --set _image.tag="$IMAGE_HASH" \
|
--set _image.repository="$DOCKER_HUB_ORGANIZATION/appsmith-dp" \
|
||||||
|
--set _image.tag="$IMAGE_HASH" \
|
||||||
--set _image.pullPolicy="Always" \
|
--set _image.pullPolicy="Always" \
|
||||||
--set image.pullSecrets="$SECRET" --set autoscaling.enabled=true --set autoscaling.minReplicas=1 \
|
--set image.pullSecrets="$SECRET" \
|
||||||
--set autoscaling.maxReplicas=1 --set redis.enabled=false --set postgresql.enabled=false --set mongodb.enabled=false --set ingress.enabled=true \
|
--set autoscaling.enabled=true \
|
||||||
|
--set autoscaling.minReplicas=1 \
|
||||||
|
--set autoscaling.maxReplicas=1 \
|
||||||
|
--set redis.enabled=false \
|
||||||
|
--set postgresql.enabled=false \
|
||||||
|
--set mongodb.enabled=false \
|
||||||
|
--set ingress.enabled=true \
|
||||||
--set "ingress.annotations.service\.beta\.kubernetes\.io/aws-load-balancer-ssl-cert=$AWS_RELEASE_CERT" \
|
--set "ingress.annotations.service\.beta\.kubernetes\.io/aws-load-balancer-ssl-cert=$AWS_RELEASE_CERT" \
|
||||||
--set "ingress.hosts[0].host=$DOMAINNAME, ingress.hosts[0].paths[0].path=/, ingress.hosts[0].paths[0].pathType=Prefix" \
|
--set "ingress.hosts[0].host=$DOMAINNAME, ingress.hosts[0].paths[0].path=/, ingress.hosts[0].paths[0].pathType=Prefix" \
|
||||||
--set autoupdate.enabled=false --set persistence.efs.enabled=true --set ingress.className="nginx" \
|
--set autoupdate.enabled=false \
|
||||||
--set persistence.efs.driver=efs.csi.aws.com --set persistence.storageClass=efs-sc \
|
--set ingress.className="nginx" \
|
||||||
|
--set persistence.efs.enabled=true \
|
||||||
|
--set persistence.efs.driver="efs.csi.aws.com" \
|
||||||
|
--set persistence.storageClass="efs-sc" \
|
||||||
--set persistence.efs.volumeHandle="$DP_EFS_ID:/$edition/$edition$PULL_REQUEST_NUMBER" \
|
--set persistence.efs.volumeHandle="$DP_EFS_ID:/$edition/$edition$PULL_REQUEST_NUMBER" \
|
||||||
--set resources.requests.cpu="1m" \
|
--set resources.requests.cpu="1m" \
|
||||||
|
--set resources.requests.memory="3072Mi" \
|
||||||
--set podDisruptionBudgets.enabled=false \
|
--set podDisruptionBudgets.enabled=false \
|
||||||
--set resources.requests.memory="2048Mi" \
|
|
||||||
--set applicationConfig.APPSMITH_SENTRY_DSN="https://abf15a075d1347969df44c746cca7eaa@o296332.ingest.sentry.io/1546547" \
|
--set applicationConfig.APPSMITH_SENTRY_DSN="https://abf15a075d1347969df44c746cca7eaa@o296332.ingest.sentry.io/1546547" \
|
||||||
--set applicationConfig.APPSMITH_SENTRY_ENVIRONMENT="$NAMESPACE" \
|
--set applicationConfig.APPSMITH_SENTRY_ENVIRONMENT="$NAMESPACE" \
|
||||||
--set applicationConfig.APPSMITH_DB_URL="mongodb+srv://$DB_USERNAME:$DB_PASSWORD@$DB_URL/$DBNAME?retryWrites=true&minPoolSize=1&maxPoolSize=10&maxIdleTimeMS=900000&authSource=admin" \
|
--set applicationConfig.APPSMITH_DB_URL="mongodb+srv://$DB_USERNAME:$DB_PASSWORD@$DB_URL/$DBNAME?retryWrites=true&minPoolSize=1&maxPoolSize=10&maxIdleTimeMS=900000&authSource=admin" \
|
||||||
|
|
@ -107,4 +107,10 @@ helm upgrade -i "$CHARTNAME" "appsmith-ee/$HELMCHART" -n "$NAMESPACE" --create-n
|
||||||
--set applicationConfig.APPSMITH_AI_SERVER_MANAGED_HOSTING="$APPSMITH_AI_SERVER_MANAGED_HOSTING" \
|
--set applicationConfig.APPSMITH_AI_SERVER_MANAGED_HOSTING="$APPSMITH_AI_SERVER_MANAGED_HOSTING" \
|
||||||
--set applicationConfig.IN_DOCKER="$IN_DOCKER" \
|
--set applicationConfig.IN_DOCKER="$IN_DOCKER" \
|
||||||
--set applicationConfig.APPSMITH_CUSTOMER_PORTAL_URL="https://release-customer.appsmith.com" \
|
--set applicationConfig.APPSMITH_CUSTOMER_PORTAL_URL="https://release-customer.appsmith.com" \
|
||||||
-f dp-node-affinity-values.yaml
|
--set affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key=instance_name \
|
||||||
|
--set affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator=In \
|
||||||
|
--set affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0]=uatx-shared \
|
||||||
|
--set tolerations[0].key=instance_name \
|
||||||
|
--set tolerations[0].operator=Equal \
|
||||||
|
--set tolerations[0].value=uatx-shared \
|
||||||
|
--set tolerations[0].effect=NoSchedule
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
affinity:
|
|
||||||
nodeAffinity:
|
|
||||||
requiredDuringSchedulingIgnoredDuringExecution:
|
|
||||||
nodeSelectorTerms:
|
|
||||||
- matchExpressions:
|
|
||||||
- key: instance_name
|
|
||||||
operator: In
|
|
||||||
values:
|
|
||||||
- uatx-shared
|
|
||||||
|
|
||||||
tolerations:
|
|
||||||
- key: instance_name
|
|
||||||
operator: Equal
|
|
||||||
value: uatx-shared
|
|
||||||
effect: NoSchedule
|
|
||||||
Loading…
Reference in New Issue
Block a user