Skip to content

Deploy Workflow

Deploy Workflow #49

Workflow file for this run

name: Deploy Workflow
on:
push:
branches:
- main
workflow_dispatch:
inputs:
build_number:
description: "The build number to deploy (optional)"
required: false
type: string
jobs:
build-and-deploy:
runs-on: ubuntu-latest
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_IMAGE_NAME: product-service
DOCKER_COMPOSE_APP_SERVICE_NAME: product-service
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
EC2_SSH_PRIVATE_KEY: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
EC2_PUBLIC_IP_ADDRESS: ${{ secrets.EC2_PUBLIC_IP_ADDRESS }}
steps:
- name: Checkout
if: ${{ github.event.inputs.build_number == '' }}
uses: actions/checkout@v4
- name: JDK
if: ${{ github.event.inputs.build_number == '' }}
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Generate Build Number
run: |
if [ -n "${{ github.event.inputs.build_number }}" ]; then
BUILD_NUMBER=${{ github.event.inputs.build_number }}
echo "using provided build number: $BUILD_NUMBER"
else
BUILD_NUMBER=$(date +'%d%m%Y%H%M%S')
echo "using generated build number: $BUILD_NUMBER"
fi
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKER_PASSWORD }}
- name: Check if provided docker image exists
if: ${{ github.event.inputs.build_number != '' }}
run: |
IMAGE_NAME="${{ env.DOCKER_USERNAME }}/${{ env.DOCKER_IMAGE_NAME }}:$BUILD_NUMBER"
echo "checking if $IMAGE_NAME exists"
if ! docker manifest inspect "$IMAGE_NAME" > /dev/null 2>&1; then
echo "provided image $IMAGE_NAME does not exits. exiting..."
exit 1
fi
echo "provided image $IMAGE_NAME exits ✅"
- name: Maven Clean Verify
if: ${{ github.event.inputs.build_number == '' }}
run: mvn -B -ntp clean verify jib:build -Ddocker.image.tag=$BUILD_NUMBER
- name: Setup SSH Agent
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ env.EC2_SSH_PRIVATE_KEY }}
- name: SSH To EC2 and Deploy
run: |
ssh -o StrictHostKeyChecking=no ec2-user@$EC2_PUBLIC_IP_ADDRESS << EOF
cd ~
sed -i 's|image: '"$DOCKER_USERNAME"'/'"$DOCKER_IMAGE_NAME"':.*$|image: '"$DOCKER_USERNAME"'/'"$DOCKER_IMAGE_NAME"':'"$BUILD_NUMBER"'|' docker-compose.yml
docker-compose pull
docker-compose up -d '$DOCKER_COMPOSE_APP_SERVICE_NAME'
docker image prune -f
docker ps
echo "$BUILD_NUMBER" > build-number.txt
EOF