Spring Boot App Failing to Start in Azure DevOps CD Pipeline – Need Insights!

Pratul Kumar Patel 0 Reputation points
2025-02-02T16:51:11.4666667+00:00

Spring Boot App Failing to Start in Azure DevOps CD Pipeline – Need Insights!

Hey Tech Community!

I'm working on a CI/CD pipeline in Azure DevOps by using Jenkins as my build pipeline to deploy a Spring Boot application on an Azure LinuxVM. The Build Pipeline with Jenkins (using service hook) & deployment to Azure Linux VM was successful initially, but I faced an issue accessing the app via the browser.

Here's my BUILD Repository which I picked from Online:

https://github.com/prak233/springBoot233.git

After tweaking the script, the pipeline now fails at the application start up stage, throwing the error:

🔴 "Spring Boot application failed to start."

🔴 "JAR file not found!" (even though the file is present in /home/pratul/deploy/)

🛠 Debugging Steps Tried So Far:

✅ Verified Java is installed(openjdk version "17.0.13")

✅ Checked if the JAR file exists (ls -l confirms it's there)

✅ Tried manually startingthe app: java -jar spring-boot-initial-0.0.1-SNAPSHOT.jar

✅ Used netstat -tulnp | grep 8080 to check if the port is in use

✅ Killed existing processes on port 8080 before restart

getting this error even though correct path is given with correct permission as -rw in user level

📌 YAML Deployment Script (Relevant Snippet)


- task: AzureCLI@2

displayName: 'Install Java & Start Spring Boot Application'

inputs:

azureSubscription: 'Pay-As-You-Go'

scriptType: 'bash'

scriptLocation: 'inlineScript'

inlineScript: |

VM_IP='52.229.163.139'

USERNAME='pratul'

SSH_KEY_PATH='/azagent/revisit-linuxVM_key.pem'

ssh -i $SSH_KEY_PATH -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $USERNAME@$VM_IP << 'EOF'

set -ex

DEPLOY_DIR="/home/$USERNAME/deploy"

JAR_FILE="spring-boot-initial-0.0.1-SNAPSHOT.jar"

# Kill existing process on port 8080

sudo fuser -k 8080/tcp || true

# Start the application

nohup java -Xmx512m -Xms256m -jar \$DEPLOY_DIR/\$JAR_FILE > \$DEPLOY_DIR/app.log 2>&1 &

sleep 5

# Verify if the process is running

if pgrep -f "\$JAR_FILE"; then

echo "✅Spring Boot application started successfully!"

else

echo "❌ERROR: Spring Boot application failed to start."

echo "📄App Log:"

cat \$DEPLOY_DIR/app.log

exit 1

fi

EOF

Files present in “/home/pratul/deploy”

###Possible Causes?

  • File permission issues? (chmod +x didn't help)
  • Java process starting but failing silently?
  • Any missing dependencies?

Has anyone encountered this issue before? What could be causing the failure despite the JAR file being present?

Any insights or debugging tips would be greatly appreciated! 🚀

#AzureDevOps #SpringBoot #CI_CD #DevOps #Azure #Linux #TechHelp #CloudComputing


trigger:

- none

pool:

vmImage: windows-latest

stages:

- stage: BuildStage

displayName: BuildStage

jobs:

- job: CIJob

displayName: "Jenkins Build JOB"

steps:

- task: JenkinsQueueJob@2

displayName: "Queue Task"

inputs:

serverEndpoint: 'Jenkins-SRC'

jobName: 'revisit-CICD'

isMultibranchJob: true

multibranchPipelineBranch: 'feature/test'

captureConsole: true

capturePipeline: true

isParameterizedJob: false

- task: JenkinsDownloadArtifacts@2

displayName: "Download Artifact Task"

inputs:

jenkinsServerConnection: 'Jenkins-SRC'

jobName: 'revisit-CICD'

saveTo: '$(Build.StagingDirectory)'

jenkinsBuild: 'LastSuccessfulBuild'

- task: PublishBuildArtifacts@1

displayName: "Publish Artifact Task"

inputs:

PathtoPublish: '$(Build.StagingDirectory)'

ArtifactName: 'drop'

publishLocation: 'Container'

- stage: DeployStage

dependsOn: BuildStage

displayName: DeployStage

jobs:

- deployment: deploytoVM

displayName: 'deploytoVM'

environment:

name: 'MyEnv'

resourceType: VirtualMachine

tags: 'linux'

strategy:

runOnce:

deploy:

steps:

- task: DownloadPipelineArtifact@2

displayName: "Download Pipeline Build Artifact"

inputs:

artifactName: drop

targetPath: '$(pipeline.artifact)'

- task: AzureCLI@2

displayName: 'Copy Files to Linux VM'

inputs:

azureSubscription: 'Pay-As-You-Go(52ebb814-d1d8-427b-badb-92e9e2108392)'

scriptType: 'bash'

scriptLocation: 'inlineScript'

inlineScript: |

# Define variables

ARTIFACT_PATH="/azagent/_work/1/drop/initial/target/spring-boot-initial-0.0.1-SNAPSHOT.jar"

VM_IP='52.229.163.139'

USERNAME='pratul'

SSH_KEY_PATH='/azagent/revisit-linuxVM_key.pem'

ls -l $SSH_KEY_PATH

ls -l $ARTIFACT_PATH

mkdir -p /home/$USERNAME/deploy/

# chmod 664 /home/$USERNAME/deploy/

# Copy JAR file to the Linux VM

scp -i $SSH_KEY_PATH -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $ARTIFACT_PATH $USERNAME@$VM_IP:/home/$USERNAME/deploy/

- task: AzureCLI@2

displayName: 'Install Java & Start Spring Boot Application'

inputs:

azureSubscription: 'Pay-As-You-Go(52ebb814-d1d8-427b-badb-92e9e2108392)'

scriptType: 'bash'

scriptLocation: 'inlineScript'

inlineScript: |

VM_IP='52.229.163.139'

USERNAME='pratul'

SSH_KEY_PATH='/azagent/revisit-linuxVM_key.pem'

ssh -i _KEY_PATH -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $USERNAME@$VM_IP << 'EOF'

set -ex

DEPLOY_DIR="/home/$USERNAME/deploy"

JAR_FILE="spring-boot-initial-0.0.1-SNAPSHOT.jar"

# Kill any existing process on port 8080

sudo fuser -k 8080/tcp || true

# Start the application and log output

nohup java -Xmx512m -Xms256m -jar \$DEPLOY_DIR/\$JAR_FILE > \$DEPLOY_DIR/app.log 2>&1 &

sleep 5

# Check if the process started

if pgrep -f "\$JAR_FILE"; then

echo "✅ Spring Boot application started successfully!"

else

echo "❌ ERROR Spring Boot application failed to start."

echo "📄 App Log:"

cat \$DEPLOY_DIR/app.log

exit 1

fi

EOF

SCREENSHOTS FOR REFERENCE

Picture1

Picture2

Picture3

Picture4

Not Monitored
Not Monitored
Tag not monitored by Microsoft.
41,774 questions
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.