| runtime: go1.15 | runtime: go1.15 | ||||
| env: flex | env: flex | ||||
| resources: | resources: | ||||
| cpu: 2 | |||||
| cpu: 1 | |||||
| memory_gb: 1.4 | memory_gb: 1.4 | ||||
| disk_size_gb: 10 | disk_size_gb: 10 | ||||
| network: | network: |
| #!/bin/bash | |||||
| SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" | |||||
| source $SCRIPT_DIR/gcp_version.sh | |||||
| #wait GAE pending operations | |||||
| for ((i=1; i<120; i++)); do | |||||
| echo "check pending GAE operations ... " | |||||
| op=`gcloud app operations list --filter=status=PENDING --format=json` | |||||
| if [ "$op" == "[]" ]; then | |||||
| echo "no pending"; | |||||
| del_old_instances | |||||
| break; | |||||
| else | |||||
| echo "$op" | |||||
| echo "check $i of 120 (normally it takes 70 checks = 3-5 minutes" | |||||
| sleep 3; | |||||
| fi | |||||
| done | |||||
| echo "finished"; |
| PROJ_DIR="$SCRIPT_DIR/../" | PROJ_DIR="$SCRIPT_DIR/../" | ||||
| rm -rf /tmp/goweb | rm -rf /tmp/goweb | ||||
| echo "create /tmp/goweb" | |||||
| mkdir -p /tmp/goweb | mkdir -p /tmp/goweb | ||||
| echo "prepare golang project" | |||||
| rsync -a $PROJ_DIR /tmp/goweb/ | rsync -a $PROJ_DIR /tmp/goweb/ | ||||
| rm -rf /tmp/goweb/html/* | rm -rf /tmp/goweb/html/* | ||||
| rsync -avh /mnt/hgfs/workspace/2021-07-31-BiukopWeb/ /tmp/goweb/html/ | |||||
| echo "sync Web html" | |||||
| rsync -a /mnt/hgfs/workspace/2021-07-31-BiukopWeb/ /tmp/goweb/html/ | |||||
| cd /tmp/goweb | cd /tmp/goweb | ||||
| #gcloud app deploy | |||||
| gcloud app deploy | |||||
| #list all versions | |||||
| gcloud app versions list ; | |||||
| source $SCRIPT_DIR/gcp_version.sh | |||||
| del_old_instances |
| } | } | ||||
| del_old_instances(){ | del_old_instances(){ | ||||
| get_instance_id | |||||
| echo "RUNNING VERSION: " $LAST_VERSION_ID | |||||
| GCP_VERSIONS=(` gcloud app versions list | awk -F' ' '{print $2}' `) | |||||
| LENGTH=${#GCP_VERSIONS[@]} | |||||
| for i in $(seq 1 1 $(expr $LENGTH - 1) ) | |||||
| do | |||||
| if [ "${GCP_VERSIONS[$i]}" != "$LAST_VERSION_ID" ] ; then | |||||
| echo "delete old version ${GCP_VERSIONS[$i]} " | |||||
| del_instance_by_version ${GCP_VERSIONS[$i]} | |||||
| else | |||||
| echo "KEEP RUNNING VERSION ${GCP_VERSIONS[$i]}" | |||||
| VERSION_OUTPUT=$(gcloud app versions list) | |||||
| # VERSION_OUTPUT=$` cat /home/sp/go/src/goweb/deploy/sample-version-list.txt` | |||||
| echo "$VERSION_OUTPUT" | |||||
| dropList=() | |||||
| while IFS= read -r line; do | |||||
| status=(` echo $line | awk -F' ' '{print $5}' `) | |||||
| version=(` echo $line | awk -F' ' '{print $2}' `) | |||||
| if [ "$status" == "STOPPED" ] ; then | |||||
| dropList+=("$version") | |||||
| fi | fi | ||||
| done | |||||
| } | |||||
| del_instance_by_version() { | |||||
| versionId=$1 | |||||
| if [ "$versionId" == "" ]; then | |||||
| return | |||||
| fi | |||||
| gcloud app versions delete --service=default $versionId ; | |||||
| # while true; do | |||||
| # read -p "Do you wish to delete version $versionId ?" yn | |||||
| # case $yn in | |||||
| # [Yy]* ) | |||||
| # echo gcloud app instances delete $INSTANCE_ID --service=default --version=$versionId ; | |||||
| # break;; | |||||
| # [Nn]* ) exit;; | |||||
| # * ) echo "Please answer yes or no.";; | |||||
| # esac | |||||
| # done | |||||
| done <<< "$VERSION_OUTPUT" | |||||
| #cannot do this within while, as the user input will by bypassed by <<< | |||||
| for version in ${dropList[@]} ; do | |||||
| gcloud app versions delete --service=default $version ; | |||||
| done | |||||
| } | } | ||||
| SERVICE VERSION.ID TRAFFIC_SPLIT LAST_DEPLOYED SERVING_STATUS | |||||
| default 20210809t011326 0.00 2021-08-09T01:14:37+10:00 STOPPED | |||||
| default 20210809t013157 0.00 2021-08-09T01:33:04+10:00 STOPPED | |||||
| default 20210809t014534 1.00 2021-08-09T01:46:41+10:00 SERVING |