fix(deploy): clean up unused docker images to prevent space overflow #43
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 Docker Image | |
on: | |
push: | |
branches: | |
- master | |
jobs: | |
build-and-push: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Log in to Docker Registry | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
registry: ${{ secrets.DOCKER_REGISTRY }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and push app Docker image | |
uses: docker/build-push-action@v5 | |
with: | |
context: . | |
file: ./Dockerfile | |
push: true | |
tags: ${{ secrets.DOCKER_REGISTRY }}/rus2m/achievements-bot-app:latest | |
- name: Build and push cron Docker image | |
uses: docker/build-push-action@v5 | |
with: | |
context: . | |
file: ./cron.Dockerfile | |
push: true | |
tags: ${{ secrets.DOCKER_REGISTRY }}/rus2m/achievements-bot-cron:latest | |
deploy: | |
runs-on: ubuntu-latest | |
needs: build-and-push | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Set up SSH | |
uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Add SSH key to known hosts | |
run: | | |
ssh-keyscan -H ${{ secrets.SSH_EXTERNAL_IP }} >> ~/.ssh/known_hosts | |
- name: Create devo.conf | |
run: | | |
echo 'POSTGRES_HOST=${{ secrets.POSTGRES_HOST }}' > devo.conf | |
echo 'POSTGRES_DB=${{ secrets.POSTGRES_DB }}' >> devo.conf | |
echo 'POSTGRES_USER=${{ secrets.POSTGRES_USER }}' >> devo.conf | |
echo 'POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}' >> devo.conf | |
echo 'S3_ENDPOINT=${{ secrets.S3_ENDPOINT }}' >> devo.conf | |
echo 'MINIO_ROOT_USER=${{ secrets.MINIO_ROOT_USER }}' >> devo.conf | |
echo 'MINIO_ROOT_PASSWORD=${{ secrets.MINIO_ROOT_PASSWORD }}' >> devo.conf | |
echo 'TELEGRAM_BOT_TOKEN=${{ secrets.TELEGRAM_BOT_TOKEN }}' >> devo.conf | |
echo 'TELEGRAM_BOT_NAME=${{ secrets.TELEGRAM_BOT_NAME }}' >> devo.conf | |
echo 'DEEPAI_API_TOKEN=${{ secrets.DEEPAI_API_TOKEN }}' >> devo.conf | |
echo 'GOOGLE_TRANSLATE_API=${{ secrets.GOOGLE_TRANSLATE_API }}' >> devo.conf | |
- name: Copy configuration files to server | |
run: | | |
scp devo.conf ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_EXTERNAL_IP }}:devo.conf | |
scp docker-compose.yml ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_EXTERNAL_IP }}:docker-compose.yml | |
- name: Replace Running Docker Container | |
run: | | |
ssh ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_EXTERNAL_IP }} " | |
sudo docker image prune -af && | |
sudo docker container prune -f && | |
sudo docker pull rus2m/achievements-bot-app:latest && | |
sudo docker pull rus2m/achievements-bot-cron:latest && | |
if [ \$(sudo docker ps -a -q -f name=app) ]; then | |
sudo docker stop app | |
sudo docker rm app | |
sleep 10 | |
fi && | |
if [ ! \$(docker ps -q -f name=postgres) ]; then | |
echo "Initializing postgres instance" | |
sudo docker-compose -f docker-compose.yml up -d postgres | |
sleep 1 | |
fi && | |
if [ ! \$(docker ps -q -f name=s3) ]; then | |
echo "Initializing minio instance" | |
sudo docker-compose -f docker-compose.yml up -d s3 | |
sleep 1 | |
fi && | |
if [ \$(sudo docker ps -a -q -f name=cron) ]; then | |
sudo docker stop cron | |
sudo docker rm cron | |
sleep 10 | |
fi && | |
echo "Initializing app instance" && | |
network_name=\$(sudo docker container inspect \$(sudo docker ps -aqf 'name=postgres') -f '{{json .NetworkSettings.Networks }}' | jq -r 'keys[0]') && | |
sudo docker run -d --name app --env-file devo.conf --network \$network_name rus2m/achievements-bot-app:latest && | |
sleep 10 && | |
echo 'Initializing cron instance' && | |
sudo docker run -d --name cron --env-file devo.conf --network \$network_name rus2m/achievements-bot-cron:latest && | |
sleep 10 && | |
echo "Removing compromising artifacts" && | |
rm devo.conf" |