在 Ubuntu 上用 Jenkins 实现自动化部署
一 环境准备与安装
二 初始化与安全配置
三 创建流水线任务与触发器
四 示例 Jenkinsfile 与部署方式
pipeline {
agent any
environment {
DOCKER_REGISTRY = 'your-registry.example.com'
IMAGE = 'demo-app'
TAG = "${env.BUILD_ID}"
CONTAINER = 'myapp'
HOST_PORT = 8080
APP_PORT = 8080
}
stages {
stage('Checkout') {
steps { git url: 'git@github.com:org/demo-app.git', branch: 'main', credentialsId: 'github-ssh' }
}
stage('Build') {
steps { sh 'mvn -U -DskipTests clean package' }
}
stage('Docker Build & Run') {
steps {
sh """
docker stop ${CONTAINER} || true
docker rm ${CONTAINER} || true
docker build -t ${IMAGE}:${TAG} .
docker run -d --name ${CONTAINER} -p ${HOST_PORT}:${APP_PORT} ${IMAGE}:${TAG}
"""
}
}
}
}
pipeline {
agent any
environment {
JAR_NAME = 'app.jar'
WORKSPACE_PATH = "/opt/apps/${JOB_NAME}"
REMOTE_USER = 'deploy'
REMOTE_HOST = '192.0.2.10'
REMOTE_DIR = '/opt/apps/${JOB_NAME}'
}
stages {
stage('Checkout') {
steps { git url: 'git@github.com:org/app.git', branch: 'main', credentialsId: 'github-ssh' }
}
stage('Build') {
steps { sh 'mvn -U -DskipTests clean package' }
}
stage('Deploy via SSH') {
steps {
sh """
ssh ${REMOTE_USER}@${REMOTE_HOST} 'mkdir -p ${REMOTE_DIR}'
scp target/${JAR_NAME} ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/
ssh ${REMOTE_USER}@${REMOTE_HOST} '''
cd ${REMOTE_DIR}
pkill -f ${JAR_NAME} || true
nohup java -jar ${JAR_NAME} > app.log 2>&1 &
'''
"""
}
}
}
}
五 常见问题与优化