Files
medicalalert-web-reloaded/common-jobs-bitbucket.sh
2023-08-25 18:39:02 +05:30

212 lines
12 KiB
Bash

#!/bin/bash
exec > >(tee -a script.log) 2>&1
# Install the required packages #
# --------------------------------------------------------------
apk upgrade && apk add curl wget zip unzip
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x ./kubectl && mv ./kubectl /usr/local/bin/kubectl
. ./setenv.sh
# ----------------------------------------------------------------------
export NEW_URL=https://$URL_DOMAIN
export CLUSTER=caresage-eks-cluster-$ENV
export APP=`echo $URL_DOMAIN | awk -F[.-] '{print $3}'`
export NAMESPACE=$APP-web
export REPO=$BITBUCKET_REPO_SLUG
export REPLACE=`echo $NEW_URL | awk -F[./] '{print $4"."$5}'`
export URL_DOMAIN=$URL_DOMAIN
# ---------------------------
echo "export NEW_URL=https://$URL_DOMAIN" >> setenv.sh
echo "export APP=`echo $URL_DOMAIN | awk -F[.-] '{print $3}'`" >> setenv.sh
echo "export NAMESPACE=$APP-web" >> setenv.sh
echo "export REPO=$BITBUCKET_REPO_SLUG" >> setenv.sh
echo "export REPLACE=`echo $NEW_URL | awk -F[./] '{print $4"."$5}'`" >> setenv.sh
echo "export URL_DOMAIN=$URL_DOMAIN" >> setenv.sh
echo "export TOKEN=$TOKEN" >> setenv.sh
# ---------------------------------------------------------------
echo "JOBNAME -- $JOBNAME"
echo "ENV -- $ENV"
echo "CLUSTER -- $CLUSTER"
echo "VERSION -- $BITBUCKET_BUILD_NUMBER"
echo "RESTORE_VERSION -- $RESTORE_VERSION"
echo "URL_DOMAIN -- $URL_DOMAIN"
echo "SUBDOMAIN -- $SUBDOMAIN"
echo "VERSION -- $VERSION"
echo "RESTORE_VERSION -- $RESTORE_VERSION"
echo "DB_NAME -- $DB_NAME"
echo "MYSQL_FILE_NAME -- $MYSQL_FILE_NAME"
echo "STATIC_FILE_NAME -- $STATIC_FILE_NAME"
cat ./setenv.sh
# -------------------------------------------------------------------------------------------------------------------------
opt=$1
deploy_version=$2
case $opt in
wp-auto-patch)
if [[ "$SUBDOMAIN" != "dev01" ]] ; then echo VALIDATION-NOPASS-AUTO-PATCH-IS-FOR-DEV01 && exit 9 ; else echo VALIDATION-PASS-AUTO-PATCH-IS-FOR-DEV01;fi
aws eks update-kubeconfig --name caresage-eks-cluster-$ENV --region us-east-1
kubectl apply -f build/$ENV/pod.tpl && sleep 15
kubectl cp setenv.sh $NAMESPACE/common-job-pod:/tmp/setenv.sh
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'chmod 755 /tmp/setenv.sh'
kubectl exec common-job-pod -n $NAMESPACE -- apt update
kubectl exec common-job-pod -n $NAMESPACE -- apt install wget zip unzip curl git -y
# ---------------------------------------------------------------------------------------------------------------------------------------------------------
#kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh; git clone https://x-token-auth:$TOKEN@bitbucket.org/connectamerica/$REPO.git'
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh;cd /tmp;git clone --branch="feature/inital-setup" https://x-token-auth:$TOKEN@bitbucket.org/connectamerica/$REPO.git;cd $REPO/;git config user.email "{botid}@bots.bitbucket.org" ; git checkout -b feature/$VERSION-$ENV-$SUBDOMAIN && git push --set-upstream origin feature/$VERSION-$ENV-$SUBDOMAIN;
mv /usr/share/nginx/subdomain/$SUBDOMAIN/wp-content/uploads /tmp/;
cp -rf /usr/share/nginx/subdomain/$SUBDOMAIN/* wp/;
mv /tmp/uploads /usr/share/nginx/subdomain/$SUBDOMAIN/wp-content/;
git add --all && git commit -m "auto-patch $VERSION-$ENV-$SUBDOMAIN-$(date +%Y-%m-%dT%H_%M_%S)" && git push'
#--------------------------------------------------------------------------------------------------------------
kubectl delete po common-job-pod -n $NAMESPACE
cat script.log | egrep -v -i "warning|SQL" | egrep -i "fail|exception|terminated|command not found|error|unexpected|cannot access|No such file" && exit 9 || echo VALIDATION_PASS_$opt
;;
subdomain_deploy)
echo "Deploy the wordpress source code fromo the branch to pvc mount of subdomain..."
aws eks update-kubeconfig --name caresage-eks-cluster-$ENV --region us-east-1
kubectl apply -f build/$ENV/pod.tpl && sleep 15 && echo pod-created
kubectl cp wp $NAMESPACE/common-job-pod:/tmp && echo "wp copy to /tmp done" || exit 9
kubectl cp setenv.sh $NAMESPACE/common-job-pod:/tmp/setenv.sh && echo "setenv copy done" || exit 9
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'chmod 755 /tmp/setenv.sh'
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh ; cp -rf /tmp/wp/* /usr/share/nginx/subdomain/$SUBDOMAIN/'
echo $SUBDOMAIN | grep www && echo "maindomain $URL_DOMAIN" || kubectl delete po common-job-pod -n $NAMESPACE
cat script.log | egrep -v -i "warning|SQL" | egrep -i "fail|exception|terminated|command not found|error|unexpected|cannot access|No such file" && exit 9 || echo VALIDATION_PASS_$opt
;;
mysql-backup)
echo "Running mysql backup with s3..."
aws eks update-kubeconfig --name caresage-eks-cluster-$ENV --region us-east-1
kubectl apply -f build/$ENV/pod.tpl && sleep 15
kubectl cp setenv.sh $NAMESPACE/common-job-pod:/tmp/setenv.sh
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'chmod 755 /tmp/setenv.sh'
kubectl exec common-job-pod -n $NAMESPACE -- apt update
kubectl exec common-job-pod -n $NAMESPACE -- apt install zip wget unzip curl mariadb-client -y
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh ;mysqldump -h $DB_HOST --single-transaction --quick --lock-tables=false --user=$DB_USER --password=$DB_PASSWORD $SUBDOMAIN --skip-lock-tables | gzip > /tmp/$NAMESPACE-pantheon.sql.gz'
kubectl cp $NAMESPACE/common-job-pod:/tmp/$NAMESPACE-pantheon.sql.gz $NAMESPACE-pantheon-$VERSION-$ENV-$SUBDOMAIN-$(date +%Y-%m-%dT%H_%M_%S).sql.gz
FILE=`ls $NAMESPACE-pantheon-*.sql.gz`
aws s3 cp $FILE s3://commonjobs/$NAMESPACE/$opt/
curl --request POST -F files=@"$FILE" --url "https://api.bitbucket.org/2.0/repositories/connectamerica/$REPO/downloads" \
--header "Authorization: Bearer $TOKEN"
kubectl delete po common-job-pod -n $NAMESPACE
cat script.log | egrep -v -i "warning|SQL" | egrep -i "fail|exception|terminated|command not found|error|unexpected|cannot access|No such file" && exit 9 || echo VALIDATION_PASS_$opt
;;
wp-data-backup)
aws eks update-kubeconfig --name caresage-eks-cluster-$ENV --region us-east-1
kubectl apply -f build/$ENV/pod.tpl && sleep 15
kubectl cp setenv.sh $NAMESPACE/common-job-pod:/tmp/setenv.sh
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'chmod 755 /tmp/setenv.sh'
kubectl exec common-job-pod -n $NAMESPACE -- apt update
kubectl exec common-job-pod -n $NAMESPACE -- apt install wget zip unzip curl -y
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh;cd /usr/share/nginx/subdomain/$SUBDOMAIN/wp-content/uploads;zip -r /tmp/upload.zip .'
kubectl cp $NAMESPACE/common-job-pod:/tmp/upload.zip $NAMESPACE-$VERSION-$ENV-$SUBDOMAIN-$(date +%Y-%m-%dT%H_%M_%S).zip
FILE=`ls $NAMESPACE-*.zip`
aws s3 cp $FILE s3://commonjobs/$NAMESPACE/$opt/
kubectl delete po common-job-pod -n $NAMESPACE
cat script.log | egrep -v -i "warning|SQL" | egrep -i "fail|exception|terminated|command not found|error|unexpected|cannot access|No such file" && exit 9 || echo VALIDATION_PASS_$opt
;;
mysql-restore)
aws eks update-kubeconfig --name caresage-eks-cluster-$ENV --region us-east-1
kubectl apply -f build/$ENV/pod.tpl && sleep 15
kubectl cp setenv.sh $NAMESPACE/common-job-pod:/tmp/setenv.sh
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'chmod 755 /tmp/setenv.sh'
[ -n "$RESTORE_VERSION" ] && FILE=$RESTORE_VERSION || FILE=$deploy_version
kubectl exec common-job-pod -n $NAMESPACE -- apt update
kubectl exec common-job-pod -n $NAMESPACE -- apt install zip wget unzip curl mariadb-client -y
#Check if file is present in bitbucket download else check on s3
# -------------------------------------------------------------------
curl -s -L -O -H "Authorization: Bearer $TOKEN" https://api.bitbucket.org/2.0/repositories/connectamerica/$REPO/downloads/$FILE && echo file_downloaded || aws s3 cp s3://commonjobs/$NAMESPACE/mysql-backup/$FILE $FILE
kubectl cp $FILE $NAMESPACE/common-job-pod:/tmp/$FILE
#Create schema if not present #
# -------------------------------
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh; mysql -h $DB_HOST --user=$DB_USER --password=$DB_PASSWORD -e "create schema IF NOT EXISTS $SUBDOMAIN"'
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh; export FILE=`ls /tmp/*.sql.gz` ; gunzip -c $FILE | mysql -h $DB_HOST --user=$DB_USER --password=$DB_PASSWORD $SUBDOMAIN'
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'wget https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar ; chmod u+x wp-cli.phar;mv wp-cli.phar /usr/local/bin/wp; php /usr/local/bin/wp --info'
# ----------------------------------------------------------------------------------------------------------------------------------------------------
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh; OLD_URL=`wp option get siteurl --allow-root --path=/usr/share/nginx/subdomain/$SUBDOMAIN`; echo "export OLD_URL=$OLD_URL" >> /tmp/setenv.sh; echo "export FIND=$(echo $OLD_URL|cut -d. -f2,3)" >> /tmp/setenv.sh; echo "export OLD_URL_DOMAIN=$(echo $OLD_URL| cut -d/ -f3)" >> /tmp/setenv.sh '
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'cat /tmp/setenv.sh ; . /tmp/setenv.sh; wp search-replace --allow-root --path=/usr/share/nginx/subdomain/$SUBDOMAIN "$FIND" "$REPLACE" --all-tables'
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh; OLD_URL=`wp option get siteurl --allow-root --path=/usr/share/nginx/subdomain/$SUBDOMAIN`; echo "export OLD_URL=$OLD_URL" >> /tmp/setenv.sh; echo "export FIND=$(echo $OLD_URL|cut -d. -f2,3)" >> /tmp/setenv.sh; echo "export OLD_URL_DOMAIN=$(echo $OLD_URL| cut -d/ -f3)" >> /tmp/setenv.sh '
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'cat /tmp/setenv.sh ; . /tmp/setenv.sh; wp search-replace --allow-root --path=/usr/share/nginx/subdomain/$SUBDOMAIN "$OLD_URL_DOMAIN" "$URL_DOMAIN" --all-tables'
# --------------------------------------------------------------------------------------------
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh; wp search-replace --allow-root --path=/usr/share/nginx/subdomain/$SUBDOMAIN "http://$URL_DOMAIN" "$NEW_URL" --all-tables'
kubectl delete po common-job-pod -n $NAMESPACE
cat script.log | egrep -v -i "warning|SQL" | egrep -i "fail|exception|terminated|command not found|error|unexpected|cannot access|No such file" && exit 9 || echo VALIDATION_PASS_$opt
;;
wp-data-restore)
aws eks update-kubeconfig --name caresage-eks-cluster-$ENV --region us-east-1
kubectl apply -f build/$ENV/pod.tpl && sleep 60 || exit 9
kubectl get po common-job-pod -n $NAMESPACE | grep -i pending && exit 9 || echo ----common-pod-NOT-in-pending-state --
kubectl cp setenv.sh $NAMESPACE/common-job-pod:/tmp/setenv.sh
kubectl exec common-job-pod -n $NAMESPACE -- sh -c 'chmod 755 /tmp/setenv.sh'
[ -n "$RESTORE_VERSION" ] && FILE=$RESTORE_VERSION || FILE=$deploy_version
kubectl exec common-job-pod -n $NAMESPACE -- apt update
kubectl exec common-job-pod -n $NAMESPACE -- apt install wget zip unzip curl -y
aws s3 cp s3://commonjobs/$NAMESPACE/wp-data-backup/$FILE $FILE
kubectl cp $FILE $NAMESPACE/common-job-pod:/tmp/$FILE
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh; mkdir -p /usr/share/nginx/subdomain/$SUBDOMAIN/wp-content/uploads'
kubectl exec common-job-pod -n $NAMESPACE -- sh -c '. /tmp/setenv.sh;export FILE=`ls /tmp/*.zip`;unzip -o $FILE -d /usr/share/nginx/subdomain/$SUBDOMAIN/wp-content/uploads'
kubectl delete po common-job-pod -n $NAMESPACE
cat script.log | egrep -v -i "warning|SQL" | egrep -i "fail|exception|terminated|command not found|error|unexpected|cannot access|No such file" && exit 9 || echo VALIDATION_PASS_$opt
;;
*)
echo "common job shell script utility taking variables from env"
echo "Usage: $0 {mysql-backup|wp-data-backup|mysql-restore|wp-data-restore}"
echo "mysql-backup : Run MySQL backup utility and upload"
echo "mysql-restore : Run MySQL backup utility and upload it to bitbucket."
echo "wp-data-backup : Run web server backup utility and uplaod."
echo "wp-data-restore : Run web server backup utility and uplaod to bitbucket." ;;
esac