1- name : CI/CD Pipeline
1+ name : CI/CD
22
33on :
44 push :
55 branches :
6- - main # or specify your branch here
6+ - main
77
88jobs :
99 build-and-test :
@@ -16,89 +16,61 @@ jobs:
1616 - name : Set up Python
1717 uses : actions/setup-python@v2
1818 with :
19- python-version : ' 3.8' # Change the Python version if needed
19+ python-version : ' 3.8'
2020
2121 - name : Install dependencies
2222 run : |
2323 python -m pip install --upgrade pip
2424 pip install -r requirements.txt
2525
26- build-and-push-image :
26+ deploy_to_production :
2727 runs-on : ubuntu-latest
2828 needs : build-and-test
29+
2930 steps :
3031 - name : Checkout code
3132 uses : actions/checkout@v2
3233
33- - name : Set up AWS Credentials
34+ - name : Configure AWS credentials
3435 run : |
35- echo "${{ secrets.AWS_ACCESS_KEY_ID }}" > aws_access_key_id
36- echo "${{ secrets.AWS_SECRET_ACCESS_KEY }}" > aws_secret_access_key
3736 aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
3837 aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
39- aws configure set region ${{ secrets .AWS_REGION }} # Ensure AWS_REGION is set as a secret in GitHub
38+ aws configure set region ${{ vars .AWS_REGION }}
4039
41- - name : Install kubectl and AWS CLI
40+ - name : Install AWS CLI & kubectl
4241 run : |
4342 curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
4443 chmod +x ./kubectl
4544 sudo mv ./kubectl /usr/local/bin/kubectl
46- pip install awscli --upgrade
45+ pip install --upgrade awscli
4746 aws --version
4847
4948 - name : Log in to AWS ECR
5049 run : |
51- aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.IMAGE_REGISTRY }}
50+ aws ecr get-login-password --region ${{ vars.AWS_REGION }} | docker login --username AWS --password-stdin ${{ vars.IMAGE_REGISTRY }}
51+
52+ - name : Update kubeconfig for EKS
53+ run : |
54+ aws eks update-kubeconfig --name eks-code2cloud-test --region ${{ vars.AWS_REGION }}
5255
5356 - name : Build Docker image
5457 run : |
5558 LATEST_SHA=$(git rev-parse HEAD)
56- echo "LATEST_SHA: $LATEST_SHA"
57- if [[ -z "$LATEST_SHA" ]]; then
58- echo "Error: LATEST_SHA is empty, aborting."
59- exit 1
60- fi
61- docker build -t ${{ secrets.IMAGE_REGISTRY }}:$LATEST_SHA .
62- docker tag ${{ secrets.IMAGE_REGISTRY }}:$LATEST_SHA ${{ secrets.IMAGE_REGISTRY }}:latest
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
6362
6463 - name : Push Docker image to AWS ECR
6564 run : |
66- echo "Pushing image to AWS ECR..."
67- docker push ${{ secrets.IMAGE_REGISTRY }}:$LATEST_SHA
68- docker push ${{ secrets.IMAGE_REGISTRY }}:latest
69-
70- deploy-to-eks :
71- runs-on : ubuntu-latest
72- needs : build-and-push-image
73- steps :
74- - name : Checkout code
75- uses : actions/checkout@v2
76-
77- - name : Set up AWS Credentials for EKS deployment
78- run : |
79- echo "${{ secrets.AWS_ACCESS_KEY_ID }}" > aws_access_key_id
80- echo "${{ secrets.AWS_SECRET_ACCESS_KEY }}" > aws_secret_access_key
81- aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
82- aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
83- aws configure set region ${{ secrets.AWS_REGION }}
84-
85- - name : Update kubeconfig for EKS
86- run : |
87- aws eks update-kubeconfig --name ${{ secrets.EKS_CLUSTER_NAME }} --region ${{ secrets.AWS_REGION }}
88-
89- - name : Check if the deployment exists
90- id : deployment
91- run : |
92- DEPLOYMENT_EXISTS=$(kubectl get deployment ${{ secrets.DEPLOYMENT_NAME }} -n default --ignore-not-found)
93- echo "Deployment exists: $DEPLOYMENT_EXISTS"
94- echo "::set-output name=exists::$DEPLOYMENT_EXISTS"
65+ docker push ${{ vars.IMAGE_REGISTRY }}:$LATEST_SHA
66+ docker push ${{ vars.IMAGE_REGISTRY }}:latest
9567
96- - name : Create or update deployment in EKS
68+ - name : Deploy to EKS
9769 run : |
98- if [[ " ${{ steps.deployment.outputs.exists }}" == "null" ]] ; then
99- echo "Deployment does not exist. Creating deployment ."
100- kubectl create deployment ${{ secrets .DEPLOYMENT_NAME }} --image=${{ secrets .IMAGE_REGISTRY }}:$LATEST_SHA -n default
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
10173 else
102- echo "Deployment exists. Updating deployment ."
103- kubectl set image deployment/${{ secrets .DEPLOYMENT_NAME }} ${{ secrets .DEPLOYMENT_NAME }}=${{ secrets .IMAGE_REGISTRY }}:$LATEST_SHA -n default
74+ echo "Deployment exists. Updating.. ."
75+ kubectl set image deployment/${{ vars .DEPLOYMENT_NAME }} ${{ vars .DEPLOYMENT_NAME }}=${{ vars .IMAGE_REGISTRY }}:$LATEST_SHA -n default
10476 fi
0 commit comments