diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..2313fa0 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,51 @@ +name: Deploy Workflow +on: + push: + branches: + - main +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 + uses: actions/checkout@v4 + - name: JDK + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + - name: Generate Build Number + run: | + BUILD_NUMBER=$(date +'%d%m%Y%H%M%S') + echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV + echo "Generated Build Number: $BUILD_NUMBER" + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + - name: Maven Clean Verify + run: mvn -B -ntp clean verify jib:build -Ddocker.image.tag=$BUILD_NUMBER + - name: Setup SSH Agent + uses: webfactory/ssh-agent@v0.9.0 + 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