Jenkins pipeline example
pipeline {
agent any
environment {
FRONTEND_SRC = 'frontend/dist/*'
FRONTEND_DEST = '/var/www/myapp-front'
BACKEND_SRC = 'backend/target/app.jar'
BACKEND_DEST = '/opt/myapp/backend'
}
parameters {
string(name: 'FRONTEND_BRANCH', defaultValue: 'main', description: 'Select Frontend branch to deploy')
string(name: 'BACKEND_BRANCH', defaultValue: 'main', description: 'Select Backend branch to deploy')
choice(name: 'TARGET_MACHINE', choices: ['root@192.168.0.101','root@192.168.0.102','root@192.168.0.103'], description: 'Select target machine to deploy')
}
stages {
stage('Checkout Frontend') {
steps {
dir('frontend') {
git branch: params.FRONTEND_BRANCH, url: 'git@your-repo-frontend.git'
}
}
}
stage('Build Frontend') {
steps {
dir('frontend') {
sh 'npm install'
sh 'npm run build'
}
}
}
stage('Checkout Backend') {
steps {
dir('backend') {
git branch: params.BACKEND_BRANCH, url: 'git@your-repo-backend.git'
}
}
}
stage('Build Backend') {
steps {
dir('backend') {
sh './mvnw clean package -DskipTests'
}
}
}
stage('Deploy') {
steps {
script {
def targetHost = params.TARGET_MACHINE
sshagent(['ssh-credentials-id']) {
sh "scp -r ${env.FRONTEND_SRC} ${targetHost}:${env.FRONTEND_DEST}"
sh "scp ${env.BACKEND_SRC} ${targetHost}:${env.BACKEND_DEST}"
sh "ssh ${targetHost} 'systemctl restart myapp-backend.service'"
}
}
}
}
stage('Smoke Test') {
steps {
script {
try {
sh './scripts/smoke_test.sh'
} catch (e) {
currentBuild.result = 'FAILURE'
error('Smoke test failed!')
}
}
}
}
}
post {
success {
mail to: 'qa-team@example.com',
subject: "Smoke Test Passed - ${env.JOB_NAME} #${env.BUILD_NUMBER}",
body: """Frontend branch: ${params.FRONTEND_BRANCH}
Backend branch: ${params.BACKEND_BRANCH}
Deployed to: ${params.TARGET_MACHINE}
Smoke test passed successfully."""
}
failure {
mail to: 'dev-team@example.com',
subject: "Smoke Test Failed - ${env.JOB_NAME} #${env.BUILD_NUMBER}",
body: """Please check Jenkins logs.
Frontend branch: ${params.FRONTEND_BRANCH}
Backend branch: ${params.BACKEND_BRANCH}
Target machine: ${params.TARGET_MACHINE}"""
}
}
}
Comments
Post a Comment