1. 准备工作
sudo yum install java-11-openjdk-devel
,Ubuntu上执行sudo apt install openjdk-11-jdk
;安装后通过java -version
验证,需显示Java版本信息。wget https://get.jenkins.io/war-stable/2.426.3/jenkins.war
),或通过包管理器安装(CentOS用sudo yum install jenkins
,Ubuntu用sudo apt install jenkins
)。2. 安装与启动Jenkins
/opt
),执行nohup java -jar /opt/jenkins.war --httpPort=8080 > /var/log/jenkins.log 2>&1 &
后台启动;如需修改端口,调整--httpPort
参数(如--httpPort=9090
)。sudo systemctl start jenkins
启动,sudo systemctl enable jenkins
设置开机自启。http://<服务器IP>:8080
,需输入初始密码(路径:cat /var/lib/jenkins/secrets/initialAdminPassword
);输入后跳过插件安装(若已离线准备插件)。3. 配置Jenkins
/usr/local/jdk-11.0.20
);/usr/bin/git
);settings.xml
路径(如/usr/share/maven
)。4. 创建Pipeline Job
my-app-deploy
),选择“Pipeline”,点击“OK”。https://github.com/your-repo/my-app.git
);*/main
);Jenkinsfile
,需存放在代码仓库根目录)。5. 编写Pipeline脚本
以下是一个完整的Java应用部署Pipeline示例(Jenkinsfile
):
pipeline {
agent any
environment {
// 定义环境变量
MAVEN_HOME = tool 'maven' // 引用Global Tool Configuration中的Maven
PATH = "${MAVEN_HOME}/bin:${PATH}"
DOCKER_IMAGE = "your-dockerhub-id/my-app:${env.BUILD_NUMBER}"
}
stages {
stage('Checkout') {
steps {
git branch: '*/main', url: 'https://github.com/your-repo/my-app.git' // 拉取代码
}
}
stage('Build') {
steps {
sh 'mvn clean package' // Maven编译打包
}
}
stage('Unit Test') {
steps {
sh 'mvn test' // 运行单元测试
}
post {
always {
junit 'target/surefire-reports/*.xml' // 发布测试报告
}
}
}
stage('Deploy to Tomcat') {
steps {
script {
// 停止Tomcat旧版本应用
sshagent(['tomcat-ssh-credentials']) { // 使用SSH凭据
sh 'ssh user@tomcat-server "systemctl stop tomcat"'
sh 'ssh user@tomcat-server "rm -rf /opt/tomcat/webapps/my-app*"'
// 复制新WAR包到Tomcat
sh 'scp target/my-app.war user@tomcat-server:/opt/tomcat/webapps/'
// 启动Tomcat
sh 'ssh user@tomcat-server "systemctl start tomcat"'
}
}
}
}
stage('Deploy to Docker') {
steps {
script {
// 登录Docker Hub
docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') {
// 构建Docker镜像
def customImage = docker.build(DOCKER_IMAGE)
// 推送镜像到仓库
customImage.push()
// 可选:拉取镜像到目标服务器并运行
sshagent(['docker-ssh-credentials']) {
sh 'ssh user@app-server "docker pull ${DOCKER_IMAGE}"'
sh 'ssh user@app-server "docker stop my-app || true"'
sh 'ssh user@app-server "docker rm my-app || true"'
sh 'ssh user@app-server "docker run -d --name my-app -p 8080:8080 ${DOCKER_IMAGE}"'
}
}
}
}
}
}
post {
always {
echo 'Deployment completed, check logs for details.'
}
failure {
mail to: 'dev-team@example.com', subject: "Jenkins Deployment Failed: ${currentBuild.fullDisplayName}", body: "Check console output at ${env.BUILD_URL}"
}
}
}
说明:
6. 触发构建与监控
H/5 * * * *
表示每5分钟构建一次);或勾选“Poll SCM”,设置SCM轮询时间(如H/5 * * * *
表示每5分钟检查代码变更)。systemctl status tomcat
或docker ps
。7. 常见问题排查
java -version
输出正确版本,若未安装或版本过低,重新安装JDK;netstat -tulnp | grep 8080
查看端口占用,修改Jenkins端口(如--httpPort=9090
);/var/lib/jenkins
)有读写权限(chown -R jenkins:jenkins /var/lib/jenkins
)。systemctl stop tomcat
或docker stop
命令,避免端口冲突;target/my-app.war
路径存在,或修改为实际打包路径。