146 lines
5.1 KiB
Plaintext
146 lines
5.1 KiB
Plaintext
pipeline {
|
|
agent any
|
|
tools {
|
|
jdk 'jdk21'
|
|
}
|
|
environment {
|
|
BRANCH = 'develop'
|
|
GIT_REPO = 'https://kamco.gitea.gs.dabeeo.com/dabeeo/kamco-dabeeo-training-api.git'
|
|
DEPLOY_SERVER = '192.168.2.109'
|
|
DEPLOY_USER = 'space'
|
|
DEPLOY_PATH = '/home/space//kamco-training-api'
|
|
SSH_CREDENTIALS_ID = 'jenkins-251215'
|
|
}
|
|
|
|
|
|
stages {
|
|
stage('Checkout') {
|
|
steps {
|
|
checkout([
|
|
$class: 'GitSCM',
|
|
branches: [[name: "${env.BRANCH}"]],
|
|
userRemoteConfigs: [[
|
|
url: "${env.GIT_REPO}",
|
|
credentialsId: 'jenkins-dev-token'
|
|
]]
|
|
])
|
|
}
|
|
}
|
|
stage('Get Commit Hash') {
|
|
steps {
|
|
script {
|
|
env.COMMIT_HASH = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
|
|
echo "Current commit hash: ${env.COMMIT_HASH}"
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Build') {
|
|
steps {
|
|
sh "./gradlew clean build -x test"
|
|
}
|
|
}
|
|
|
|
stage('Transfer Project Files') {
|
|
steps {
|
|
script {
|
|
echo "Transferring project files to ${env.DEPLOY_SERVER}..."
|
|
|
|
sshagent(credentials: ["${env.SSH_CREDENTIALS_ID}"]) {
|
|
sh """
|
|
# Create deployment directory structure on remote server
|
|
ssh -o StrictHostKeyChecking=no ${env.DEPLOY_USER}@${env.DEPLOY_SERVER} \
|
|
"mkdir -p ${env.DEPLOY_PATH}/build/libs"
|
|
|
|
# Transfer build artifacts with directory structure
|
|
scp -o StrictHostKeyChecking=no \
|
|
build/libs/ROOT.jar \
|
|
${env.DEPLOY_USER}@${env.DEPLOY_SERVER}:${env.DEPLOY_PATH}/build/libs/
|
|
|
|
# Transfer Docker files
|
|
scp -o StrictHostKeyChecking=no \
|
|
Dockerfile-dev \
|
|
${env.DEPLOY_USER}@${env.DEPLOY_SERVER}:${env.DEPLOY_PATH}/
|
|
|
|
scp -o StrictHostKeyChecking=no \
|
|
docker-compose-dev.yml \
|
|
${env.DEPLOY_USER}@${env.DEPLOY_SERVER}:${env.DEPLOY_PATH}/
|
|
|
|
echo "✅ Project files transferred successfully"
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Docker Compose Deploy') {
|
|
steps {
|
|
script {
|
|
echo "Deploying with Docker Compose on ${env.DEPLOY_SERVER}..."
|
|
|
|
sshagent(credentials: ["${env.SSH_CREDENTIALS_ID}"]) {
|
|
sh """
|
|
ssh -o StrictHostKeyChecking=no ${env.DEPLOY_USER}@${env.DEPLOY_SERVER} << 'EOF'
|
|
cd ${env.DEPLOY_PATH}
|
|
|
|
# Set IMAGE_TAG environment variable
|
|
export IMAGE_TAG=${env.COMMIT_HASH}
|
|
|
|
# Stop and remove existing containers
|
|
echo "Stopping existing containers..."
|
|
docker compose -f docker-compose-dev.yml down || true
|
|
|
|
# Build new Docker image
|
|
echo "Building Docker image with tag: \${IMAGE_TAG}..."
|
|
docker compose -f docker-compose-dev.yml build
|
|
|
|
# Tag as latest
|
|
docker tag kamco-cd-training-api:\${IMAGE_TAG} kamco-cd-training-api:latest
|
|
|
|
# Start containers
|
|
echo "Starting containers..."
|
|
docker compose -f docker-compose-dev.yml up -d
|
|
|
|
# Wait for application to be ready
|
|
echo "Waiting for application to be ready..."
|
|
for i in {1..30}; do
|
|
if curl -f http://localhost:7200/monitor/health > /dev/null 2>&1; then
|
|
echo "✅ Application is healthy!"
|
|
docker compose -f docker-compose-dev.yml ps
|
|
exit 0
|
|
fi
|
|
echo "⏳ Waiting for application... (\$i/30)"
|
|
sleep 2
|
|
done
|
|
|
|
echo "⚠️ Warning: Health check timeout"
|
|
docker compose -f docker-compose-dev.yml ps
|
|
docker compose -f docker-compose-dev.yml logs --tail=50
|
|
exit 1
|
|
EOF
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('Cleanup Old Images') {
|
|
steps {
|
|
script {
|
|
echo "Cleaning up old Docker images..."
|
|
|
|
sshagent(credentials: ["${env.SSH_CREDENTIALS_ID}"]) {
|
|
sh """
|
|
ssh -o StrictHostKeyChecking=no ${env.DEPLOY_USER}@${env.DEPLOY_SERVER} \
|
|
"docker images kamco-cd-training-api --format '{{.ID}} {{.Tag}}' | \
|
|
grep -v latest | tail -n +6 | awk '{print \\\$1}' | xargs -r docker rmi || true"
|
|
|
|
echo "✅ Cleanup completed"
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|