From f404b30d444e9318aa8bafa1c8d9400a463c7539 Mon Sep 17 00:00:00 2001 From: Aiman Zafar Date: Wed, 14 Aug 2024 00:06:41 +0500 Subject: [PATCH] file is updated --- .github/workflows/maven-build.yml | 141 ++++++++++++++++++++++++------ 1 file changed, 115 insertions(+), 26 deletions(-) diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml index 4718a6ce5..3972a9e8f 100644 --- a/.github/workflows/maven-build.yml +++ b/.github/workflows/maven-build.yml @@ -1,29 +1,118 @@ -# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven - -name: Java CI with Maven - -on: +name: CI/CD Pipelineson: push: - branches: [ main ] + branches: + - main pull_request: - branches: [ main ] - -jobs: - build: - - runs-on: ubuntu-latest - strategy: - matrix: - java: [ '17' ] - + branches: + - mainjobs: + setup: + runs-on: self-hosted steps: - - uses: actions/checkout@v4 - - name: Set up JDK ${{matrix.java}} - uses: actions/setup-java@v4 - with: - java-version: ${{matrix.java}} - distribution: 'adopt' - cache: maven - - name: Build with Maven Wrapper - run: ./mvnw -B package + - name: Check for Git + run: | + if ! command -v git &> /dev/null + then + echo "Git not found, installing..." + sudo apt-get update + sudo apt-get install -y git + else + echo "Git is already installed." + fi + - name: Check for Docker + run: | + if ! command -v docker &> /dev/null + then + echo "Docker not found, installing..." + sudo apt-get update + sudo apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg-agent \ + software-properties-common && \ + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \ + sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \ + sudo apt-get update && \ + sudo apt-get install -y docker-ce docker-ce-cli containerd.io + else + echo "Docker is already installed." + fi + - name: Check for Docker Compose + run: | + if ! command -v docker-compose &> /dev/null + then + echo "Docker Compose not found, installing..." + sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + sudo chmod +x /usr/local/bin/docker-compose + else + echo "Docker Compose is already installed." + fi + - name: Check for Maven + run: | + if ! command -v mvn &> /dev/null + then + echo "Maven not found, installing..." + sudo apt-get update + sudo apt-get install -y maven + else + echo "Maven is already installed." + fi + - name: Validate Installation + run: | + echo "Validating installation..." + command -v git + command -v docker + command -v docker-compose + command -v mvn build: + runs-on: self-hosted + needs: setup + steps: + - name: Checkout code + uses: actions/checkout@v3 - name: Build with Maven + run: ./mvnw -B package test: + runs-on: self-hosted + needs: build + steps: + - name: Checkout code + uses: actions/checkout@v3 - name: Run tests + run: ./mvnw test deploy: + runs-on: self-hosted + needs: test + steps: + - name: Checkout code + uses: actions/checkout@v3 - name: Verify JAR file + run: | + echo "Verifying JAR file presence..." + ls -al /home/aiman/GITHUB/spring-petclinic/target/ + if [ -z "$(find /home/aiman/GITHUB/spring-petclinic/target/ -name 'spring-petclinic-3.3.0-SNAPSHOT.jar')" ]; then + echo "JAR file not found in target directory!" + exit 1 + fi - name: Setup SSH + run: | + echo "Setting up SSH..." + mkdir -p ~/.ssh + chmod 700 ~/.ssh + echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H $DEPLOY_SERVER >> ~/.ssh/known_hosts || true - name: Deploy application + env: + DEPLOY_SERVER: '103.151.111.242' + DEPLOY_PORT: '8080' + DEPLOY_USER: 'aiman' + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + run: | + echo "Deploying application to $DEPLOY_SERVER" + scp -i ~/.ssh/id_rsa /home/aiman/GITHUB/spring-petclinic/target/spring-petclinic-3.3.0-SNAPSHOT.jar $DEPLOY_USER@$DEPLOY_SERVER:/home/waqas/spring-petclinic/ + ssh -i ~/.ssh/id_rsa $DEPLOY_USER@$DEPLOY_SERVER "nohup java -jar /home/waqas/spring-petclinic/spring-petclinic-3.3.0-SNAPSHOT.jar > /dev/null 2>&1 &" + rm -f ~/.ssh/id_rsa - name: Wait for application to start + run: | + echo "Waiting for application to start..." + for i in {1..30}; do + if curl -s http://103.151.111.242:8080 > /dev/null; then + echo "Application is up!" + break + else + echo "Application is not up yet, retrying in 10 seconds..." + sleep 10 + fi + done \ No newline at end of file