@@ -3,10 +3,10 @@ name: CI/CD
33on :
44 push :
55 branches :
6- - main
6+ - main # or specify your branch here
77
88jobs :
9- build-and-test :
9+ build-and-push :
1010 runs-on : ubuntu-latest
1111
1212 steps :
@@ -23,54 +23,62 @@ jobs:
2323 python -m pip install --upgrade pip
2424 pip install -r requirements.txt
2525
26- deploy_to_production :
26+ - name : Set up AWS Credentials
27+ run : |
28+ echo "${{ secrets.AWS_ACCESS_KEY_ID }}" > aws_access_key_id
29+ echo "${{ secrets.AWS_SECRET_ACCESS_KEY }}" > aws_secret_access_key
30+ aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
31+ aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
32+ aws configure set region ${{ secrets.AWS_REGION }}
33+
34+ - name : Log in to AWS ECR
35+ run : |
36+ aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.IMAGE_REGISTRY }}
37+
38+ - name : Build Docker image
39+ run : |
40+ LATEST_SHA=$(git rev-parse HEAD)
41+ docker build -t ${{ secrets.IMAGE_REGISTRY }}:$LATEST_SHA .
42+ docker tag ${{ secrets.IMAGE_REGISTRY }}:$LATEST_SHA ${{ secrets.IMAGE_REGISTRY }}:latest
43+
44+ - name : Push Docker image to AWS ECR
45+ run : |
46+ docker push ${{ secrets.IMAGE_REGISTRY }}:$LATEST_SHA
47+ docker push ${{ secrets.IMAGE_REGISTRY }}:latest
48+
49+ deploy :
2750 runs-on : ubuntu-latest
28- needs : build-and-test
51+ needs : build-and-push # Ensures the deploy job runs only after the build-and-push job
2952
3053 steps :
3154 - name : Checkout code
3255 uses : actions/checkout@v2
3356
34- - name : Configure AWS credentials
57+ - name : Set up AWS Credentials
3558 run : |
59+ echo "${{ secrets.AWS_ACCESS_KEY_ID }}" > aws_access_key_id
60+ echo "${{ secrets.AWS_SECRET_ACCESS_KEY }}" > aws_secret_access_key
3661 aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
3762 aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
38- aws configure set region ${{ vars.AWS_REGION }}
39-
40- - name : Install AWS CLI & kubectl
41- run : |
42- curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
43- chmod +x ./kubectl
44- sudo mv ./kubectl /usr/local/bin/kubectl
45- pip install --upgrade awscli
46- aws --version
47-
48- - name : Log in to AWS ECR
49- run : |
50- aws ecr get-login-password --region ${{ vars.AWS_REGION }} | docker login --username AWS --password-stdin ${{ vars.IMAGE_REGISTRY }}
63+ aws configure set region ${{ secrets.AWS_REGION }}
5164
5265 - name : Update kubeconfig for EKS
5366 run : |
54- aws eks update-kubeconfig --name eks-code2cloud-test --region ${{ vars.AWS_REGION }}
55-
56- - name : Build Docker image
57- run : |
58- LATEST_SHA=$(git rev-parse HEAD)
59- echo "LATEST_SHA=$LATEST_SHA" >> $GITHUB_ENV
60- docker build -t ${{ vars.IMAGE_REGISTRY }}:$LATEST_SHA .
61- docker tag ${{ vars.IMAGE_REGISTRY }}:$LATEST_SHA ${{ vars.IMAGE_REGISTRY }}:latest
67+ aws eks update-kubeconfig --name ${{ secrets.CLUSTER_NAME }} --region ${{ secrets.AWS_REGION }}
6268
63- - name : Push Docker image to AWS ECR
69+ - name : Check if the deployment exists
70+ id : deployment
6471 run : |
65- docker push ${{ vars.IMAGE_REGISTRY }}:$LATEST_SHA
66- docker push ${{ vars.IMAGE_REGISTRY }}:latest
72+ DEPLOYMENT_EXISTS=$(kubectl get deployment ${{ secrets.DEPLOYMENT_NAME }} -n default --ignore-not-found)
73+ echo "Deployment exists: $DEPLOYMENT_EXISTS"
74+ echo "::set-output name=exists::$DEPLOYMENT_EXISTS"
6775
68- - name : Deploy to EKS
76+ - name : Create or update deployment in EKS
6977 run : |
70- if ! kubectl get deployment ${{ vars.DEPLOYMENT_NAME }} -n default &> /dev/ null; then
71- echo "Deployment does not exist. Creating.. ."
72- kubectl create deployment ${{ vars .DEPLOYMENT_NAME }} --image=${{ vars .IMAGE_REGISTRY }}:$LATEST_SHA -n default
78+ if [[ " ${{ steps.deployment.outputs.exists }}" == " null" ]] ; then
79+ echo "Deployment does not exist. Creating deployment ."
80+ kubectl create deployment ${{ secrets .DEPLOYMENT_NAME }} --image=${{ secrets .IMAGE_REGISTRY }}:$LATEST_SHA -n default
7381 else
74- echo "Deployment exists. Updating.. ."
75- kubectl set image deployment/${{ vars .DEPLOYMENT_NAME }} ${{ vars .DEPLOYMENT_NAME }}=${{ vars .IMAGE_REGISTRY }}:$LATEST_SHA -n default
82+ echo "Deployment exists. Updating deployment ."
83+ kubectl set image deployment/${{ secrets .DEPLOYMENT_NAME }} ${{ secrets .DEPLOYMENT_NAME }}=${{ secrets .IMAGE_REGISTRY }}:$LATEST_SHA -n default
7684 fi
0 commit comments