Update main.yml #7
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI/CD Pipeline for DigitalOcean Droplet | |
on: | |
push: | |
branches: | |
- cicd | |
jobs: | |
redeploy: | |
runs-on: ubuntu-latest | |
steps: | |
# Step 1: Checkout the code | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
# Step 2: Set up SSH for DigitalOcean access | |
- name: Set up SSH | |
uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.SSH_KEY }} # Add your SSH private key in GitHub Secrets | |
# Step 3: Determine which servers had changes | |
- name: Check changes in files | |
id: check_files | |
run: | | |
CHATBOT_MAIN_CHANGED=false | |
CHATBOT_PROCESS_CHANGED=false | |
if git diff --name-only HEAD^ HEAD | grep -q 'chatbotmain/'; then | |
CHATBOT_MAIN_CHANGED=true | |
fi | |
if git diff --name-only HEAD^ HEAD | grep -q 'chatbotprocess/'; then | |
CHATBOT_PROCESS_CHANGED=true | |
fi | |
echo "::set-output name=main_changed::${CHATBOT_MAIN_CHANGED}" | |
echo "::set-output name=process_changed::${CHATBOT_PROCESS_CHANGED}" | |
# Step 4: Deploy to the affected servers (both chatbotmain and chatbotprocess if needed) | |
- name: Deploy to DigitalOcean | |
run: | | |
ssh -o StrictHostKeyChecking=no ubuntu@{secrets.SSH_HOST} << EOF | |
# Check if chatbotmain needs to be redeployed | |
if [ "${{ steps.check_files.outputs.main_changed }}" = "true" ]; then | |
CONTAINER_ID=\$(sudo docker ps -q --filter "name=chatbotmain") | |
if [ "\$CONTAINER_ID" ]; then | |
echo "Stopping and removing container chatbotmain..." | |
sudo docker stop \$CONTAINER_ID | |
sudo docker rm \$CONTAINER_ID | |
IMAGE_ID=\$(sudo docker images -q chatbotmain) | |
if [ "\$IMAGE_ID" ]; then | |
echo "Removing image chatbotmain..." | |
sudo docker rmi -f \$IMAGE_ID | |
fi | |
fi | |
echo "Rebuilding and running container chatbotmain..." | |
sudo docker build -t chatbotmain . | |
sudo docker run -d -p 8000:8000 chatbotmain | |
fi | |
# Check if chatbotprocess needs to be redeployed | |
if [ "${{ steps.check_files.outputs.process_changed }}" = "true" ]; then | |
CONTAINER_ID=\$(sudo docker ps -q --filter "name=chatbotprocess") | |
if [ "\$CONTAINER_ID" ]; then | |
echo "Stopping and removing container chatbotprocess..." | |
sudo docker stop \$CONTAINER_ID | |
sudo docker rm \$CONTAINER_ID | |
IMAGE_ID=\$(sudo docker images -q chatbotprocess) | |
if [ "\$IMAGE_ID" ]; then | |
echo "Removing image chatbotprocess..." | |
sudo docker rmi -f \$IMAGE_ID | |
fi | |
fi | |
echo "Rebuilding and running container chatbotprocess..." | |
sudo docker build -t chatbotprocess . | |
sudo docker run -d -p 9000:9000 chatbotprocess | |
fi | |
EOF |