diff --git a/.github/workflows/google.yml b/.github/workflows/google.yml new file mode 100644 index 0000000..ede039e --- /dev/null +++ b/.github/workflows/google.yml @@ -0,0 +1,83 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# GitHub recommends pinning actions to a commit SHA. +# To get a newer version, you will need to update the SHA. +# You can also reference a tag or branch, but the action may change without warning. + +name: Build and Deploy to GKE + +on: + push: + branches: + - master + +env: + PROJECT_ID: ${{ secrets.GKE_PROJECT }} + GKE_CLUSTER: cluster-1 # Add your cluster name here. + GKE_ZONE: asia-southeast1-b # Add your cluster zone here. + DEPLOYMENT_NAME: gke-test # Add your deployment name here. + IMAGE: static-site + +jobs: + setup-build-publish-deploy: + name: Setup, Build, Publish, and Deploy + runs-on: ubuntu-latest + environment: production + + steps: + - name: Checkout + uses: actions/checkout@v3 + + # Setup gcloud CLI + - uses: google-github-actions/setup-gcloud@94337306dda8180d967a56932ceb4ddcf01edae7 + with: + service_account_key: ${{ secrets.GKE_SA_KEY }} + project_id: ${{ secrets.GKE_PROJECT }} + + # Configure Docker to use the gcloud command-line tool as a credential + # helper for authentication + - run: |- + gcloud --quiet auth configure-docker + + # Get the GKE credentials so we can deploy to the cluster + - uses: google-github-actions/get-gke-credentials@fb08709ba27618c31c09e014e1d8364b02e5042e + with: + cluster_name: ${{ env.GKE_CLUSTER }} + location: ${{ env.GKE_ZONE }} + credentials: ${{ secrets.GKE_SA_KEY }} + + # Build the Docker image + - name: Build + run: |- + docker build \ + --tag "gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA" \ + --build-arg GITHUB_SHA="$GITHUB_SHA" \ + --build-arg GITHUB_REF="$GITHUB_REF" \ + . + + # Push the Docker image to Google Container Registry + - name: Publish + run: |- + docker push "gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA" + + - name: Deploy to GKE + run: |- + kubectl create deployment hello-server \ + --image=gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA + + # # Set up kustomize + # - name: Set up Kustomize + # run: |- + # curl -sfLo kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64 + # chmod u+x kustomize + + # # Deploy the Docker image to the GKE cluster + # - name: Deploy + # run: |- + # kustomize edit set image gcr.io/PROJECT_ID/IMAGE:TAG=gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA + # kustomize build . | kubectl apply -f - + # kubectl rollout status deployment/$DEPLOYMENT_NAME + # kubectl get services -o wide diff --git a/README.md b/README.md index 1999af0..16745ee 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ then remove this sample app once things are working. This Docker container contains a simple _"Hello World!"_ [Node.js][node_js] app. -## Running the app in local development +## Running the app in local development1 The provided Docker Compose file allows you to run the app locally in development. To start the container, run: