From 8b22f627545ae28d3b245bab634695bf7310ffbd Mon Sep 17 00:00:00 2001 From: Frostebite Date: Sat, 22 Aug 2020 16:13:26 +0000 Subject: [PATCH] Use provision and dispose GKE action --- .github/workflows/main.yml | 33 +++++++++------ ApplyClusterAndAcquireLock.sh | 69 -------------------------------- ReleaseLockAndAttemptShutdown.sh | 13 ------ 3 files changed, 21 insertions(+), 94 deletions(-) delete mode 100755 ApplyClusterAndAcquireLock.sh delete mode 100755 ReleaseLockAndAttemptShutdown.sh diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 11cfdceb..28b2efae 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -94,34 +94,43 @@ jobs: - uses: actions/checkout@v2 with: lfs: true - - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master + - name: Provision K8s Cluster + id: provision + uses: frostebite/Provision-GKE-Cluster@1.0 with: - version: '288.0.0' - service_account_email: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_EMAIL }} - service_account_key: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY }} - - run: ./ApplyClusterAndAcquireLock.sh ${{ env.GKE_PROJECT }} ${{ env.GKE_CLUSTER }} ${{ env.GKE_ZONE }} - - uses: frostebite/File-To-Base64@master - id: read-base64 - with: - filePath: ~/.kube/config + GOOGLE_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_EMAIL }} + GOOGLE_SERVICE_ACCOUNT_KEY: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY }} + project: ${{ env.GKE_PROJECT }} + cluster: ${{ env.GKE_CLUSTER }} + zone: ${{ env.GKE_ZONE }} - uses: ./ id: k8s-unity-build env: UNITY_LICENSE: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nbpzWx3PZ0lqWDo1m9aLQuZ4cweo=QcDm4/qAXZuUMQbUVk63vO6u66Bp8PnqqWQcZZOcym/rGUZLj1sr66EquF3X3w1L7aqiwMGtbY2b\nkPttcalFeaBkc5NsJMrexWjuBCxQvhbmVFQnTjvC6vNS+k1wrkz7If1oPkz/XaDtCfUs8oxc9iPe\nPzzUJIVYLZoDtpPq2XbgVn9/TiVb3Zu6ldKgvtNRYUjrB3KywtvL9OcIFll3htRcBZPG43kxryJc\nDD2TL5Nw1JuX6MejBBuYTZsZNpGX9Pjop9+uFUZ4GI9h8a5g6wJUfXzsGw7j4gkvDkC9MvyWiksi\n2hNXw1QNeB6JfQsd4sAuhYh/CqTm2gCz9i9ZpA==" with: targetPlatform: ${{ matrix.targetPlatform }} - kubeConfig: ${{ steps.read-base64.outputs.base64 }} + kubeConfig: ${{ steps.provision.outputs.kubeConfig }} githubToken: ${{ secrets.GITHUB_TOKEN }} projectPath: test-project unityVersion: 2019.3.15f1 - uses: frostebite/K8s-Download-Volume@master with: - kubeConfig: ${{ steps.read-base64.outputs.base64 }} + kubeConfig: ${{ steps.provision.outputs.kubeConfig }} volume: ${{ steps.k8s-unity-build.outputs.volume }} sourcePath: repo/build/ - uses: actions/upload-artifact@v1 with: name: Kubernetes Build (${{ matrix.targetPlatform }}) path: k8s-volume-download - - run: ./ReleaseLockAndAttemptShutdown.sh ${{ env.GKE_PROJECT }} ${{ env.GKE_CLUSTER }} ${{ env.GKE_ZONE }} + - name: Dispose K8s Cluster if: ${{ always() }} + id: dispose + uses: frostebite/Provision-GKE-Cluster@1.0 + with: + GOOGLE_SERVICE_ACCOUNT_EMAIL: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_EMAIL }} + GOOGLE_SERVICE_ACCOUNT_KEY: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY }} + project: ${{ env.GKE_PROJECT }} + cluster: ${{ env.GKE_CLUSTER }} + zone: ${{ env.GKE_ZONE }} + lock: ${{ steps.provision.outputs.lock }} + dispose: true diff --git a/ApplyClusterAndAcquireLock.sh b/ApplyClusterAndAcquireLock.sh deleted file mode 100755 index 8f0c0db9..00000000 --- a/ApplyClusterAndAcquireLock.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh - -# This creates a GKE Cluster -# - Will wait for any deletion to complete on a cluster with the same name before creating -# - Will wait for completion before continuing -# - If the script is run concurrently multiple times, only one cluster will be created, all instances will wait for availability -# Requires GCP Cloud SDK -# Installs retry https://github.com/kadwanev/retry - -GKE_PROJECT=$1 -GKE_CLUSTER=$2 -GKE_ZONE=$3 - -# may update this to avoid repeated install, drop me a comment if needed -sudo sh -c "curl https://raw.githubusercontent.com/kadwanev/retry/master/retry -o /usr/local/bin/retry && chmod +x /usr/local/bin/retry" - -attempts=0 -while [ $attempts -le 1 ] -do -retry -s 15 -t 20 -v ' - STATUS=$(gcloud container clusters list --format="json" --project $GKE_PROJECT | - jq " - .[] | - {name: .name, status: .status} | - select(.name == \"$GKE_CLUSTER\") - " | - jq ".status") - if [ "$STATUS" == "\"STOPPING\"" ]; then echo "Cluster stopping waiting for completion" && exit 1; fi - exit 0 - ' -cluster=$(gcloud container clusters list --project $GKE_PROJECT --format="json" | jq '.[] | select(.name == "${GKE_CLUSTER}")') - -if [ -z "$cluster" ]; -then - echo "No clusters found for \"$GKE_CLUSTER\" in project \"$GKE_CLUSTER\" in zone \"$GKE_ZONE\"" - # you may not need this, it installs GCP beta for additional command line options - gcloud components install beta -q - # replace this line with whatever type of cluster you want to create - gcloud beta container --project $GKE_PROJECT clusters create $GKE_CLUSTER --zone $GKE_ZONE --no-enable-basic-auth --cluster-version "1.15.12-gke.2" --machine-type "custom-1-3072" --image-type "COS" --disk-type "pd-standard" --disk-size "15" --metadata disable-legacy-endpoints=true --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --num-nodes "1" --enable-stackdriver-kubernetes --enable-ip-alias --default-max-pods-per-node "110" --enable-autoscaling --min-nodes "0" --max-nodes "3" --no-enable-master-authorized-networks --addons HorizontalPodAutoscaling,HttpLoadBalancing --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 -fi; -retry -s 15 -t 20 -v ' - STATUS=$(gcloud container clusters list --format="json" --project $GKE_PROJECT | - jq " - .[] | - {name: .name, status: .status} | - select(.name == \"$GKE_CLUSTER\") - " | - jq ".status") - if [ "$STATUS" == "\"PROVISIONING\"" ]; then echo "Cluster provisioning waiting for available" && exit 1; fi - exit 0 -' -echo "Cluster is available" -gcloud container clusters get-credentials $GKE_CLUSTER --zone $GKE_ZONE --project $GKE_PROJECT -kubectl version -NSID=$(cat /proc/sys/kernel/random/uuid) -echo "::set-env name=NSID::"$NSID -{ -cat <