在 Debian 上为 JSP 应用搭建持续集成
一 架构与工具选型
二 在 Debian 上部署 Jenkins
sudo apt update && sudo apt install -y openjdk-11-jdkjava -versioncurl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/nullecho deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/nullsudo apt update && sudo apt install -y jenkinssudo systemctl start jenkins && sudo systemctl enable jenkinshttp://<服务器IP>:8080sudo cat /var/lib/jenkins/secrets/initialAdminPassword三 创建 Jenkins 任务与 Webhook 触发
H/5 * * * * 每 5 分钟检查一次)。clean package。http://<Jenkins服务器IP>:8080/github-webhook/application/json;事件:Just the push event。四 示例 Jenkinsfile 与 Tomcat 部署
mvn clean packagemvn test(测试报告位于 target/surefire-reports/*.xml)pom.xml 配置插件与 <url>/manager/text</url>、<server> 凭据)target/your-app.war)。conf/tomcat-users.xml 配置角色如 manager-script,并在 Jenkins 凭据中保存用户名/密码或密钥。http://<tomcat-host>:8080/<app-context> 访问应用。pipeline {
agent any
tools {
maven 'Maven-3' // 在 Global Tool Configuration 中定义的 Maven 名称
jdk 'OpenJDK-11' // 在 Global Tool Configuration 中定义的 JDK 名称
}
stages {
stage('Checkout') {
steps {
git url: 'https://github.com/your-org/your-jsp-app.git', branch: 'main'
}
}
stage('Build') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
stage('Deploy to Tomcat') {
steps {
script {
def war = findFiles(glob: 'target/*.war')[0].path
// 方式A:使用 curl 调用 Manager API(示例,请替换为你的实际地址/凭据)
sh """
curl --upload-file '${war}' \
--user 'tomcat:tomcat' \
'http://tomcat.example.com:8080/manager/text/deploy?path=/your-app&update=true'
"""
// 方式B(可选):使用 Tomcat Maven Plugin
// sh 'mvn tomcat7:deploy -DskipTests'
}
}
}
}
post {
success {
echo 'Build and deploy succeeded.'
}
failure {
echo 'Build or deploy failed.'
}
}
}
conf/tomcat-users.xml 片段,仅用于演示,生产请更严格):
<role rolename="manager-script"/><user username="tomcat" password="tomcat" roles="manager-script"/>五 最佳实践与扩展