温馨提示×

Debian JSP应用如何进行持续集成

小樊
34
2025-12-12 18:53:21
栏目: 编程语言

在 Debian 上为 JSP 应用搭建持续集成

一 架构与工具选型

  • 版本控制与代码托管:使用 Git(GitHub/GitLab/自建 Git 服务器)。
  • 构建与依赖管理:使用 Maven(WAR 打包),配合 JDK 8/11/17(按项目要求)。
  • CI 引擎:使用 Jenkins(Debian 上易部署、插件丰富、支持 Pipeline 与 Webhook 自动触发)。
  • 应用容器:使用 Apache Tomcat(JSP/Servlet 运行环境)。
  • 触发方式:推荐 Webhook 实时触发;无公网时可用 Poll SCM 定时轮询。以上组合在 Linux/Debian 场景下成熟可靠,适合 JSP 项目的自动化构建与部署。

二 在 Debian 上部署 Jenkins

  • 安装 OpenJDK(示例选用 OpenJDK 11):
    • 命令:sudo apt update && sudo apt install -y openjdk-11-jdk
    • 验证:java -version
  • 安装 Jenkins(Debian 稳定源):
    • 导入密钥并添加源(新版推荐签名方式):
      • curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
      • echo 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/null
    • 安装与启动:
      • sudo apt update && sudo apt install -y jenkins
      • sudo systemctl start jenkins && sudo systemctl enable jenkins
  • 首次访问与初始化:
    • 访问:http://<服务器IP>:8080
    • 初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    • 完成安装向导并创建管理员账户。

三 创建 Jenkins 任务与 Webhook 触发

  • 安装常用插件:Git plugin、Maven Integration plugin、Pipeline(在 Manage Jenkins → Manage Plugins 中安装)。
  • 全局工具配置(Manage Jenkins → Global Tool Configuration):
    • 指定 JDK 安装路径(自动检测或手动设置)。
    • 指定 Maven 安装路径(自动安装或手动设置)。
  • 新建任务(两种常见方式):
    • Freestyle 项目:
      • 源码管理:选择 Git,填写仓库 URL 与凭据(HTTPS/SSH)。
      • 构建触发器:选择 GitHub hook trigger for GITScm polling(Webhook)或 Poll SCM(如 H/5 * * * * 每 5 分钟检查一次)。
      • 构建步骤:选择 Invoke top-level Maven targets,命令如 clean package
      • 构建后操作:可勾选 Archive the artifacts(归档 WAR)、Publish JUnit test result report(发布测试报告)。
    • Pipeline 项目:
      • 选择 Pipeline script from SCM,指向含 Jenkinsfile 的仓库与分支。
  • 配置 Webhook(以 GitHub 为例):
    • 在仓库 Settings → Webhooks 新增 Payload URL:http://<Jenkins服务器IP>:8080/github-webhook/
    • Content type:application/json;事件:Just the push event
    • 若 Jenkins 在内网,需通过 内网穿透/反向代理 暴露 Webhook 入口。

四 示例 Jenkinsfile 与 Tomcat 部署

  • 示例 Jenkinsfile(声明式流水线,按项目调整仓库与 Tomcat 地址/凭据):
    • 构建与测试:
      • mvn clean package
      • mvn test(测试报告位于 target/surefire-reports/*.xml
    • 部署到 Tomcat(示例采用 Tomcat 7/8/9 的 Manager API,需提前在 Tomcat 配置可管理用户与权限):
      • 方式 A:使用 curl 调用 Manager API 上传 WAR(推荐)
      • 方式 B:使用 Tomcat Maven Plugin(需在 pom.xml 配置插件与 <url>/manager/text</url><server> 凭据)
  • 注意事项:
    • 确保构建产物为 WAR 并已生成(如 target/your-app.war)。
    • 若使用 Manager API,需在 Tomcat 的 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.'
    }
  }
}
  • Tomcat 端最小配置示例(conf/tomcat-users.xml 片段,仅用于演示,生产请更严格):
    • <role rolename="manager-script"/>
    • <user username="tomcat" password="tomcat" roles="manager-script"/>
  • 若不使用 Manager API,也可改为将 WAR 复制到 webapps 目录并重启 Tomcat(适合测试环境)。

五 最佳实践与扩展

  • 安全与权限:
    • 使用 SSH 密钥凭据存储 管理代码与部署访问;为 Jenkins 与 Tomcat 分别配置最小权限账户;开启 CSRF 保护代理/防火墙 策略。
  • 性能与可扩展性:
    • 采用 Jenkins Agent/分布式构建 提升并行度;为 Maven 本地仓库 与依赖设置缓存;按环境拆分 JDK/Maven/Tomcat 工具镜像或代理仓库。
  • 流程治理:
    • 在 Pipeline 中加入 代码扫描(如 SpotBugs/Checkstyle)单元测试覆盖率制品归档灰度/蓝绿或金丝雀发布 等阶段;为生产部署增加 审批回滚 策略。
  • 监控与维护:
    • 定期 更新 Jenkins 与插件、监控 构建队列与节点资源备份 Jenkins 配置与任务;为关键任务配置 通知(邮件/企业微信/钉钉)

0