Refactor pipeline script

This commit is contained in:
Murtadha 2024-07-27 20:55:55 -04:00
parent 48f64cc611
commit 5b6e81aa9d

View file

@ -1,103 +1,130 @@
steps: steps:
- name: build build:
image: node:22 when:
commands: - branch: master
- npm ci event: push
- npm run build image: node:22
- echo "VERSION=$(cat version.txt)" > .env commands:
- npm ci
- npm run build
- echo "VERSION=$(cat version.txt)" > .env
- name: clear-from-host clear-from-host:
image: appleboy/drone-ssh when:
settings: - branch: master
host: event: push
from_secret: ssh_host image: appleboy/drone-ssh
username: settings:
from_secret: ssh_username host:
key: from_secret: ssh_host
from_secret: ssh_key username:
port: 2332 from_secret: ssh_username
script: key:
- rm -rf /home/mnisyif/docker-containers/mnisyif/frontend/* from_secret: ssh_key
- echo "Target directory cleared" port: 2332
script:
- rm -rf /home/mnisyif/docker-containers/mnisyif/frontend/*
- echo "Target directory cleared"
- name: copy-to-host copy-to-host:
image: appleboy/drone-scp when:
settings: - branch: master
host: event: push
from_secret: ssh_host image: appleboy/drone-scp
username: settings:
from_secret: ssh_username host:
key: from_secret: ssh_host
from_secret: ssh_key username:
port: 2332 from_secret: ssh_username
target: /home/mnisyif/docker-containers/mnisyif/frontend key:
source: from_secret: ssh_key
- dist/ port: 2332
- nginx.conf target: /home/mnisyif/docker-containers/mnisyif/frontend
- version.txt source:
- dist/
- nginx.conf
- version.txt
- name: webserver-deploy webserver-deploy:
image: appleboy/drone-ssh when:
settings: - branch: master
host: event: push
from_secret: ssh_host image: appleboy/drone-ssh
username: settings:
from_secret: ssh_username host:
key: from_secret: ssh_host
from_secret: ssh_key username:
port: 2332 from_secret: ssh_username
script: key:
- cd /home/mnisyif/docker-containers/mnisyif/frontend from_secret: ssh_key
- VERSION=$(cat version.txt) port: 2332
- docker stop frontend-$VERSION || true script:
- docker rm frontend-$VERSION || true - cd /home/mnisyif/docker-containers/mnisyif/frontend
- > - VERSION=$(cat version.txt)
docker run -d --name frontend-$VERSION -p 5173:80 - echo "Nginx configuration:"
-v $PWD/dist:/usr/share/nginx/html:ro - cat nginx.conf
-v $PWD/nginx.conf:/etc/nginx/nginx.conf:ro - echo "Contents of dist directory:"
nginx:alpine - ls -la dist
- echo "Deployment completed" # Stop and remove the existing container if it exists
- docker stop frontend || true
- docker rm frontend || true
# Run the new container with the current version, mounting the files
- >
docker run -d --name frontend -p 5173:80
-v /home/mnisyif/docker-containers/mnisyif/frontend/dist:/usr/share/nginx/html:ro
-v /home/mnisyif/docker-containers/mnisyif/frontend/nginx.conf:/etc/nginx/nginx.conf:ro
nginx:alpine
# Tag the running container with the version
- docker tag nginx:alpine frontend:$VERSION
- echo "Deployment completed"
confirm-deployment:
when:
- branch: master
event: push
image: appleboy/drone-ssh
settings:
host:
from_secret: ssh_host
username:
from_secret: ssh_username
key:
from_secret: ssh_key
port: 2332
script:
- echo "Verifying deployment..."
# Verify the container is running
- docker ps | grep frontend || { echo "Container failed to start"; exit 1; }
# Display container logs and test nginx configuration
- docker logs frontend
- docker exec frontend nginx -t
- docker exec frontend ps aux | grep nginx
- name: confirm-deployment # Check contents of /usr/share/nginx/html in the container
image: appleboy/drone-ssh - docker exec frontend ls -la /usr/share/nginx/html
settings: # Perform a simple HTTP request to check if the server is responding
host: - curl -I http://localhost:5173 || { echo "HTTP request failed"; exit 1; }
from_secret: ssh_host - echo "Deployment confirmed successfully"
username: cleanup:
from_secret: ssh_username when:
key: - branch: master
from_secret: ssh_key event: push
port: 2332 image: appleboy/drone-ssh
script: settings:
- VERSION=$(cat /home/mnisyif/docker-containers/mnisyif/frontend/version.txt) host:
- docker ps | grep frontend-$VERSION || { echo "Container failed to start"; exit 1; } from_secret: ssh_host
- docker logs frontend-$VERSION username:
- docker exec frontend-$VERSION nginx -t from_secret: ssh_username
- docker exec frontend-$VERSION ls -la /usr/share/nginx/html key:
- curl -I http://localhost:5173 || { echo "HTTP request failed"; exit 1; } from_secret: ssh_key
- echo "Deployment confirmed successfully" port: 2332
script:
- name: cleanup - echo "Performing cleanup..."
image: appleboy/drone-ssh # Clean up unused containers, images, and volumes
settings: - docker system prune -f --volumes
host: # Remove older versions of the Docker image
from_secret: ssh_host - >
username: for img in $(docker images frontend --format "{{.Tag}}" | grep -v $(cat /home/mnisyif/docker-containers/mnisyif/frontend/version.txt)); do
from_secret: ssh_username docker rmi frontend:$img || true;
key: done
from_secret: ssh_key - echo "Cleanup completed"
port: 2332
script:
- echo "Performing cleanup..."
- docker system prune -f --volumes
- >
for img in $(docker images frontend --format "{{.Tag}}" | grep -v $(cat /home/mnisyif/docker-containers/mnisyif/frontend/version.txt)); do
docker rmi frontend:$img || true;
done
- echo "Cleanup completed"
trigger:
branch:
- master
event:
- push