Skip to content

Commit

Permalink
Add CD for UI test
Browse files Browse the repository at this point in the history
  • Loading branch information
infinyte-ops committed Feb 1, 2024
1 parent 7ed0010 commit c6db158
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 65 deletions.
52 changes: 52 additions & 0 deletions .github/actions/deploy-ecs/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: 'Deploy to ECS'
description: 'Deploy new image to given ECS service by updating task definition file'
inputs:
aws-role:
required: true
description: "AWS ROLE"
aws-region:
required: true
description: "AWS REGION"
task-definition:
required: true
description: "TASK DEFINITION"
container-name:
required: true
description: "CONTAINER NAME"
ecs-service:
required: true
description: "ECS SERVICE"
ecs-cluster:
required: true
description: "ECS CLUSTER"
image:
required: true
description: "APP IMAGE"
runs:
using: "composite"
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ inputs.aws-role }}
aws-region: ${{ inputs.aws-region }}
- name: Download task definition
run: |
aws ecs describe-task-definition --task-definition ${{ inputs.task-definition }} \
--query taskDefinition > task-definition.json
shell: bash
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: ${{ inputs.container-name }}
image: ${{ inputs.image }}

- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ inputs.ecs-service }}
cluster: ${{ inputs.ecs-cluster }}
wait-for-service-stability: true
100 changes: 60 additions & 40 deletions .github/workflows/cd-server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ on:
description: Provide tag (Eg:v3.14.0)

env:
SERVICE_NAME: conductor-server
SERVICE_NAME: conductor-server-test
AWS_REGION: "ap-south-1"

jobs:
Expand All @@ -30,8 +30,6 @@ jobs:
PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }}
ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }}
ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }}
ECR_REPOSITORY_UI: ${{ steps.set_env.outputs.ECR_REPOSITORY_UI }}
ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }}
SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }}

steps:
Expand Down Expand Up @@ -63,11 +61,13 @@ jobs:
then
echo "AWS_ROLE=PRD_AWS_ROLE" >> $GITHUB_OUTPUT
echo "PROJECT_PREFIX=sirn-prd-mb" >> $GITHUB_OUTPUT
echo "DEFAULT_CONF=default-prd.conf" >> $GITHUB_OUTPUT
echo "SLACK_WEBHOOK_URL=PRD_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
elif [ $ENV == 'dev' ]
then
echo "AWS_ROLE=DEV_AWS_ROLE" >> $GITHUB_OUTPUT
echo "PROJECT_PREFIX=sirn-dev-mb" >> $GITHUB_OUTPUT
echo "DEFAULT_CONF=default-dev.conf" >> $GITHUB_OUTPUT
echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
else
echo "Branch not configured!"
Expand All @@ -80,14 +80,13 @@ jobs:
run: |
PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }}
echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY=$PROJECT_PREFIX-conductor-server" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY_UI=$PROJECT_PREFIX-conductor-ui" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT
echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY
# Building and Pushing Conductor Server Image to ECR
build-push-image:
name: Build and Push Server Image
# Deploy Conductor Server Image to ECS
deploy-server-image:
name: Deploy Server Image
runs-on: 'ubuntu-latest'
timeout-minutes: 20
permissions:
Expand All @@ -101,53 +100,74 @@ jobs:
PROJECT_PREFIX: ${{needs.prepare-env.outputs.PROJECT_PREFIX}}
ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY}}
ENVIRONMENT_BUCKET: ${{needs.prepare-env.outputs.ENVIRONMENT_BUCKET}}
DEFAULT_CONF: ${{needs.prepare-env.outputs.DEFAULT_CONF}}
IMAGE_TAG: ${{ github.event.inputs.tag }}
outputs:
ECR_REPO: ${{ steps.build.outputs.ECR_REPO }}
APP_IMAGE: ${{ steps.image.outputs.APP_IMAGE }}

steps:
- name: "Checkout repository"
uses: actions/checkout@v4
-
# Add support for more platforms with QEMU (optional)
# https://github.com/docker/setup-qemu-action
name: Set up QEMU
uses: docker/setup-qemu-action@v3
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Checkout code from action
uses: actions/checkout@v2

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets[env.AWS_ROLE] }}
aws-region: ${{ env.AWS_REGION }}

- name: Download S3 file
run: |
aws s3 cp s3://${PROJECT_PREFIX}-s3-environment/conductor-server/conductor-server.properties ./docker/server/config/conductor-server.properties

- name: Amazon ECR Login
id: login-ecr
uses: aws-actions/[email protected]

- name: Build and push to Amazon ECR
id: build
uses: docker/[email protected]
- name: Configure env
id: configure_env
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
with:
context: .
file: ./Dockerfile
push: true
platforms: linux/amd64
tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
run: |
echo "TASK_DEFINITION=$PROJECT_PREFIX-td-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "CONTAINER_NAME=$PROJECT_PREFIX-cntr-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "APP_IMAGE=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT
- name: Get latest task definition
shell: bash
run: |
aws ecs describe-task-definition --task-definition ${{ steps.configure_env.outputs.TASK_DEFINITION }} \
--query taskDefinition > task-definition.json
- name: image name
id: image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: ${{ steps.configure_env.outputs.CONTAINER_NAME }}
image: ${{ steps.configure_env.outputs.APP_IMAGE }}

- name: Remove unwanted fields from task definition
id: task_def_cleanup
shell: bash
run: |
echo "APP_IMAGE=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT
jq 'del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .compatibilities, .registeredAt, .registeredBy)' ${{ steps.task-def.outputs.task-definition }} > updated-task-definition.json
- name: Register ECS task definition
shell: bash
id: task-def-register
run: |
revision=$(aws ecs register-task-definition \
--region ${{ env.AWS_REGION }} \
--family ${{ steps.configure_env.outputs.TASK_DEFINITION }} \
--cli-input-json file://updated-task-definition.json \
--query taskDefinition.revision)
echo "revision=$revision" >> $GITHUB_OUTPUT
- name: Deploy backend
id: deploy_backend
uses: ./.github/actions/deploy-ecs
with:
aws-region : ${{ env.AWS_REGION }}
aws-role: ${{ secrets[env.AWS_ROLE] }}
task-definition: ${{ steps.configure_env.outputs.TASK_DEFINITION }}
container-name: ${{ steps.configure_env.outputs.CONTAINER_NAME }}
ecs-service: ${{ steps.configure_env.outputs.ECS_SERVICE }}
ecs-cluster: ${{ env.ECS_CLUSTER }}
image: ${{ steps.configure_env.outputs.APP_IMAGE }}
32 changes: 18 additions & 14 deletions .github/workflows/cd-ui.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ jobs:
PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }}
ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }}
ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }}
ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }}
DEFAULT_CONF: ${{ steps.vars.outputs.DEFAULT_CONF }}
SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }}

steps:
Expand Down Expand Up @@ -82,7 +80,7 @@ jobs:
run: |
PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }}
echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY=$PROJECT_PREFIX-conductor-ui" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT
echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY
Expand All @@ -100,7 +98,7 @@ jobs:
AWS_ROLE: ${{ needs.prepare-env.outputs.AWS_ROLE }}
ENV: ${{ needs.prepare-env.outputs.ENV }}
PROJECT_PREFIX: ${{needs.prepare-env.outputs.PROJECT_PREFIX}}
ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY_UI}}
ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY}}
ENVIRONMENT_BUCKET: ${{needs.prepare-env.outputs.ENVIRONMENT_BUCKET}}
DEFAULT_CONF: ${{needs.prepare-env.outputs.DEFAULT_CONF}}
IMAGE_TAG: ${{ github.event.inputs.tag }}
Expand All @@ -109,21 +107,27 @@ jobs:
APP_IMAGE: ${{ steps.image.outputs.APP_IMAGE }}

steps:
- name: configure env
id: configure_env
run: |
echo "TASK_DEFINITION=$PROJECT_PREFIX-td-$SERVICE_NAME-test" >> $GITHUB_OUTPUT
echo "CONTAINER_NAME=$PROJECT_PREFIX-cntr-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "APP_IMAGE=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}"
- name: Checkout code from action
uses: actions/checkout@v2

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets[env.AWS_ROLE] }}
aws-region: ${{ env.AWS_REGION }}

- name: Amazon ECR Login
id: login-ecr
uses: aws-actions/[email protected]

- name: Configure env
id: configure_env
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
run: |
echo "TASK_DEFINITION=$PROJECT_PREFIX-td-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "CONTAINER_NAME=$PROJECT_PREFIX-cntr-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "APP_IMAGE=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT
- name: Get latest task definition
shell: bash
Expand All @@ -137,7 +141,7 @@ jobs:
with:
task-definition: task-definition.json
container-name: ${{ steps.configure_env.outputs.CONTAINER_NAME }}
image: ${{ env.APP_IMAGE }}
image: ${{ steps.configure_env.outputs.APP_IMAGE }}

- name: Remove unwanted fields from task definition
id: task_def_cleanup
Expand All @@ -156,7 +160,7 @@ jobs:
--query taskDefinition.revision)
echo "revision=$revision" >> $GITHUB_OUTPUT
- name: deploy backend
- name: Deploy backend
id: deploy_backend
uses: ./.github/actions/deploy-ecs
with:
Expand All @@ -166,4 +170,4 @@ jobs:
container-name: ${{ steps.configure_env.outputs.CONTAINER_NAME }}
ecs-service: ${{ steps.configure_env.outputs.ECS_SERVICE }}
ecs-cluster: ${{ env.ECS_CLUSTER }}
image: ${{ env.APP_IMAGE }}
image: ${{ steps.configure_env.outputs.APP_IMAGE }}
8 changes: 3 additions & 5 deletions .github/workflows/ci-server-.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ on:
description: Provide tag (Eg:v3.14.0)

env:
SERVICE_NAME: conductor
SERVICE_NAME: conductor-server-test
AWS_REGION: "ap-south-1"

jobs:
Expand All @@ -30,7 +30,6 @@ jobs:
PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }}
ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }}
ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }}
ECR_REPOSITORY_UI: ${{ steps.set_env.outputs.ECR_REPOSITORY_UI }}
ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }}
SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }}

Expand Down Expand Up @@ -80,8 +79,7 @@ jobs:
run: |
PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }}
echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY=$PROJECT_PREFIX-conductor-server" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY_UI=$PROJECT_PREFIX-conductor-ui" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT
echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY
Expand Down Expand Up @@ -144,7 +142,7 @@ jobs:
platforms: linux/amd64
tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}

- name: image name
- name: Image name
id: image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/ci-ui.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ on:
description: Provide tag (Eg:v3.14.0)

env:
SERVICE_NAME: conductor
SERVICE_NAME: conductor-ui-test
AWS_REGION: "ap-south-1"

jobs:
Expand All @@ -30,7 +30,6 @@ jobs:
PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }}
ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }}
ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }}
ECR_REPOSITORY_UI: ${{ steps.set_env.outputs.ECR_REPOSITORY_UI }}
ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }}
DEFAULT_CONF: ${{ steps.vars.outputs.DEFAULT_CONF }}
SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }}
Expand All @@ -41,6 +40,7 @@ jobs:
run: |
BRANCH="${GITHUB_REF#refs/heads/}"
ENV=${{ github.event.inputs.environment }}
IMAGE_TAG=${{ github.event.inputs.tag }}
echo $BRANCH
if [ -z "$ENV" ]
Expand Down Expand Up @@ -78,13 +78,13 @@ jobs:
fi
echo "ENV=$ENV" >> $GITHUB_OUTPUT
echo ":rocket: Environment - $ENV " >> $GITHUB_STEP_SUMMARY
echo ":rocket: Image Tag - $IMAGE_TAG " >> $GITHUB_STEP_SUMMARY
- name: set variables
id: set_env
run: |
PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }}
echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY=$PROJECT_PREFIX-conductor-server" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY_UI=$PROJECT_PREFIX-conductor-ui" >> $GITHUB_OUTPUT
echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT
echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT
echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY
Expand All @@ -102,7 +102,7 @@ jobs:
AWS_ROLE: ${{ needs.prepare-env.outputs.AWS_ROLE }}
ENV: ${{ needs.prepare-env.outputs.ENV }}
PROJECT_PREFIX: ${{needs.prepare-env.outputs.PROJECT_PREFIX}}
ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY_UI}}
ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY}}
ENVIRONMENT_BUCKET: ${{needs.prepare-env.outputs.ENVIRONMENT_BUCKET}}
DEFAULT_CONF: ${{needs.prepare-env.outputs.DEFAULT_CONF}}
IMAGE_TAG: ${{ github.event.inputs.tag }}
Expand Down Expand Up @@ -159,7 +159,7 @@ jobs:
platforms: linux/amd64
tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}

- name: image name
- name: Image name
id: image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
Expand Down

0 comments on commit c6db158

Please sign in to comment.