Spring Boot App Failing to Start in Azure DevOps CD Pipeline – Need Insights!
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