diff --git a/.github/workflows/azuresetup.yml b/.github/workflows/azuresetup.yml index 51bce70..bc266ed 100644 --- a/.github/workflows/azuresetup.yml +++ b/.github/workflows/azuresetup.yml @@ -1,61 +1,61 @@ -name: Azure Infrastructure Setup - -on: - push: - branches: - - master - -permissions: - id-token: write - contents: read - -env: - TF_VAR_azure_region: 'australiaeast' - TF_VAR_resource_group_name: 'microservices-demo-rg' - TF_VAR_acr_name: 'shaheergooglepracticeregistry' - -jobs: - setup_infrastructure: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Install Azure CLI - run: | - curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash - - - name: Azure login - uses: azure/login@v1.4.7 - with: - creds: ${{ secrets.AZURE_CREDENTIALS }} - - - name: Install Terraform - run: | - sudo apt-get update && sudo apt-get install -y gnupg software-properties-common - curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - - sudo apt-add-repository "deb https://apt.releases.hashicorp.com $(lsb_release -cs) main" - sudo apt-get update && sudo apt-get install terraform - - - name: Check if Terraform directory exists - run: | - if [ ! -d "deployment/terraform/aks" ]; then - echo "Directory deployment/terraform/aks does not exist." - exit 1 - fi - - - name: Initialize Terraform - run: | - cd deployment/terraform/aks - terraform init - - - name: Import Existing Resource Group - run: | - terraform import azurerm_resource_group.rg /subscriptions/${{ secrets.AZURE_SUBSCRIPTION_ID }}/resourceGroups/microservices-demo-rg || true - working-directory: deployment/terraform/aks - - - name: Apply Terraform Configuration - run: | - cd deployment/terraform/aks - terraform apply -auto-approve +# name: Azure Infrastructure Setup + +# on: +# push: +# branches: +# - dev + +# permissions: +# id-token: write +# contents: read + +# env: +# TF_VAR_azure_region: 'australiaeast' +# TF_VAR_resource_group_name: 'microservices-demo-rg' +# TF_VAR_acr_name: 'shaheergooglepracticeregistry' + +# jobs: +# setup_infrastructure: +# runs-on: ubuntu-latest + +# steps: +# - name: Checkout code +# uses: actions/checkout@v3 + +# - name: Install Azure CLI +# run: | +# curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash + +# - name: Azure login +# uses: azure/login@v1.4.7 +# with: +# creds: ${{ secrets.AZURE_CREDENTIALS }} + +# - name: Install Terraform +# run: | +# sudo apt-get update && sudo apt-get install -y gnupg software-properties-common +# curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - +# sudo apt-add-repository "deb https://apt.releases.hashicorp.com $(lsb_release -cs) main" +# sudo apt-get update && sudo apt-get install terraform + +# - name: Check if Terraform directory exists +# run: | +# if [ ! -d "deployment/terraform/aks" ]; then +# echo "Directory deployment/terraform/aks does not exist." +# exit 1 +# fi + +# - name: Initialize Terraform +# run: | +# cd deployment/terraform/aks +# terraform init + +# - name: Import Existing Resource Group +# run: | +# terraform import azurerm_resource_group.rg /subscriptions/${{ secrets.AZURE_SUBSCRIPTION_ID }}/resourceGroups/microservices-demo-rg || true +# working-directory: deployment/terraform/aks + +# - name: Apply Terraform Configuration +# run: | +# cd deployment/terraform/aks +# terraform apply -auto-approve diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml new file mode 100644 index 0000000..a8d7c5a --- /dev/null +++ b/.github/workflows/build_push.yml @@ -0,0 +1,115 @@ +name: Pull Docker Images from DockerHub and Deploy to AKS + +on: + push: + branches: + - dev + +permissions: + id-token: write + contents: read + +env: + DOCKERHUB_USERNAME: shaheer4636 + AZURE_REGION: 'australiaeast' + RESOURCE_GROUP: 'microservices-demo-rg' + AKS_CLUSTER_NAME: 'microservices-demo-aks' + ACR_NAME: 'shaheergooglepracticeregistry' + IMAGE_TAG: latest + +jobs: + pull_and_deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Login to DockerHub + run: | + echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username ${{ env.DOCKERHUB_USERNAME }} --password-stdin + + - name: Login to Azure + uses: azure/login@v1.4.7 + with: + creds: ${{ secrets.AZURE_CREDENTIALS }} + + - name: Login to ACR + run: | + az acr login --name ${{ env.ACR_NAME }} + + - name: Set up AKS Credentials + run: | + az aks get-credentials --resource-group ${{ env.RESOURCE_GROUP }} --name ${{ env.AKS_CLUSTER_NAME }} + + # - name: Pull and Push adservice image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/adservice:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/adservice:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/adservice:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/adservice:${{ env.IMAGE_TAG }} + + - name: Pull and Push checkout image + run: | + docker pull ${{ env.DOCKERHUB_USERNAME }}/checkoutservice:${{ env.IMAGE_TAG }} + docker tag ${{ env.DOCKERHUB_USERNAME }}/checkoutservice:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/checkoutservice:${{ env.IMAGE_TAG }} + docker push ${{ env.ACR_NAME }}.azurecr.io/checkoutservice:${{ env.IMAGE_TAG }} + + # - name: Pull and Push cartservice image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/cartservice:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/cartservice:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/cartservice:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/cartservice:${{ env.IMAGE_TAG }} + + # - name: Pull and Push currencyservice image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/currencyservice:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/currencyservice:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/currencyservice:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/currencyservice:${{ env.IMAGE_TAG }} + + # - name: Pull and Push emailservice image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/emailservice:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/emailservice:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/emailservice:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/emailservice:${{ env.IMAGE_TAG }} + + # - name: Pull and Push frontend image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/frontend:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/frontend:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/frontend:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/frontend:${{ env.IMAGE_TAG }} + + # - name: Pull and Push loadgenerator image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/loadgenerator:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/loadgenerator:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/loadgenerator:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/loadgenerator:${{ env.IMAGE_TAG }} + + # - name: Pull and Push paymentservice image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/paymentservice:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/paymentservice:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/paymentservice:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/paymentservice:${{ env.IMAGE_TAG }} + + # - name: Pull and Push productcatalogservice image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/productcatalog:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/productcatalog:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/productcatalogservice:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/productcatalogservice:${{ env.IMAGE_TAG }} + + # - name: Pull and Push recommendationservice image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/recommendationservice:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/recommendationservice:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/recommendationservice:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/recommendationservice:${{ env.IMAGE_TAG }} + + # - name: Pull and Push shippingservice image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/shippingservice:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/shippingservice:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/shippingservice:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/shippingservice:${{ env.IMAGE_TAG }} + + # - name: Pull and Push shoppingassistants image + # run: | + # docker pull ${{ env.DOCKERHUB_USERNAME }}/shoppingassistants:${{ env.IMAGE_TAG }} + # docker tag ${{ env.DOCKERHUB_USERNAME }}/shoppingassistants:${{ env.IMAGE_TAG }} ${{ env.ACR_NAME }}.azurecr.io/shoppingassistants:${{ env.IMAGE_TAG }} + # docker push ${{ env.ACR_NAME }}.azurecr.io/shoppingassistants:${{ env.IMAGE_TAG }} diff --git a/.github/workflows/deployments_to_aks.yml b/.github/workflows/deployments_to_aks.yml new file mode 100644 index 0000000..4bf56a1 --- /dev/null +++ b/.github/workflows/deployments_to_aks.yml @@ -0,0 +1,38 @@ +name: Deploy to AKS on Push to Dev + +on: + push: + branches: + - dev # Triggers on push to 'dev' branch + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Log in to Azure + uses: azure/login@v1 + with: + creds: ${{ secrets.AZURE_CREDENTIALS }} # Use your Azure service principal secret + + - name: Set up AKS context + uses: azure/aks-set-context@v2 + with: + resource-group: 'microservices-demo-rg' # Replace with your resource group name + cluster-name: 'microservices-demo-aks' # Replace with your AKS cluster name + + - name: Apply Kubernetes Manifests + run: | + # Apply all manifest files directly from the URLs + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/adservice.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/cartservice.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/checkoutservice.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/currencyservice.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/emailservice.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/frontend.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/kustomization.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/loadgenerator.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/paymentservice.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/productcatalogservice.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/recommendationservice.yaml + kubectl apply -f https://raw.githubusercontent.com/Shaheer4636/google-microservices-poc/dev/microservices-demo-main/kubernetes-manifests/shippingservice.yaml diff --git a/microservices-demo-main/kubernetes-manifests/adservice.yaml b/microservices-demo-main/kubernetes-manifests/adservice.yaml index 25ff1b7..20ab067 100644 --- a/microservices-demo-main/kubernetes-manifests/adservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/adservice.yaml @@ -43,7 +43,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: adservice + image: shaheergooglepracticeregistry.azurecr.io/adservice:latest ports: - containerPort: 9555 env: @@ -51,8 +51,8 @@ spec: value: "9555" resources: requests: - cpu: 200m - memory: 180Mi + cpu: 100m + memory: 100Mi limits: cpu: 300m memory: 300Mi diff --git a/microservices-demo-main/kubernetes-manifests/cartservice.yaml b/microservices-demo-main/kubernetes-manifests/cartservice.yaml index 5470d36..f37b4b1 100644 --- a/microservices-demo-main/kubernetes-manifests/cartservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/cartservice.yaml @@ -43,7 +43,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: cartservice + image: shaheergooglepracticeregistry.azurecr.io/cartservice:latest ports: - containerPort: 7070 env: @@ -51,8 +51,8 @@ spec: value: "redis-cart:6379" resources: requests: - cpu: 200m - memory: 64Mi + cpu: 100m + memory: 100Mi limits: cpu: 300m memory: 128Mi diff --git a/microservices-demo-main/kubernetes-manifests/checkoutservice.yaml b/microservices-demo-main/kubernetes-manifests/checkoutservice.yaml index c7dc5a0..82f7d11 100644 --- a/microservices-demo-main/kubernetes-manifests/checkoutservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/checkoutservice.yaml @@ -42,7 +42,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: checkoutservice + image: shaheergooglepracticeregistry.azurecr.io/checkoutservice:latest ports: - containerPort: 5050 readinessProbe: diff --git a/microservices-demo-main/kubernetes-manifests/currencyservice.yaml b/microservices-demo-main/kubernetes-manifests/currencyservice.yaml index 58fc032..d8e5d73 100644 --- a/microservices-demo-main/kubernetes-manifests/currencyservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/currencyservice.yaml @@ -43,7 +43,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: currencyservice + image: shaheergooglepracticeregistry.azurecr.io/currencyservice:latest ports: - name: grpc containerPort: 7000 diff --git a/microservices-demo-main/kubernetes-manifests/emailservice.yaml b/microservices-demo-main/kubernetes-manifests/emailservice.yaml index bea781a..324a3f3 100644 --- a/microservices-demo-main/kubernetes-manifests/emailservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/emailservice.yaml @@ -43,7 +43,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: emailservice + image: shaheergooglepracticeregistry.azurecr.io/emailservice:latest ports: - containerPort: 8080 env: diff --git a/microservices-demo-main/kubernetes-manifests/frontend.yaml b/microservices-demo-main/kubernetes-manifests/frontend.yaml index 5aec4f3..8c033ca 100644 --- a/microservices-demo-main/kubernetes-manifests/frontend.yaml +++ b/microservices-demo-main/kubernetes-manifests/frontend.yaml @@ -44,7 +44,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: frontend + image: shaheergooglepracticeregistry.azurecr.io/frontend:latest ports: - containerPort: 8080 readinessProbe: diff --git a/microservices-demo-main/kubernetes-manifests/loadgenerator.yaml b/microservices-demo-main/kubernetes-manifests/loadgenerator.yaml index c0e0e00..7db4873 100644 --- a/microservices-demo-main/kubernetes-manifests/loadgenerator.yaml +++ b/microservices-demo-main/kubernetes-manifests/loadgenerator.yaml @@ -88,8 +88,8 @@ spec: cpu: 300m memory: 256Mi limits: - cpu: 500m - memory: 512Mi + cpu: 200m + memory: 200Mi --- apiVersion: v1 kind: ServiceAccount diff --git a/microservices-demo-main/kubernetes-manifests/paymentservice.yaml b/microservices-demo-main/kubernetes-manifests/paymentservice.yaml index a0a1526..63bd73d 100644 --- a/microservices-demo-main/kubernetes-manifests/paymentservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/paymentservice.yaml @@ -43,7 +43,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: paymentservice + image: shaheergooglepracticeregistry.azurecr.io/paymentservice:latest ports: - containerPort: 50051 env: diff --git a/microservices-demo-main/kubernetes-manifests/productcatalogservice.yaml b/microservices-demo-main/kubernetes-manifests/productcatalogservice.yaml index 6774650..b6d2c72 100644 --- a/microservices-demo-main/kubernetes-manifests/productcatalogservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/productcatalogservice.yaml @@ -43,7 +43,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: productcatalogservice + image: shaheergooglepracticeregistry.azurecr.io/productcatalogservice:latest ports: - containerPort: 3550 env: diff --git a/microservices-demo-main/kubernetes-manifests/recommendationservice.yaml b/microservices-demo-main/kubernetes-manifests/recommendationservice.yaml index 2d2c6ee..abdfad4 100644 --- a/microservices-demo-main/kubernetes-manifests/recommendationservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/recommendationservice.yaml @@ -43,7 +43,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: recommendationservice + image: shaheergooglepracticeregistry.azurecr.io/recommendationservice:latest ports: - containerPort: 8080 readinessProbe: diff --git a/microservices-demo-main/kubernetes-manifests/shippingservice.yaml b/microservices-demo-main/kubernetes-manifests/shippingservice.yaml index 41cd526..464b708 100644 --- a/microservices-demo-main/kubernetes-manifests/shippingservice.yaml +++ b/microservices-demo-main/kubernetes-manifests/shippingservice.yaml @@ -42,7 +42,7 @@ spec: - ALL privileged: false readOnlyRootFilesystem: true - image: shippingservice + image: shaheergooglepracticeregistry.azurecr.io/shippingservice:latest ports: - containerPort: 50051 env: diff --git a/microservices-demo-main/src/adservice/Dockerfile b/microservices-demo-main/src/adservice/Dockerfile index f1087b7..cd62b86 100644 --- a/microservices-demo-main/src/adservice/Dockerfile +++ b/microservices-demo-main/src/adservice/Dockerfile @@ -1,19 +1,6 @@ -# Copyright 2020 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# FROM eclipse-temurin:21@sha256:0ec8616e48cc54bffbabad6e6d4d221b486cb7afcff0b351fc30676a426e4db7 AS builder FROM eclipse-temurin:21@sha256:0ec8616e48cc54bffbabad6e6d4d221b486cb7afcff0b351fc30676a426e4db7 AS builder - WORKDIR /app COPY ["build.gradle", "gradlew", "./"] @@ -27,15 +14,45 @@ RUN ./gradlew installDist FROM eclipse-temurin:21.0.4_7-jre-alpine@sha256:8cc1202a100e72f6e91bf05ab274b373a5def789ab6d9e3e293a61236662ac27 -# @TODO: https://github.com/GoogleCloudPlatform/microservices-demo/issues/2517 -# Download Stackdriver Profiler Java agent -# RUN mkdir -p /opt/cprof && \ -# wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent_alpine.tar.gz \ -# | tar xzv -C /opt/cprof && \ -# rm -rf profiler_java_agent.tar.gz WORKDIR /app COPY --from=builder /app . EXPOSE 9555 ENTRYPOINT ["/app/build/install/hipstershop/bin/AdService"] + +############################################################################## + + +# WORKDIR /app + +# # Copy build.gradle, gradlew, and settings.gradle from adservice +# COPY ./src/adservice/build.gradle ./src/adservice/gradlew ./src/adservice/settings.gradle ./ + +# # Copy gradle directory from the project root (higher up in the file tree) +# COPY ../gradle ./gradle + +# # Make gradlew executable and download repositories +# RUN chmod +x gradlew +# RUN ./gradlew downloadRepos + +# # Copy the rest of the adservice files +# COPY ./src/adservice . # Copy all adservice contents + +# # Build the application +# RUN chmod +x gradlew +# RUN ./gradlew installDist + +# # Stage 2: Create a smaller runtime image +# FROM eclipse-temurin:21.0.4_7-jre-alpine + +# WORKDIR /app + +# # Copy the built application from the first stage +# COPY --from=builder /app/build/install/hipstershop/bin/AdService . + +# # Expose the service port +# EXPOSE 9555 + +# # Run the application +# ENTRYPOINT ["/app/AdService"]