当前位置: 首页 > news >正文

Linux小课堂: Tomcat容器中部署Jenkins的完整流程与关键技术要点

环境准备与安装基础

在已完成 Java 环境及 Tomcat 服务器部署的前提下(Tomcat 需支持 Servlet 4.0+ 规范),本节将部署 Jenkins WAR 包至 Tomcat 容器。Jenkins 作为 Java 编写的开源持续集成工具,其 WAR(Web Application Archive) 文件可通过官方镜像获取:

安装 wget 工具(如缺失)
yum install wget -y 下载最新稳定版 Jenkins WAR 
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war 

注:若虚拟机网络异常,可通过 SCP 从主机传输:
scp jenkins.war root@192.168.0.106:/root/

Tomcat 容器部署流程


1 ) 定位 Web 应用目录
Tomcat 标准部署路径为 /var/lib/tomcat/webapps(符号链接指向 /usr/share/tomcat/webapps):

mv /root/jenkins.war /var/lib/tomcat/webapps/

关键验证:执行 ls /var/lib/tomcat/webapps 确认文件存在

2 ) 服务重启与异常处理
重启 Tomcat 后应自动解压 WAR 文件:

systemctl restart tomcat

若未生成 jenkins 目录,根源在于 SELinux 安全策略:

getenforce # 返回 Enforcing 表示策略生效 

SELinux 权限解决方案


1 ) 临时方案(不推荐)

setenforce 0 # 切换为 Permissive 模式
systemctl restart tomcat 

2 ) 永久修正方案
核心步骤:修正 WAR 文件安全上下文:

# 查看目标目录安全上下文
ls -Zd /var/lib/tomcat/webapps/ # 输出示例:system_u:object_r:tomcat_var_lib_t:s0 # 应用正确上下文类型 
semanage fcontext -a -t tomcat_var_lib_t "/var/lib/tomcat/webapps/jenkins.war"
restorecon -v /var/lib/tomcat/webapps/jenkins.war
systemctl restart tomcat  # 重启服务 
  • 正确上下文应为:tomcat_var_lib_t
  • 再次重启Tomcat服务生效
  • 根本原因:从/root目录移动文件导致安全上下文不匹配,最佳实践是直接下载至目标目录

3 ) 最佳实践

直接下载至目标目录避免权限问题:

cd /var/lib/tomcat/webapps/
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

自定义 Jenkins 主目录配置

默认目录 /usr/share/tomcat/.jenkins 可调整:

创建新数据目录
mkdir /var/lib/jenkins
chown tomcat:tomcat /var/lib/jenkins

修改 Tomcat 上下文配置:

<!-- 编辑 /etc/tomcat/context.xml -->
<Context><Environment name="JENKINS_HOME" value="/var/lib/jenkins" type="java.lang.String" />
</Context>

重启生效:systemctl restart tomcat

初始化流程问题排查


1 ) 管理员解锁
访问 http://<IP>:8080/jenkins,输入初始密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

2 ) 离线错误修复
若出现 This Jenkins instance appears to be offline

sed -i 's/https:\/\//http:\/\//g' /var/lib/jenkins/hudson.model.UpdateCenter.xml 
systemctl restart tomcat

3 ) 插件安装异常处理

初始化时可能出现No such plugin错误,解决方案:

  1. 暂时选择Install suggested pluginsNone跳过插件安装
  2. 手动检查网络连接与防火墙策略
  3. 验证插件目录权限:
    chown -R tomcat:tomcat /var/lib/jenkins/plugins 
    
  4. 永久解决:
    修改更新中心协议(将HTTPS改为HTTP):
    echo '<?xml version="1.1" encoding="UTF-8"?>
    <sites><site><id>default</id><url>http://updates.jenkins.io/update-center.json</url></site>
    </sites>' > /var/lib/jenkins/hudson.model.UpdateCenter.xml 
    

4 ) HTTPS访问故障排除

若出现This Jenkins instance appears to be offline错误,需修改更新中心协议:

  • 编辑配置文件:
    vi /var/lib/jenkins/hudson.model.UpdateCenter.xml
    
  • 替换协议为HTTP:
    <url>http://updates.jenkins.io/update-center.json</url>
    

5 )管理员账户创建

通过初始化界面创建管理员账户,需输入:

  • 用户名(Username)
  • 密码(Password)及确认密码
  • 全名(Full name)
    完成创建后即可访问Jenkins主面板

NestJS 集成 Jenkins API 示例

import { Injectable } from '@nestjs/common';
import axios from 'axios';@Injectable()
export class JenkinsService {private readonly BASE_URL = 'http://jenkins-host:8080/jenkins';private readonly USERNAME = 'amigo';private readonly API_TOKEN = 'xxxxxxxxxx'; // Jenkins 后台生成 async triggerBuild(jobName: string): Promise<string> {const url = `${this.BASE_URL}/job/${jobName}/build`;const response = await axios.post(url, null, {auth: { username: this.USERNAME, password: this.API_TOKEN }});if (response.status === 201) {return `Build queued. Location: ${response.headers.location}`;}throw new Error(`Trigger failed: ${response.statusText}`);}async getBuildStatus(jobName: string, buildId: number): Promise<any> {const url = `${this.BASE_URL}/job/${jobName}/${buildId}/api/json`;return axios.get(url, {auth: { username: this.USERNAME, password: this.API_TOKEN }});}
}

关键配置:需在 Jenkins 的 Manage Credentials 生成 API Token

Tomcat 生产环境优化建议

原生局限性:

  1. 静态资源处理性能低下
  2. 缺乏 HTTPS 原生支持
  3. 高并发连接管理能力弱

推荐架构:

HTTPS
HTTP/1.1
Static Files
Client
Nginx
Jenkins on Tomcat
CDN

实施要点:

  • Nginx 处理 SSL 卸载与静态缓存
  • 动态请求通过 proxy_pass 转发至 Tomcat
  • 使用 upstream 模块实现负载均衡(后续详解)

架构优化方案: 使用Nginx/Apache作为反向代理服务器:

  1. HTTP反向代理模式(推荐):
    server {listen 443 ssl;server_name jenkins.example.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;location / {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
    }
    
  2. 专用连接器模式(仅Apache):
  • Apache mod_jk插件,使用专用协议(AJP)在Apache与Tomcat间通信,需安装模块:
    yum install mod_jk  # 安装mod_jk 
    
    配置
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile conf/workers.properties
    JkMount /jenkins worker1
    

关键技术总结

  1. 部署流程:下载WAR → 放置Tomcat目录 → 修正SELinux上下文 → 重启服务
  2. 性能优化:务必通过Nginx/Apache代理Tomcat,分离静态资源与动态请求
  3. SELinux策略是文件部署失败的核心原因,需通过semanagerestorecon修复上下文
  4. JENKINS_HOME环境变量决定配置/日志/构建数据的存储位置
  5. WAR文件部署本质是Servlet容器的自动解压机制
  6. 生产环境必须通过反向代理解决Tomcat的HTTPS与性能瓶颈
  7. 插件安装依赖网络策略和目录权限的正确配置

通过上述步骤,可确保Jenkins在Tomcat中稳定运行,同时解决SELinux、插件安装等典型问题
代理服务器的引入显著提升系统安全性与性能

http://www.dtcms.com/a/539887.html

相关文章:

  • 本地部署消息中间件 RabbitMQ 并实现外网访问 (Linux 版本)
  • Kafka在Spring Boot生态中的浅析与应用
  • 南京网站建设与维护英文购物网站模板下载
  • Linux网络编程:进程间关系和守护进程
  • 在 Ubuntu 上使用 Docker 部署思源笔记:一份详尽的实践教程以及常见错误汇总
  • 劳务网站有做吗公众号文章采集wordpress
  • Linux中,vi(vim)编辑器大部分快捷键
  • ADUM5201CRWZ-RL双通道数字隔离器 ADI亚德诺半导体 集成电路IC芯片解析
  • Ubuntu texlive安装后无法编译中文论文解决方法
  • UniversalSmartStateFilter:统一状态过滤器的架构设计与实现
  • 四旋翼机器人手臂路径规划
  • 5G专网平台客户案例分享:基于可编程5G的智慧电网巡检原型系统
  • 做网站现在什么尺寸合适深圳刚刚突然宣布
  • 基于深度学习与OCR研发的报关单识别接口技术解析
  • Power Apps:预览SharePoint文档库的PDF文档
  • ElasticSearch-基础
  • 常州市网站制作娶妻为什么不娶外贸女
  • MySQL 窗口函数全解析:NTILE() 函数深度指南
  • 【大模型与智能体论文】REACT:协同语言模型中的推理与行动
  • 攻克兼容、安全、零中断的“不可能三角”:电科金仓异构多活架构交出集团化医院信创最佳答卷!
  • Duckdb rusty_sheet插件使用心得
  • PyTorch torch.ones()张量创建详解
  • 菜鸟教程网站建设lazy load wordpress
  • 湖南 中小企业 网站建设百度做网站推广
  • 基于小波变换的图像阈值去噪MATLAB实现
  • 网站建设怎么收费网站优化有哪些类型
  • GitHub 与 Gitee 多平台 SSH Key 配置指南
  • 中原郑州网站建设中国建设银行信用卡
  • c++学习学习学习
  • 可做影视网站的服务器黄骗免费网站