Skip to content

Commit bc8ec6d

Browse files
Add eks deployment pipeline (#21)
* add eks deployment pipeline for conductor server * add eks deployment step seperately instead of composite actions * fix in declaring account id variable * remove the steps for ecr login * made change in environemnt bucket format * made change in service name * typo fix in ecr repository * correcting ecr repository format * ecr repository was not properly passed from previous job output, fix * make ecr repository as github outputs
1 parent 3a08c55 commit bc8ec6d

2 files changed

Lines changed: 49 additions & 65 deletions

File tree

.github/workflows/cd-server.yaml

Lines changed: 49 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,31 @@ on:
1515
required: true
1616
type: string
1717
description: Provide tag (Eg:v3.14.0)
18-
18+
permissions:
19+
id-token: write
20+
contents: write
21+
packages: read
22+
actions: read
1923
env:
20-
SERVICE_NAME: conductor-server
24+
SERVICE_NAME: conductor
2125
AWS_REGION: "ap-south-1"
22-
26+
HELM_CHART_NAME: "application-helm-chart"
2327

2428
jobs:
2529
prepare-env:
2630
name: Prepare Env
27-
runs-on: 'ubuntu-latest'
31+
runs-on: "ubuntu-latest"
2832
timeout-minutes: 2
2933
outputs:
3034
AWS_ROLE: ${{ steps.vars.outputs.AWS_ROLE }}
3135
ENV: ${{ steps.vars.outputs.ENV }}
3236
PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }}
33-
ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }}
34-
ECS_SERVICE: ${{ steps.set_env.outputs.ECS_SERVICE }}
35-
TASK_DEFINITION: ${{ steps.set_env.outputs.TASK_DEFINITION }}
36-
CONTAINER_NAME: ${{ steps.set_env.outputs.CONTAINER_NAME }}
37+
K8S_CLUSTER: ${{ steps.set_env.outputs.K8S_CLUSTER }}
3738
ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }}
39+
ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }}
3840
SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }}
39-
41+
AWS_ACCOUNT_ID: ${{ steps.vars.outputs.AWS_ACCOUNT_ID}}
42+
4043
steps:
4144
- id: vars
4245
shell: bash
@@ -45,7 +48,7 @@ jobs:
4548
ENV=${{ github.event.inputs.environment }}
4649
IMAGE_TAG=${{ github.event.inputs.tag }}
4750
echo $BRANCH
48-
51+
4952
if [ -z "$ENV" ]
5053
then
5154
case $BRANCH in
@@ -67,17 +70,20 @@ jobs:
6770
then
6871
echo "AWS_ROLE=PRD_AWS_ROLE" >> $GITHUB_OUTPUT
6972
echo "PROJECT_PREFIX=sirn-prd-mb" >> $GITHUB_OUTPUT
70-
echo "SLACK_WEBHOOK_URL=PRD_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
73+
echo "SLACK_WEBHOOK_URL=PRD_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
74+
echo "AWS_ACCOUNT_ID=PRD_AWS_ACCOUNT_ID" >> $GITHUB_OUTPUT
7175
elif [ $ENV == 'stg' ]
7276
then
7377
echo "AWS_ROLE=STG_AWS_ROLE" >> $GITHUB_OUTPUT
7478
echo "PROJECT_PREFIX=sirn-stg-mb" >> $GITHUB_OUTPUT
75-
echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
79+
echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
80+
echo "AWS_ACCOUNT_ID=NON_PRD_AWS_ACCOUNT_ID" >> $GITHUB_OUTPUT
7681
elif [ $ENV == 'dev' ]
7782
then
7883
echo "AWS_ROLE=DEV_AWS_ROLE" >> $GITHUB_OUTPUT
7984
echo "PROJECT_PREFIX=sirn-dev-mb" >> $GITHUB_OUTPUT
8085
echo "SLACK_WEBHOOK_URL=DEV_SLACK_WEBHOOK_URL" >> $GITHUB_OUTPUT
86+
echo "AWS_ACCOUNT_ID=NON_PRD_AWS_ACCOUNT_ID" >> $GITHUB_OUTPUT
8187
else
8288
echo "Branch not configured!"
8389
exit 1
@@ -89,68 +95,52 @@ jobs:
8995
id: set_env
9096
run: |
9197
PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }}
92-
echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT
93-
echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT
94-
echo "ECS_SERVICE=$PROJECT_PREFIX-svc-$SERVICE_NAME" >> $GITHUB_OUTPUT
95-
echo "TASK_DEFINITION=$PROJECT_PREFIX-td-$SERVICE_NAME" >> $GITHUB_OUTPUT
96-
echo "CONTAINER_NAME=$PROJECT_PREFIX-cntr-$SERVICE_NAME" >> $GITHUB_OUTPUT
98+
echo "K8S_CLUSTER=$PROJECT_PREFIX-prime" >> $GITHUB_OUTPUT
99+
echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT
97100
echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY
98-
101+
echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-conductor-server" >> $GITHUB_OUTPUT
102+
99103
# Deploy Conductor UI Image to ECS
100-
deploy-server-image:
101-
name: Deploy Server Image
102-
runs-on: 'ubuntu-latest'
103-
timeout-minutes: 20
104+
deploy-to-k8s:
105+
name: Deploy to k8s
106+
runs-on: ubuntu-latest
107+
container:
108+
image: public.ecr.aws/kvsiren-dev/pipeline/helm-deploy:latest
109+
timeout-minutes: 15
104110
permissions:
105111
id-token: write
106112
pull-requests: write
107113
contents: read
108-
needs: prepare-env
114+
needs:
115+
- prepare-env
109116
env:
110-
AWS_ROLE: ${{ needs.prepare-env.outputs.AWS_ROLE }}
111-
ENV: ${{ needs.prepare-env.outputs.ENV }}
112-
PROJECT_PREFIX: ${{needs.prepare-env.outputs.PROJECT_PREFIX}}
113-
ECR_REPOSITORY: ${{needs.prepare-env.outputs.ECR_REPOSITORY}}
114-
IMAGE_TAG: ${{ github.event.inputs.tag }}
115-
ECS_CLUSTER: ${{ needs.prepare-env.outputs.ECS_CLUSTER }}
116-
ECS_SERVICE: ${{ needs.prepare-env.outputs.ECS_SERVICE }}
117-
TASK_DEFINITION: ${{ needs.prepare-env.outputs.TASK_DEFINITION }}
118-
CONTAINER_NAME: ${{ needs.prepare-env.outputs.CONTAINER_NAME }}
119-
117+
AWS_ACCOUNT_ID: ${{ needs.prepare-env.outputs.AWS_ACCOUNT_ID }}
118+
ECR_REPOSITORY: ${{ needs.prepare-env.outputs.ECR_REPOSITORY }}
120119
steps:
121120
- name: Checkout code from action
122121
uses: actions/checkout@v2
123122

124123
- name: Configure AWS credentials
125124
uses: aws-actions/configure-aws-credentials@v4
126125
with:
127-
role-to-assume: ${{ secrets[env.AWS_ROLE] }}
126+
role-to-assume: arn:aws:iam::${{ vars[env.AWS_ACCOUNT_ID] }}:role/github-actions
128127
aws-region: ${{ env.AWS_REGION }}
129128

130-
- name: Amazon ECR Login
131-
id: login-ecr
132-
uses: aws-actions/amazon-ecr-login@v1.7.0
129+
- name: Deploy to Kubernetes
130+
shell: bash
131+
run: |
132+
aws eks update-kubeconfig --name ${{ needs.prepare-env.outputs.K8S_CLUSTER }}
133+
aws s3 cp s3://${{ needs.prepare-env.outputs.ENVIRONMENT_BUCKET }}/helm/${{ env.SERVICE_NAME }}/values.yaml ./values.yaml
134+
cat ./values.yaml
135+
aws ecr get-login-password --region ${{ env.AWS_REGION }} | helm registry login --username AWS --password-stdin ${{ vars[env.AWS_ACCOUNT_ID] }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com
133136
134-
- name: Check if image tag exists in ECR
135-
id: check-image-existence
136-
run: |
137-
if aws ecr describe-images --repository-name "${{ env.ECR_REPOSITORY }}" --region "${{ env.AWS_REGION }}" --image-ids imageTag="${{ env.IMAGE_TAG }}" 2>&1 | grep -q "imageTag"; then
138-
echo "Image tag $IMAGE_TAG exists in ECR"
139-
else
140-
echo "Error: Image tag $IMAGE_TAG does not exist in ECR"
141-
exit 1
142-
fi
137+
# Construct base Helm command
138+
HELM_CMD="helm upgrade --install ${{ env.SERVICE_NAME }} oci://${{ vars[env.AWS_ACCOUNT_ID] }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.HELM_CHART_NAME }} \
139+
--namespace ${{ needs.prepare-env.outputs.ENV }} \
140+
--values values.yaml \
141+
--set default.image.repository='${{ vars[env.AWS_ACCOUNT_ID] }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPOSITORY }}' \
142+
--set default.image.tag='${{ github.event.inputs.tag }}'"
143143
144-
- name: Deploy backend
145-
id: deploy_backend
146-
uses: ./.github/actions/deploy-ecs
147-
env:
148-
APP_IMAGE: ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
149-
with:
150-
aws-region : ${{ env.AWS_REGION }}
151-
aws-role: ${{ secrets[env.AWS_ROLE] }}
152-
task-definition: ${{ env.TASK_DEFINITION }}
153-
container-name: ${{ env.CONTAINER_NAME }}
154-
ecs-service: ${{ env.ECS_SERVICE }}
155-
ecs-cluster: ${{ env.ECS_CLUSTER }}
156-
image: ${{ env.APP_IMAGE }}
144+
# Run the Helm command
145+
echo "Running: $HELM_CMD"
146+
eval $HELM_CMD

.github/workflows/ci-server-.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ jobs:
2929
AWS_ROLE: ${{ steps.vars.outputs.AWS_ROLE }}
3030
ENV: ${{ steps.vars.outputs.ENV }}
3131
PROJECT_PREFIX: ${{ steps.vars.outputs.PROJECT_PREFIX }}
32-
ECS_CLUSTER: ${{ steps.set_env.outputs.ECS_CLUSTER }}
3332
ECR_REPOSITORY: ${{ steps.set_env.outputs.ECR_REPOSITORY }}
3433
ENVIRONMENT_BUCKET: ${{ steps.set_env.outputs.ENVIRONMENT_BUCKET }}
3534
SLACK_WEBHOOK_URL: ${{ steps.vars.outputs.SLACK_WEBHOOK_URL }}
@@ -88,7 +87,6 @@ jobs:
8887
id: set_env
8988
run: |
9089
PROJECT_PREFIX=${{ steps.vars.outputs.PROJECT_PREFIX }}
91-
echo "ECS_CLUSTER=$PROJECT_PREFIX-ecs-cluster" >> $GITHUB_OUTPUT
9290
echo "ECR_REPOSITORY=$PROJECT_PREFIX-ecr-$SERVICE_NAME" >> $GITHUB_OUTPUT
9391
echo "ENVIRONMENT_BUCKET=$PROJECT_PREFIX-s3-environment" >> $GITHUB_OUTPUT
9492
echo ":seedling: Branch:${GITHUB_REF#refs/heads/}" >> $GITHUB_STEP_SUMMARY
@@ -133,10 +131,6 @@ jobs:
133131
role-to-assume: ${{ secrets[env.AWS_ROLE] }}
134132
aws-region: ${{ env.AWS_REGION }}
135133

136-
- name: Download S3 file
137-
run: |
138-
aws s3 cp s3://${PROJECT_PREFIX}-s3-environment/conductor-server/conductor-server.properties ./docker/server/config/conductor-server.properties
139-
140134
- name: Amazon ECR Login
141135
id: login-ecr
142136
uses: aws-actions/amazon-ecr-login@v1.7.0

0 commit comments

Comments
 (0)