From 502b36ffd220647336454450aeea5e808ab33a8b Mon Sep 17 00:00:00 2001 From: Rv0919 <149999906+Rv0919@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:17:03 +0530 Subject: [PATCH 1/3] workflow --- .github/workflows/main.yml | 69 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..0b0e520 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,69 @@ +name: bookstore + +on: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 7 + + - name: Setup Node.js + uses: actions/setup-node@v2 + + - name: Install dependencies + run: dotnet restore + + - name: Build + run: dotnet build --configuration Release --no-restore + + - name: Test + run: dotnet test --no-restore --verbosity normal + + deploy: + needs: build + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Docker + uses: docker/setup-buildx-action@v1 + + - name: Configure AWS CLI + run: | + aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }} + aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws configure set region us-east-1 + + - name: Login to Amazon ECR + run: | + aws --version + aws ecr get-login-password --region ap-south-1 | docker login -u AWS --password-stdin ${{ secrets.ECS_ACCOUNT }} + + - name: Build and Push Docker images + run: | + docker build -t ${{ secrets.ECR_REPO_AUTH }} --target auth -f Dockerfile . + docker push ${{ secrets.ECR_REPO_AUTH }} + + docker build -t ${{ secrets.ECR_REPO_MIGRATION }} --target migrator -f Dockerfile . + docker push ${{ secrets.ECR_REPO_MIGRATION }} + + docker build -t ${{ secrets.ECR_REPO }} --target web -f Dockerfile . + docker push ${{ secrets.ECR_REPO }} + + docker build -t ${{ secrets.ECR_REPO_HOST }} --target host -f Dockerfile . + docker push ${{ secrets.ECR_REPO_HOST }} + + From 2ab52fad2c7efd941f5492ddb9a102b49c1c847b Mon Sep 17 00:00:00 2001 From: Rv0919 <149999906+Rv0919@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:25:00 +0530 Subject: [PATCH 2/3] Update main.yml --- .github/workflows/main.yml | 137 +++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 59 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0b0e520..346674a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: bookstore +name: Main Workflow on: push: @@ -6,64 +6,83 @@ on: - main jobs: - build: + build_and_deploy: runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v3 - with: - dotnet-version: 7 - - - name: Setup Node.js - uses: actions/setup-node@v2 - - - name: Install dependencies - run: dotnet restore - - - name: Build - run: dotnet build --configuration Release --no-restore - - - name: Test - run: dotnet test --no-restore --verbosity normal - - deploy: - needs: build - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Set up Docker - uses: docker/setup-buildx-action@v1 - - - name: Configure AWS CLI - run: | - aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }} - aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws configure set region us-east-1 - - - name: Login to Amazon ECR - run: | - aws --version - aws ecr get-login-password --region ap-south-1 | docker login -u AWS --password-stdin ${{ secrets.ECS_ACCOUNT }} - - - name: Build and Push Docker images - run: | - docker build -t ${{ secrets.ECR_REPO_AUTH }} --target auth -f Dockerfile . - docker push ${{ secrets.ECR_REPO_AUTH }} - - docker build -t ${{ secrets.ECR_REPO_MIGRATION }} --target migrator -f Dockerfile . - docker push ${{ secrets.ECR_REPO_MIGRATION }} - - docker build -t ${{ secrets.ECR_REPO }} --target web -f Dockerfile . - docker push ${{ secrets.ECR_REPO }} - - docker build -t ${{ secrets.ECR_REPO_HOST }} --target host -f Dockerfile . - docker push ${{ secrets.ECR_REPO_HOST }} - - + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Terraform + uses: hashicorp/setup-terraform@v1 + with: + terraform_version: 1.0.0 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + unzip \ + jq + + - name: Install .NET SDK + run: | + wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb + sudo dpkg -i packages-microsoft-prod.deb + sudo apt-get update + sudo apt-get install -y dotnet-sdk-5.0 + + - name: Install PostgreSQL + run: | + sudo apt-get install -y postgresql + + - name: Install Node.js and Yarn + uses: actions/setup-node@v3 + with: + node-version: '14' + - run: | + sudo apt-get install -y nodejs + npm install -g yarn + + - name: Install Docker + uses: docker/setup-docker@v1 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: 'us-east-1' + + - name: Run Terraform apply + run: | + terraform init + terraform apply -auto-approve + + - name: Build and push Docker images + run: | + docker-compose build + docker tag your_image:latest ${{ secrets.AWS_ECR_REPO_URL }}/your_image:latest + docker push ${{ secrets.AWS_ECR_REPO_URL }}/your_image:latest + + - name: Update ECS service + run: | + AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) + AWS_REGION="us-east-1" + ECR_REPO_NAME="your_image" + ECS_CLUSTER_NAME="your_ecs_cluster" + ECS_SERVICE_NAME="your_ecs_service" + IMAGE_TAG="latest" + + ECR_IMAGE_URI="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPO_NAME}:${IMAGE_TAG}" + + # Update ECS service with the new image + aws ecs update-service --cluster $ECS_CLUSTER_NAME --service $ECS_SERVICE_NAME --force-new-deployment --task-definition "${ECR_REPO_NAME}:${IMAGE_TAG}" + + - name: Run Terraform destroy + run: | + terraform destroy -auto-approve + + - name: Print resources destroyed + run: | + echo "Resources destroyed successfully" From 354794d66fe51dc30728fea6fa73f511c9103e7b Mon Sep 17 00:00:00 2001 From: Rv0919 <149999906+Rv0919@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:57:31 +0530 Subject: [PATCH 3/3] AWS Architecture --- Architecture | 1 + 1 file changed, 1 insertion(+) create mode 100644 Architecture diff --git a/Architecture b/Architecture new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Architecture @@ -0,0 +1 @@ +