Skip to content

ecr img tag

ecr img tag #24

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: 1.22.2
- name: Install dependencies
run: go mod download
- name: Test code
env:
DB_URI: ${{ secrets.TEST_DB_URI }}
JWT_SECRET: ${{ secrets.TEST_JWT_SECRET }}
ENVIRONMENT: ${{ secrets.ENVIRONMENT }}
run: |
cd test
go test -run TestOrder
- name: Build and push Docker image
if: |
github.event_name == 'push' &&
github.ref == 'refs/heads/main'
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
DB_URI: ${{ secrets.DB_URI }}
run: |
echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin
docker build --build-arg JWT_SECRET=${JWT_SECRET} --build-arg DB_URI=${DB_URI} -t piyush7833/chat-api:latest .
docker push piyush7833/chat-api:latest
- name: Update ECS task definition and service
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
ECS_CLUSTER: ${{ secrets.ECS_CLUSTER }}
ECS_SERVICE: ${{ secrets.ECS_SERVICE }}
ECS_TASK_DEFINITION: ${{ secrets.ECS_TASK_DEFINITION }}
ECR_IMAGE_URI: ${{ secrets.AWS_ECR_IMAGE_URL }}
run: |
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ECR_IMAGE_URI
docker tag piyush7833/chat-api:latest $ECR_IMAGE_URI/chat-api:latest
docker push $ECR_IMAGE_URI/chat-api:latest
echo "Fetching current task definition"
TASK_DEFINITION_JSON=$(aws ecs describe-task-definition --task-definition $ECS_TASK_DEFINITION)
echo "Updating task definition with new image"
NEW_TASK_DEF_JSON=$(echo $TASK_DEFINITION_JSON | jq --arg IMAGE_URI "$ECR_IMAGE_URI:latest" '.taskDefinition | .containerDefinitions[0].image=$IMAGE_URI')
echo "Registering new task definition"
NEW_TASK_DEF_FAMILY=$(echo $NEW_TASK_DEF_JSON | jq -r .family)
NEW_TASK_DEF=$(aws ecs register-task-definition \
--family $NEW_TASK_DEF_FAMILY \
--task-role-arn $(echo $NEW_TASK_DEF_JSON | jq -r .taskRoleArn) \
--execution-role-arn $(echo $NEW_TASK_DEF_JSON | jq -r .executionRoleArn) \
--network-mode $(echo $NEW_TASK_DEF_JSON | jq -r .networkMode) \
--container-definitions "$(echo $NEW_TASK_DEF_JSON | jq -r .containerDefinitions)" \
--requires-compatibilities "$(echo $NEW_TASK_DEF_JSON | jq -r .requiresCompatibilities)" \
--cpu $(echo $NEW_TASK_DEF_JSON | jq -r .cpu) \
--memory $(echo $NEW_TASK_DEF_JSON | jq -r .memory))
NEW_TASK_DEF_ARN=$(echo $NEW_TASK_DEF | jq -r .taskDefinition.taskDefinitionArn)
echo "Updating ECS service to use the new task definition"
aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --task-definition $NEW_TASK_DEF_ARN
# aws configure AWS-ACCESS-KEY-ID $AWS_ACCESS_KEY_ID set AWS-SECRET-ACCESS-KEY $AWS_SECRET_ACCESS_KEY set region $AWS_REGION
# deploy:
# runs-on: ubuntu-latest
# needs: build
# steps:
# - name: Update ECS task definition and service
# if: github.event_name == 'push' && github.ref == 'refs/heads/main'
# env:
# AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
# AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# AWS_REGION: ${{ secrets.AWS_REGION }}
# ECS_CLUSTER: ${{ secrets.ECS_CLUSTER }}
# ECS_SERVICE: ${{ secrets.ECS_SERVICE }}
# ECS_TASK_DEFINITION: ${{ secrets.ECS_TASK_DEFINITION }}
# ECR_IMAGE_URI: ${{ secrets.AWS_ECR_IMAGE_URL }}
# # IMAGE_URI: piyush7833/chat-api:latest
# run: |
# aws ecr get-login-password --region eu-north-1 | docker login --username AWS --password-stdin $ECR_IMAGE_URI
# docker tag piyush7833/chat-api:latest $ECR_IMAGE_URI:latest
# docker push $ECR_IMAGE_URI:latest
# echo "Fetching current task definition"
# TASK_DEFINITION_JSON=$(aws ecs describe-task-definition --task-definition $ECS_TASK_DEFINITION)
# echo "Updating task definition with new image"
# NEW_TASK_DEF_JSON=$(echo $TASK_DEFINITION_JSON | jq --arg IMAGE_URI "$ECR_IMAGE_URI" '.taskDefinition | .containerDefinitions[0].image=$ECR_IMAGE_URI')
# echo "Registering new task definition"
# NEW_TASK_DEF_FAMILY=$(echo $NEW_TASK_DEF_JSON | jq -r .family)
# NEW_TASK_DEF=$(aws ecs register-task-definition \
# --family $NEW_TASK_DEF_FAMILY \
# --task-role-arn $(echo $NEW_TASK_DEF_JSON | jq -r .taskRoleArn) \
# --execution-role-arn $(echo $NEW_TASK_DEF_JSON | jq -r .executionRoleArn) \
# --network-mode $(echo $NEW_TASK_DEF_JSON | jq -r .networkMode) \
# --container-definitions "$(echo $NEW_TASK_DEF_JSON | jq -r .containerDefinitions)" \
# --requires-compatibilities "$(echo $NEW_TASK_DEF_JSON | jq -r .requiresCompatibilities)" \
# --cpu $(echo $NEW_TASK_DEF_JSON | jq -r .cpu) \
# --memory $(echo $NEW_TASK_DEF_JSON | jq -r .memory))
# NEW_TASK_DEF_ARN=$(echo $NEW_TASK_DEF | jq -r .taskDefinition.taskDefinitionArn)
# echo "Updating ECS service to use the new task definition"
# aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --task-definition $NEW_TASK_DEF_ARN