Added CI/CD Pipeline #1
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: Build and Deploy to Docker Hub | |
on: | |
push: | |
branches: | |
- main | |
jobs: | |
build-and-push: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check Out Repo | |
uses: actions/checkout@v2 | |
- name: Determine Changed Directories | |
id: changes | |
uses: tj-actions/changed-files@v34 | |
with: | |
files: | | |
apps/**/* | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Build and Push Docker image | |
run: | | |
for dir in $(echo "${{ steps.changes.outputs.modified_files }}" | tr ',' '\n' | sed 's|^\([^/]*\)/\([^/]*\).*|\1/\2|' | sort | uniq); do | |
if [[ $dir == apps/* ]]; then | |
app_name=$(basename $dir) | |
echo "Building and pushing $app_name" | |
docker-compose build $app_name | |
docker-compose push $app_name | |
fi | |
done | |
- name: Deploy to EC2 | |
uses: appleboy/ssh-action@master | |
env: | |
DB_URL: ${{ secrets.DB_URL }} | |
with: | |
host: ${{ secrets.SSH_HOST }} | |
username: ${{ secrets.SSH_USERNAME }} | |
key: ${{ secrets.SSH_KEY }} | |
script: | | |
CHANGED_APPS=$(echo "${{ steps.changes.outputs.modified_files }}" | tr ',' '\n' | sed 's|^\([^/]*\)/\([^/]*\).*|\1/\2|' | sort | uniq | grep '^apps/' | xargs -n 1 basename) | |
cd /home/ubuntu/saas-apps | |
for app in $CHANGED_APPS; do | |
echo "Deploying $app" | |
cd /home/ubuntu/saas-apps && sudo docker-compose pull $app | |
cd /home/ubuntu/saas-apps && sudo docker-compose rm -f $app | |
cd /home/ubuntu/saas-apps && sudo docker-compose up -d $app | |
done |