name: CI/CD Pipeline on: push: branches: - ci-cd env: IMAGE_NAME: people.webapp ACR_NAME: people ACR_LOGIN_SERVER: people.azurecr.io RG_NAME: rg-aks-people CLUSTER_NAME: aks-people AKS_POOL_NODE_NAME: aks-people-agentpool jobs: build-and-push-docker-image: runs-on: ubuntu-latest outputs: fq_image_name: ${{steps.build-image.outputs.FQ_IMAGE_NAME}} steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Login to Azure Container Registry run: az acr login -n $ACR_NAME - name: Count existing tags and configure the image tag run: | COUNT=$(az acr repository show-tags -n $ACR_NAME --repository $IMAGE_NAME -o tsv | wc -l) IMAGE_TAG=v$(expr $COUNT + 1) echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV - name: Build and push Docker image id: build-image run: | FQ_IMAGE_NAME=$ACR_LOGIN_SERVER/$IMAGE_NAME:$IMAGE_TAG echo "FQ_IMAGE_NAME=$FQ_IMAGE_NAME" >> $GITHUB_ENV echo "FQ_IMAGE_NAME=$FQ_IMAGE_NAME" >> $GITHUB_OUTPUT docker build -t $FQ_IMAGE_NAME . docker push $FQ_IMAGE_NAME - name: Logout from Azure Container Registry run: docker logout $ACR_LOGIN_SERVER - name: Cleanup Docker images run: docker image rm $FQ_IMAGE_NAME deploy-to-aks: runs-on: ubuntu-latest needs: build-and-push-docker-image steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Azure uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Configure Kubernetes context run: az aks get-credentials -g $RG_NAME -n $CLUSTER_NAME - name: Configure Kubernetes Manifest env: FQ_IMAGE_NAME: ${{ needs.build-and-push-docker-image.outputs.fq_image_name }} run: | MANAGED_CLIENT_ID=$(az identity list --query "[?contains(name, '$AKS_POOL_NODE_NAME')].clientId" -o tsv) sed -i "s||$FQ_IMAGE_NAME|g" ./aks/deployment.yml sed -i "s||$MANAGED_CLIENT_ID|g" ./aks/deployment.yml cat ./aks/deployment.yml - name: Update Deployment run: kubectl apply -f ./aks/deployment.yml