温馨提示×

Debian JSP开发中如何使用Jenkins

小樊
35
2025-12-18 17:14:34
栏目: 编程语言

在 Debian 上使用 Jenkins 构建与部署 JSP 项目的实践指南

一 环境准备与安装

  • 安装 Java(推荐 OpenJDK 11):
    • 执行:sudo apt update && sudo apt install -y openjdk-11-jdk
    • 验证:java -version
  • 安装并启动 Jenkins(官方仓库方式,Debian 12 推荐签名源):
    • 导入密钥: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 > /devref
    • 安装与启动:sudo apt update && sudo apt install -y jenkins
    • 开机自启:sudo systemctl enable --now jenkins
    • 查看初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    • 访问控制台:http://<服务器IP>:8080,完成解锁与插件安装
  • 安装 Tomcat 9(作为 JSP 容器):
    • 执行:sudo apt install -y tomcat9 tomcat9-admin
    • 管理界面:默认位于 http://<服务器IP>:8080/manager/html(需配置用户与权限)
  • 安装 MavenGit(JSP 项目常用构建与源码管理工具):
    • 执行:sudo apt install -y maven git
  • 防火墙放行(如使用 UFW):sudo ufw allow 8080

二 创建 Jenkins 任务与流水线

  • 安装常用插件(首次或“插件管理”中安装):Pipeline、Git、Maven Integration、Credentials Binding、Docker(如需容器化)
  • 新建任务:选择 Pipeline,在“Pipeline”处选择 Pipeline script from SCM,配置 Git 仓库与凭据;在仓库根目录放置 Jenkinsfile
  • 示例 Jenkinsfile(Maven 多模块或传统 war 打包,部署到本地 Tomcat,使用 Tomcat Manager 部署):
    pipeline {
      agent any
      tools {
        maven 'Maven-3'   // 在“全局工具配置”中预先配置
        jdk   'OpenJDK-11'
      }
      environment {
        // 建议使用 Jenkins 凭据 ID(Credentials Binding)
        TOMCAT_URL      = 'http://localhost:8080/manager/text'
        TOMCAT_USER     = credentials('tomcat-manager-user')
        TOMCAT_PASS     = credentials('tomcat-manager-pass')
        APP_NAME        = 'myapp'
        WAR_PATH        = "target/${APP_NAME}.war"
        DEPLOY_CONTEXT  = "/${APP_NAME}"
      }
      stages {
        stage('Checkout') {
          steps { git branch: 'main', url: 'https://github.com/your-org/your-jsp-app.git' }
        }
        stage('Build') {
          steps {
            sh 'mvn -B clean package -DskipTests'
            archiveArtifacts artifacts: env.WAR_PATH, fingerprint: true
          }
        }
        stage('Deploy to Tomcat') {
          steps {
            sh '''
              curl --upload-file "${WAR_PATH}" \
                   --user "${TOMCAT_USER}:${TOMCAT_PASS}" \
                   "${TOMCAT_URL}/deploy?path=${DEPLOY_CONTEXT}&update=true"
            '''
          }
        }
      }
      post {
        success { echo "Deployed ${APP_NAME} to ${TOMCAT_URL}${DEPLOY_CONTEXT}" }
        failure { echo "Build or deploy failed." }
      }
    }
    
    说明:
    • 上述示例使用 Tomcat 的“Text”接口进行部署,需在 Tomcat 中配置具有部署权限的管理员用户(见下一节)
    • 若使用 WAR 外部目录部署,可改为 sh 'cp ${WAR_PATH} /var/lib/tomcat9/webapps/${APP_NAME}.war && systemctl reload tomcat9'(需赋予 jenkins 用户相应目录权限)

三 Tomcat 与权限配置

  • 为 Tomcat Manager 添加可部署用户(编辑 /etc/tomcat9/tomcat-users.xml):
    <tomcat-users>
      <role rolename="manager-script"/>
      <role rolename="manager-gui"/>
      <user username="deployer" password="StrongPass!23" roles="manager-script,manager-gui"/>
    </tomcat-users>
    
    修改后重启 Tomcat:sudo systemctl restart tomcat9
  • 权限与安全:
    • 若采用“文件复制部署”,确保 /var/lib/tomcat9/webappsjenkins 用户可写:sudo chown -R tomcat:tomcat /var/lib/tomcat9/webapps && sudo usermod -aG tomcat jenkins
    • 遵循最小权限原则,凭据使用 Jenkins Credentials 存储,避免明文
    • 生产环境建议通过反向代理与 HTTPS 暴露 Jenkins 与 Tomcat 管理端

四 触发与通知优化

  • 代码推送自动触发:
    • 在 Jenkins 任务“构建触发器”勾选 GitHub hook trigger for GITScm polling(或对应平台的 Webhook)
    • 在代码托管平台配置 Webhook 指向 http://<JENKINS_URL>/github-webhook/(注意公网可达与 CSRF 配置)
  • 构建后处理与质量门禁:
    • 归档构件(如 Archive the artifacts)、发布测试报告(如 JUnit)、设置 质量阈值通知(邮件、企业微信、钉钉等)
  • 可选:使用 Jenkinsfile 多分支流水线,按分支策略自动创建与运行任务

五 常见问题与排查

  • 端口冲突:
    • Jenkins 或 Tomcat 默认均为 8080,需调整其一(如将 Tomcat 改为 8081 或反向代理统一端口)
    • 修改 /etc/default/jenkins 中的 HTTP_PORT 后重启:sudo systemctl restart jenkins
  • Java 或路径问题:
    • 确认 java -version 输出为 OpenJDK 11;若 Jenkins 找不到 java,建立软链或正确设置 JAVA_HOME
  • 权限错误(Permission denied):
    • 构建或部署阶段报无权限,多为 jenkins 用户对项目目录或 Tomcat 目录无读写权限,按“Tomcat 与权限配置”修正
  • 触发器无效:
    • 公网无法访问 Webhook 时,使用 内网穿透轮询;确保 Jenkins 与代码平台网络可达
  • 插件安装慢:
    • 在“插件管理-高级”更换 Update Site 为国内镜像源以加速

0