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

CI/CD(三)—— 【保姆级实操】Jenkins+Docker GitLab+Tomcat 实现微服务CI/CD全流程部署

文章目录

  • 前言
  • 一、基础概念:理解CI/CD与Jenkins核心逻辑
    • 1.1 软件开发生命周期(SDLC)
    • 1.2 传统开发模型:瀑布模型的局限
    • 1.3 敏捷开发:迭代与增量的核心
    • 1.4 CI/CD流程:自动化的核心
    • 1.5 Jenkins概述:CI/CD的“自动化引擎”
  • 二、环境准备:部署GitLab、Jenkins与测试服务器
    • 2.1 192.168.10.21:GitLab(Docker版)部署
    • 2.2 192.168.10.22:Jenkins 2.528.1安装(适配JDK21)
      • 2.2.1 安装 JDK21
      • 2.2.2 安装 Jenkins 2.528.1
      • 2.2.3 配置 Jenkins(用户、端口、JDK路径)
      • 2.2.4 启动 Jenkins 并初始化
      • 2.2.5 优化插件源(解决国内网络问题)
      • 2.2.6 常见问题与解决
    • 2.3 192.168.10.18:应用测试服务器配置(Tomcat)
      • 2.3.1 安装JDK1.8
      • 2.3.2 安装Tomcat8.5
      • 2.3.3 配置Tomcat远程部署权限
  • 三、GitLab仓库配置:创建项目与上传源码
    • 3.1 创建GitLab组、用户与项目
      • 3.1.1 创建组(devops_group)
      • 3.1.2 创建用户(simon)
      • 3.1.3 将用户添加到组
      • 3.1.4 创建项目(web_demo)
    • 3.2 上传源码到GitLab
      • 3.2.1 本地配置Git(以Linux为例)
      • 3.2.2 上传源码
  • 四、Jenkins核心配置:凭据、权限与全局工具配置
    • 4.1 凭据管理:安全存储敏感信息
      • 4.1.1 配置“用户名密码”凭据(GitLab)
      • 4.1.2 配置“SSH密钥”凭据(GitLab免密访问)
    • 4.2 用户权限管理:基于Role插件
      • 4.2.1 安装插件
      • 4.2.2 开启角色授权
      • 4.2.3 创建角色与分配用户
    • 4.3 全局工具配置:Maven配置
      • 4.3.1 自动安装 Maven(推荐方式)
      • 4.3.2 验证配置是否生效
  • 五、Jenkins构建项目:从自由风格到Pipeline
    • 5.1 自由风格项目:Web_demo_freestyle
      • 5.1.1 新建项目
      • 5.1.2 配置源码管理(拉取GitLab代码)
      • 5.1.3 配置编译打包(Maven)
      • 5.1.4 配置部署到Tomcat
      • 5.1.5 测试构建
    • 5.2 Maven项目:Web_demo_maven
      • 5.2.1 修改源码并提交到 GitLab(Windows 方式)
        • 5.2.1.1首先下载代码(克隆仓库)
        • 5.2.1.2 修改代码
        • 5.2.1.3 提交代码
        • 5.2.1.4 在 GitLab 上测试查看
      • 5.2.2 安装 Maven Integration 插件
      • 5.2.3 新建Maven项目
    • 5.3 Pipeline项目:Web_demo_pipeline(推荐)
      • 5.3.1 安装Pipeline插件
      • 5.3.2 编写Jenkinsfile(核心)
      • 5.3.3 上传Jenkinsfile到GitLab
      • 5.3.4 新建Pipeline项目
      • 5.3.5 测试Pipeline
    • 5.4 参数化构建:动态选择分支
      • 5.4.1 配置参数
      • 5.4.2 测试参数化构建
  • 六、自动化触发:GitLab Webhook
    • 6.1 配置Jenkins接收Webhook
    • 6.2 配置GitLab Webhook
    • 6.3 测试Webhook
  • 七、代码审查:Jenkins + SonarQube
    • 7.1 SonarQube安装(以192.168.10.23为例)
    • 7.2 Jenkins集成SonarQube
    • 7.3 Pipeline集成SonarQube审查
  • 八、邮件通知:构建结果实时推送
    • 8.1 安装Email Extension插件
    • 8.2 配置SMTP
    • 8.3 测试邮件通知
  • 总结

前言

在现代软件开发中,持续集成(CI)与持续部署(CD) 是提升团队效率、保障代码质量的核心手段。Jenkins作为开源CI/CD工具的标杆,凭借其灵活的插件生态和强大的流程编排能力,成为企业级自动化部署的首选。

本文基于实际生产环境需求,详细讲解从环境搭建到全流程自动化部署的完整步骤,重点解决“部署落地”问题。文中环境规划如下:

  • 192.168.10.21:GitLab服务器(Docker版 twang2218/gitlab-ce-zh:latest,中文社区版,方便国内用户使用)
  • 192.168.10.22:Jenkins服务器(版本2.528.1,适配JDK21,避免新版本兼容性问题)
  • 192.168.10.18:应用测试服务器(部署Tomcat,用于接收Jenkins构建的应用包)

全文涵盖Jenkins安装配置、GitLab仓库管理、Maven项目构建、Pipeline流水线编排、Webhook自动触发、SonarQube代码审查等核心环节,所有步骤均经过实操验证,修改处会明确标注,确保新手也能顺利复现。

一、基础概念:理解CI/CD与Jenkins核心逻辑

在动手部署前,先理清核心概念,避免“知其然不知其所以然”。

1.1 软件开发生命周期(SDLC)

SDLC(Software Development Life Cycle)是软件从需求到退役的完整流程,核心阶段包括:
1、需求分析:收集业务需求(如用户需要“添加用户”功能),评估可行性、预算和目标,输出《需求规格说明书》。
2、设计:拆分系统架构(如前后端分离、微服务拆分),定义模块接口,输出设计文档(如数据库ER图、接口文档)。
3、实现:开发人员根据设计文档编写代码,按模块交付(如用户模块、订单模块),周期随项目复杂度从数周到数月不等。
4、测试:测试人员执行功能测试(验证“添加用户”是否正常)、压力测试(模拟1000人同时访问)、代码测试(检查语法错误),输出测试报告并修复Bug。
5、进化:上线后根据用户反馈迭代功能(如新增“删除用户”)、修复线上Bug、优化性能,持续维护产品生命周期。

1.2 传统开发模型:瀑布模型的局限

瀑布模型是早期线性开发模型,流程为:产品设计 → 代码开发 → 功能测试 → 运维上线,仅适用于简单项目,缺点明显:

  • 阶段固定,需求变更成本高(如开发中途改功能需推翻重来);
  • 用户需等到流程末期才能看到产品,风险集中;
  • 文档冗余,工作量大(每个阶段需输出大量文档)。

现代开发已很少使用纯瀑布模型,更多采用敏捷开发+CI/CD的组合。

1.3 敏捷开发:迭代与增量的核心

敏捷开发的核心是迭代开发(拆分大周期为小周期)+ 增量开发(每个周期交付可用功能),优势如下:
1、迭代开发:如开发“电商系统”,不一次性开发所有功能,而是先做“商品展示”(迭代1),再做“购物车”(迭代2),最后做“支付”(迭代3),每个迭代都重复“需求→设计→开发→测试”流程。
2、增量开发:每个迭代交付“可使用的完整功能”,如迭代1交付“能浏览商品的页面”,而非“只搭好商品模块的骨架”。

敏捷开发能快速响应用户需求,降低风险,是CI/CD的理念基础。

1.4 CI/CD流程:自动化的核心

  • 持续集成(CI):开发人员频繁提交代码(如一天多次),Jenkins自动拉取代码、编译、测试,确保新代码与主干兼容。核心是“频繁集成+自动化测试”,避免代码冲突和隐藏Bug。
  • 持续交付(CD):CI通过后,自动将应用部署到测试/预生产环境(如192.168.10.18的Tomcat),供测试人员验证,不直接上线生产。
  • 持续部署(CD):测试通过后,自动将应用部署到生产环境,全程无需人工干预(需谨慎,通常配合灰度发布)。

CI/CD流程示意图:开发提交代码 → GitLab仓库 → Jenkins拉取编译 → 自动化测试 → 部署到测试服务器 → (手动/自动)部署到生产

1.5 Jenkins概述:CI/CD的“自动化引擎”

Jenkins是Java开发的开源CI/CD工具,核心功能包括:

  • 自动化构建:支持Maven、Gradle等工具,自动编译代码、打包成Jar/War包;
  • 分布式构建:多台服务器(Agent节点)协同工作,分担Master节点压力;
  • 插件生态:支持Git、Docker、K8s、SonarQube等工具集成,通过插件扩展功能;
  • 流水线(Pipeline):用代码(Jenkinsfile)定义部署流程,支持版本控制和复杂逻辑(如分支、并行执行)。

Jenkins官网:https://www.jenkins.io/,中文文档:https://www.jenkins.io/zh/

二、环境准备:部署GitLab、Jenkins与测试服务器

按规划搭建基础环境,重点解决Docker GitLab配置、Jenkins JDK21适配问题。

服务器列表

代码托管服务器192.168.10.21Gitlab
持续集成服务器192.168.10.22Jenkins2.528.1,JDK21,Maven,Git
应用测试服务器192.168.10.18JDK1.8,Tomcat8.5

2.1 192.168.10.21:GitLab(Docker版)部署

参考博客:CI/CD(一)—— 从零搭建 GitLab 全流程(Docker 部署 + 实战指南)


2.2 192.168.10.22:Jenkins 2.528.1安装(适配JDK21)

Jenkins 2.528.1 为稳定版本,兼容 JDK21(新版本 Jenkins 可能要求更高的 JDK)。
本文在 192.168.10.22 服务器上安装 Jenkins,并使用清华源加速插件下载。


2.2.1 安装 JDK21

1、下载 JDK21 压缩包(可从 Oracle 官网下载):
https://www.oracle.com/java/technologies/downloads/#java21

将下载好的 jdk-21_linux-x64_bin.tar.gz 上传到 /opt 目录。

2、解压并配置环境变量:

# 解压 JDK 并移动到标准路径
tar zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
mv /usr/local/jdk-21.0.9 /usr/local/jdk21# 配置环境变量
vim /etc/profile
# 添加以下内容(此处路径为JDK21安装路径)
export JAVA_HOME=/usr/local/jdk21
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH# 立即生效
source /etc/profile# 验证安装(显示java version "21.x.x"即为成功)
java -version

在这里插入图片描述


2.2.2 安装 Jenkins 2.528.1

1、添加 Jenkins 官方源并导入密钥:

# 下载 Jenkins repo
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate# 导入公钥
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key# 安装 EPEL 源(解决依赖)
yum install epel-release -y

2、安装指定版本 Jenkins(锁定为 2.528.1):

yum install jenkins-2.528.1-1.1.noarch -y

2.2.3 配置 Jenkins(用户、端口、JDK路径)

修改 Jenkins 服务文件(适配 JDK21):

vim /usr/lib/systemd/system/jenkins.service
# 修改以下参数
[Unit]
Description=Jenkins Continuous Integration Server
After=network.target[Service]
User=root
Group=root# 指定 JDK21 环境变量
Environment="JAVA_HOME=/usr/local/jdk21"
# 指定 Jenkins 端口(替换默认8080)
Environment="JENKINS_PORT=8888"
# Jenkins 主目录(默认即可)
Environment="JENKINS_HOME=/var/lib/jenkins"
# 如果最小化安装,服务器无UI界面加上这一句
Environment="JENKINS_JAVA_OPTIONS=-Djava.awt.headless=true"# Jenkins 启动命令(由官方脚本 /usr/bin/jenkins 管理)
ExecStart=/usr/bin/jenkins# 避免 Jenkins 启动超时报错
TimeoutStartSec=300
SuccessExitStatus=143
Restart=always[Install]
WantedBy=multi-user.target

/etc/sysconfig/jenkins 在 2.528.1 版本中为空或被弃用,不再生效。
所以不用修改 /etc/sysconfig/jenkins/etc/init.d/jenkins,所有配置都在 .service 文件中完成。


2.2.4 启动 Jenkins 并初始化

1、启动 Jenkins 服务并设置开机自启:

# 如果最小化安装,安装字体支持库
yum install -y fontconfig dejavu-sans-fonts liberation-fontssystemctl daemon-reload
systemctl start jenkins
systemctl enable jenkins

2、验证 Jenkins 是否运行成功:

# 查看服务状态
systemctl status jenkins# 验证 8888 端口监听(出现 java 进程即为成功)
netstat -lnutp | grep 8888

在这里插入图片描述

3、等待 Jenkins 第一次启动(约 2~3 分钟)。
首次启动后会自动创建 /var/lib/jenkins 配置目录,结构如下:

/var/lib/jenkins/
├── config.xml
├── hudson.model.UpdateCenter.xml
├── secrets/
├── plugins/
├── jobs/
└── updates/

4、访问初始化页面并登录:

  • 浏览器访问:
    http://192.168.10.22:8888
    在这里插入图片描述

  • 获取初始管理员密码:

    cat /var/lib/jenkins/secrets/initialAdminPassword
    

    在这里插入图片描述

  • 粘贴密码后选择 “安装推荐的插件”(若失败可重试)
    在这里插入图片描述

  • 创建管理员用户(示例):

    用户名:simon
    密码:simon@123
    邮箱:simon@example.com
    

    在这里插入图片描述

  • 确认 Jenkins URL:
    默认 http://192.168.10.22:8888/
    点击 “保存并完成”。
    在这里插入图片描述


2.2.5 优化插件源(解决国内网络问题)

⚠️ 注意:以下文件需在 Jenkins 启动并初始化后才会生成。

1、替换默认插件源为清华镜像:

vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
# 将原url替换为
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>

2、替换 Google 检查地址为百度(避免连接超时):

sed -i 's#https://www.google.com#https://www.baidu.com#' /var/lib/jenkins/updates/default.json

3、重启 Jenkins 使修改生效:

systemctl restart jenkins

2.2.6 常见问题与解决

问题现象可能原因解决方法
端口8888未监听JDK 路径错误或 Jenkins 启动失败检查 /usr/lib/systemd/system/jenkins.serviceJAVA_HOME
启动失败,日志出现 “Failed to start”Jenkins 解压 war 包失败删除 /var/lib/jenkins/warfailed-boot-attempts.txt 后重启
插件源文件不存在Jenkins 尚未初始化启动一次 Jenkins 生成文件
访问缓慢或插件下载失败国内网络问题使用清华源并重启 Jenkins
网页访问被防火墙阻断防火墙未放行firewall-cmd --add-port=8888/tcp --permanent && firewall-cmd --reload

至此,Jenkins 2.528.1(JDK21版)安装完成,可正常通过 8888 端口访问。
下一步可进行 GitLab 集成、Pipeline 构建任务配置等操作。

2.3 192.168.10.18:应用测试服务器配置(Tomcat)

应用测试服务器用于部署Jenkins构建的War包,需安装JDK1.8(Tomcat8.5适配JDK1.8,避免JDK21兼容性问题)和Tomcat8.5。

2.3.1 安装JDK1.8

也可以执行yum install java -y直接使用openjdk

# 解压JDK1.8(上传压缩包到/opt)
tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
mv /usr/local/jdk1.8.0_171 /usr/local/jdk1.8# 配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH# 生效并验证
source /etc/profile
java -version  # 显示1.8.0_171即为成功

2.3.2 安装Tomcat8.5

1、下载Tomcat8.5(官网:https://tomcat.apache.org/download-80.cgi),上传到/opt目录。
2、解压并启动:

tar zxvf apache-tomcat-8.5.35.tar.gz
mv /opt/apache-tomcat-8.5.35 /usr/local/tomcat# 启动Tomcat
/usr/local/tomcat/bin/startup.sh
# 验证(访问http://192.168.10.18:8080,显示Tomcat主页即为成功)

在这里插入图片描述

2.3.3 配置Tomcat远程部署权限

默认情况下 Tomcat 没有配置用户角色权限。
验证方法:可浏览器访问 http://192.168.10.18:8080 ,点击 Managing Tomcat 下的 manager webapp ,发现返回 403 页面。
在这里插入图片描述
在这里插入图片描述

但是后续 Jenkins 部署项目到 Tomcat 服务器,需要用到 Tomcat 的用户进行远程部署,因此需要修改配置,添加用户及权限:
1、修改用户权限文件:

vim /usr/local/tomcat/conf/tomcat-users.xml
# 在</tomcat-users>前添加(标注处为新增用户)
43 -->    #添加 tomcat 用户角色权限,指定用户和密码都是 tomcat ,并授予权限<role rolename="tomcat"/><role rolename="role1"/><role rolename="manager-script"/><role rolename="manager-gui"/><role rolename="manager-status"/><role rolename="admin-gui"/><role rolename="admin-script"/><user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>

在这里插入图片描述

2、允许远程访问Tomcat管理页面:

vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
# 注释掉Valve配置(标注处为注释,允许外部IP访问)
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

在这里插入图片描述

3、重启Tomcat:

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
# 验证:访问http://192.168.10.18:8080/manager/html,用tomcat/tomcat登录,能进入管理页即为成功

在这里插入图片描述

三、GitLab仓库配置:创建项目与上传源码

GitLab是代码仓库,需创建组、用户和项目,用于存储开发代码,供Jenkins拉取。

3.1 创建GitLab组、用户与项目

3.1.1 创建组(devops_group)

1、登录GitLab(http://192.168.10.21,root用户)。
2、点击左上角GitLab→新建群组

  • 群组名称:devops_group
  • 群组URL:devops_group(自动填充)
  • 可见性级别:私有(避免外部访问)
  • 点击创建群组

在这里插入图片描述

3.1.2 创建用户(simon)

1、点击顶部扳手图标(管理区域)→新建用户

  • 姓名:simon
  • 用户名:simon
  • 电子邮箱:simon@example.com
  • 点击创建用户

在这里插入图片描述

2、设置用户密码:点击用户右侧Edit,密码设为simon@123,点击Save changes

3.1.3 将用户添加到组

1、进入devops_group群组→左侧成员
2、添加成员到devops_group:搜索simon,角色权限选择Owner(拥有组内所有权限),点击添加到群组
在这里插入图片描述

3.1.4 创建项目(web_demo)

1、点击 【新建项目】:

  • 群组选项:devops_group
  • 项目名称:web_demo
  • 项目描述:web_demo(简单说明)
  • 可见性级别:私有
  • 点击创建项目

在这里插入图片描述

3.2 上传源码到GitLab

使用simon用户上传Web项目源码(如包含index.jsp的简单Web项目),步骤如下:

3.2.1 本地配置Git(以Linux为例)

# 配置全局用户(与GitLab用户一致)
git config --global user.name "simon"
git config --global user.email "simon@example.com"# 克隆GitLab项目到本地
cd /root
git clone http://192.168.10.21/devops_group/web_demo.git
# 输入用户名simon,密码simon@123

在这里插入图片描述

3.2.2 上传源码

1、将Web项目源码(如web_demo.zip)上传到/opt目录,解压并移动到克隆目录:

cd /opt
unzip web_demo.zip
mv web_demo/* /root/web_demo/  # /root/web_demo是克隆后的目录

在这里插入图片描述

2、提交并推送代码:

cd /root/web_demo
# 添加所有文件到暂存区
git add .
# 提交(备注初始化项目)
git commit -m "init web_demo"
# 推送到GitLab(输入用户名和密码)
git push -u origin master

在这里插入图片描述

3、验证:登录GitLabdevops_groupweb_demo,能看到上传的源码(如pom.xml、src目录)即为成功。

在这里插入图片描述

四、Jenkins核心配置:凭据、权限与全局工具配置

Jenkins需配置凭据(访问GitLab、Tomcat的账号密码)、用户权限(不同角色各司其职)和Maven(编译Java项目),为后续构建做准备。

4.1 凭据管理:安全存储敏感信息

Jenkins支持多种凭据类型,以下是常见的凭据类型:

凭据类型用途生活举例
Username with password登录需要用户名和密码的服务登录网银
SSH Username with private key免密连接远程服务器用私人钥匙解锁保险箱
Secret file使用敏感文件(临时共享)快递员临时用你的快递单号
Secret text保存加密文本信息快递取件码或 API Token
Certificate使用证书认证身份办公单位盖章的文件

我们常用的有用户名密码SSH密钥,此处配置访问GitLab的两种凭据。

4.1.1 配置“用户名密码”凭据(GitLab)

1、Manage Jenkins → Credentials → System → Global credentials (unrestricted)
在这里插入图片描述
2、选择Username with password类型:

  • 用户名:simon(GitLab用户名)
  • 密码:simon@123(GitLab密码)
  • 描述:gitlab-auth-password(便于识别)
  • 点击确定

在这里插入图片描述

在这里插入图片描述

3、测试凭据是否可用

  • 创建一个FreeStyle项目:新建Item -> 任务名称(test01) FreeStyle Project -> 确定
    在这里插入图片描述

  • 点击源码管理

    • 选择 Git,Repository URL:http://192.168.10.21/devops_group/web_demo.git(可从 Gitlab 使用 HTTP 克隆)
    • Credentials 下拉选择 gitlab-auth-password,点击 保存。
      在这里插入图片描述
  • 点击 Bulid Now 开始构建,查看控制台输出可以看到构建成功,构建后的包会生成在服务器的 /var/lib/jenkins/workspace/test01 目录中。
    在这里插入图片描述
    在这里插入图片描述

4.1.2 配置“SSH密钥”凭据(GitLab免密访问)

1、在Jenkins服务器(192.168.10.22)生成SSH密钥:

# 生成密钥(无密码,直接回车)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 查看公钥(复制输出内容)
cat /root/.ssh/id_rsa.pub

在这里插入图片描述
在这里插入图片描述

2、将公钥添加到GitLab:

  • 登录GitLab(root用户)→右上角头像→设置→SSH密钥
  • 粘贴公钥内容,标题设为root@jenkins,点击添加密钥
    在这里插入图片描述

3、在Jenkins添加SSH凭据:

  • 添加凭据→选择SSH Username with private key
  • 用户名:root(Jenkins服务器的root用户,与密钥生成用户一致)
  • Private KeyEnter directly→粘贴/root/.ssh/id_rsa的内容(私钥)。
  • 描述:gitlab-auth-ssh
  • 点击确定
  • Jenkins服务器上手动执行一次ssh git@192.168.10.21,输入yes,在 ~/.ssh/known_hosts 里记录主机指纹。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4、测试凭据是否可用

  • 创建一个FreeStyle项目:新建Item -> 任务名称(test02) FreeStyle Project -> 确定
  • 点击源码管理
    • 选择 Git,Repository URL:git@192.168.10.21:devops_group/web_demo.git(可从 Gitlab 使用SSH 克隆)
    • Credentials 下拉选择 gitlab-auth-ssh,点击 保存。

在这里插入图片描述

  • 点击 Bulid Now 开始构建,查看控制台输出可以看到构建成功,构建后的包会生成在服务器的 /var/lib/jenkins/workspace/test02 目录中。
    在这里插入图片描述
    在这里插入图片描述

4.2 用户权限管理:基于Role插件

Jenkins使用Role-based Authorization Strategy插件实现角色权限控制(如开发只能看A项目,运维只能看B项目)。

4.2.1 安装插件

1、Jenkins→Manage Jenkins→插件管理→可选插件
在这里插入图片描述

2、搜索Role-based Authorization Strategy,勾选并点击安装(无需重启,安装完成后生效)。
在这里插入图片描述

4.2.2 开启角色授权

1、Manage Jenkins→全局安全设置→授权策略
在这里插入图片描述

2、选择Role-Based Strategy,点击保存
在这里插入图片描述

4.2.3 创建角色与分配用户

Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
Item roles(项目角色):针对某个或者某些项目的角色

权限设置(权限类别)

  • Overall
    • Administer:管理员权限,允许对 Jenkins 进行完全管理。
    • Read:允许访问 Jenkins 界面(最基本的权限)。
  • Agent:管理 Jenkins 节点(代理)的权限。
  • Job:管理 Jenkins 任务的权限(如构建、删除、配置等)。
  • Run:管理任务运行的权限(如更新、删除工作区)。
  • View:管理视图的权限。

1、Manage Jenkins→Manage and Assign Roles→Manage Roles
在这里插入图片描述
在这里插入图片描述

  • Global roles(全局角色):添加user角色,勾选Overall→Read(所有用户的基础访问权限)。
    在这里插入图片描述
    在这里插入图片描述

  • Item roles(项目角色)

    • 添加ItemA,Pattern填A-.*(匹配A-开头的项目),勾选Job下所有权限。
    • 添加ItemB,Pattern填B-.*(匹配B-开头的项目),勾选Job下所有权限。
      在这里插入图片描述
      在这里插入图片描述

2、Assign Roles(分配角色):

  • 创建devops用户(Manage Jenkins→Manage Users→新建用户)。
    在这里插入图片描述
    在这里插入图片描述

  • 分配角色(Manage Jenkins -> Manage and Assign Roles -> Assign Roles

    • dev用户绑定userItemA角色→只能访问A-开头的项目。
    • ops用户绑定userItemB角色→只能访问B-开头的项目。
      在这里插入图片描述
      在这里插入图片描述

3、创建项目测试权限

  • 新建Item → 创建两个项目,分别为 A-web1B-web1
    在这里插入图片描述
    在这里插入图片描述

  • 分别登录devops查看对应的项目
    在这里插入图片描述
    在这里插入图片描述

4.3 全局工具配置:Maven配置

Maven 是 Java 项目最常用的自动化构建工具,能够实现代码编译、依赖下载、测试与打包等一体化流程。
Jenkins 中,我们可以通过 全局工具配置(Global Tool Configuration) 来安装和管理 Maven,从而在构建任务中直接使用它进行 Web 项目的打包(如生成 .war 文件)。


4.3.1 自动安装 Maven(推荐方式)

当 Jenkins 服务器具备外网访问能力时,推荐使用 自动安装 Maven 的方式。
这种方式无需在系统中手动下载和配置环境变量,Jenkins 会在构建时自动从官方源下载安装 Maven。

操作步骤:

1、登录 Jenkins,进入:

Manage Jenkins → Global Tool Configuration

在这里插入图片描述

2、找到 Maven 安装 区块,点击 「新增 Maven」 按钮。
在这里插入图片描述

3、在弹出的配置项中填写以下信息:

  • Name(名称)maven3
  • ✅ 勾选 “Install automatically”(自动安装)
  • 安装来源选择:Install from Apache

4、点击右下角的 「应用」→「保存」
在这里插入图片描述

💡 Jenkins 会在首次使用时自动从 Maven 官网下载并解压对应版本,
默认安装路径为:

/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven3/
在这里插入图片描述


4.3.2 验证配置是否生效

1、点击项目 test02 → 配置 → 增加构建步骤 → Invoke top-level Maven targets
在这里插入图片描述

2、在出现的配置框中设置:

  • Maven Version:选择你在全局工具配置中添加的 maven3
  • Goals:clean package(清空原有的构建元素(插件、依赖包等target文件),再进行打包)

在这里插入图片描述

3、点击 保存
4、再次构建,如果可以把项目打成 war 包,代表 maven 环境配置成功。构建后的war包在/var/lib/jenkins/workspace/test02/target/下。

在这里插入图片描述
在这里插入图片描述

五、Jenkins构建项目:从自由风格到Pipeline

本章重点讲解三种项目构建方式:自由风格(简单项目)、Maven项目(Java项目)、Pipeline(复杂流程,推荐),所有项目均部署到192.168.10.18的Tomcat。

5.1 自由风格项目:Web_demo_freestyle

适合简单Web项目,步骤为拉取代码→编译打包→部署到Tomcat

5.1.1 新建项目

1、Jenkins→新建Item→输入任务名称web_demo_freestyle→选择Freestyle project确定
在这里插入图片描述

5.1.2 配置源码管理(拉取GitLab代码)

1、源码管理→选择Git
2、Repository URLgit@192.168.10.21:devops_group/web_demo.git(GitLab SSH地址)。
3、Credentials:选择gitlab-auth-ssh(之前配置的SSH凭据)。
4、Branches to build*/master(拉取master分支)。
在这里插入图片描述

5.1.3 配置编译打包(Maven)

1、配置增加构建步骤Invoke top-level Maven targets
2、在出现的配置框中设置:

  • Maven Version:选择你在全局工具配置中添加的 maven3
  • Goals:clean package

在这里插入图片描述

5.1.4 配置部署到Tomcat

Jenkins 本身无法实现远程部署到 Tomcat 的功能,需要安装 Deploy to container 插件实现。

1、安装Deploy to container插件:Manage Jenkins→插件管理→可选插件,搜索并安装该插件,重启Jenkins。
在这里插入图片描述

2、配置构建后操作增加构建后操作步骤Deploy war/ear to a container
在这里插入图片描述

3、配置部署参数:

  • WAR/EAR filestarget/*.war(Maven打包后的War包路径)。

  • ContainersAdd ContainerTomcat 8.x Remote
    在这里插入图片描述

  • Credentials添加Username with password,用户名tomcat,密码tomcat,描述tomcat-auth,选择该凭据。
    在这里插入图片描述

  • Tomcat URLhttp://192.168.10.18:8080(测试服务器Tomcat地址)。
    在这里插入图片描述

4、点击应用→保存

5.1.5 测试构建

1、点击Build Now,查看控制台输出,显示Finished: SUCCESS即为成功。
在这里插入图片描述

2、验证:部署成功后,刷新http://192.168.10.14:8080/manager/html 页面,可以发现应用程序中多出一个项目,点击新项目进去访问 ,能看到index.jsp页面即为成功。
在这里插入图片描述

在这里插入图片描述

5.2 Maven项目:Web_demo_maven

专为Maven项目设计,无需手动写mvn命令,Jenkins自动识别pom.xml。

5.2.1 修改源码并提交到 GitLab(Windows 方式)

在 Windows 环境中,我们可以使用 Git Bash 工具完成代码的克隆、修改、提交与推送。以下步骤仓库地址
http://gitlab/devops_group/web_demo.git 为例进行演示。

5.2.1.1首先下载代码(克隆仓库)

1、进入你希望保存项目的目录,例如 C:\project,打开 Git Bash,:

2、执行克隆命令,将远程仓库下载到本地:

git clone http://192.168.10.21/devops_group/web_demo.git

在这里插入图片描述

3、克隆成功后,进入项目目录:

cd web_demo

在这里插入图片描述

💡 说明:

  • 如果提示输入用户名和密码,请输入你在 GitLab 上的账号和密码。
  • 若配置了 SSH 公钥方式访问,可改为:
    git clone git@gitlab:devops_group/web_demo.git

5.2.1.2 修改代码

1、打开项目目录,例如 web_demo 下的 src/main/webapp/index.jsp(根据你的项目结构)。
2、使用任意编辑器(推荐 VS Code / Notepad++ / IntelliJ IDEA)修改页面内容。
例如修改原来的测试页面:

修改前:

如果看到此页面,代表项目部署成功啦!--这是master分支

在这里插入图片描述

修改后:

如果看到此页面,代表项目部署成功啦!--页面已由Windows本地修改

在这里插入图片描述


5.2.1.3 提交代码

修改完成后,通过 Git Bash 执行以下命令提交更改。

1、查看当前修改状态:

git status

在这里插入图片描述

2、将修改的文件加入暂存区:

git add .

3、提交修改到本地仓库:

git commit -m "update index.jsp: 修改页面提示内容"

4、推送到远程仓库(master分支):

git push origin master

在这里插入图片描述

⚠️ 注意事项:

  • 首次提交时,如果 Git 提示身份未设置,请配置用户名和邮箱:

    git config --global user.name "你的名字"
    git config --global user.email "你的邮箱@example.com"
    
  • 若使用 HTTP 方式,需要输入 GitLab 账号和密码。
    若 GitLab 启用了 Token 验证,请使用 Personal Access Token 代替密码。


5.2.1.4 在 GitLab 上测试查看

1、登录到 GitLab Web 页面:
访问 http://gitlab/devops_group/web_demo

2、进入仓库的 Repository → Files 页面,可以看到刚刚提交的 index.jsp 文件及更新记录。
在这里插入图片描述

3、点击提交记录(Commits)可查看你的提交信息与修改内容。
在这里插入图片描述

5.2.2 安装 Maven Integration 插件

Manage Jenkins→ 管理插件→可选插件→ 搜索 Maven Integration 插件选中直接安装即可

在这里插入图片描述
在这里插入图片描述

5.2.3 新建Maven项目

1、新建Item→任务名称web_demo_maven→选择构建一个maven项目确定
在这里插入图片描述

2、源码管理:同5.1.2,URL和凭据一致。
3、BuildRoot POMpom.xml(项目根目录的pom.xml)。
4、Goals and optionsclean package(编译打包命令,无需写mvn)。
在这里插入图片描述

5、构建后操作:同5.1.4,部署到Tomcat。
6、点击Build Now,验证方式同5.1.5。

如果构建失败,提示java.io.IOException: Cannot run program "java"
Manage Jenkins → 全局工具配置 → 配置JDK
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.3 Pipeline项目:Web_demo_pipeline(推荐)

用Jenkinsfile(代码)定义部署流程,支持版本控制和复杂逻辑(如分支判断、并行执行),是企业级部署的首选。

5.3.1 安装Pipeline插件

Manage Jenkins→插件管理→可选插件,搜索并安装PipelinePipeline Stage View插件,重启Jenkins。

5.3.2 编写Jenkinsfile(核心)

在GitLab的web_demo项目根目录创建Jenkinsfile,内容如下:

pipeline {agent any  # 任意可用节点environment {branch = "master"  # 默认分支}stages {// 1、拉取代码stage('拉取代码') {steps {checkout scmGit(branches: [[name: "*/${branch}"]],  // 动态分支,支持参数化构建extensions: [],userRemoteConfigs: [[credentialsId: 'gitlab-auth-ssh',  // SSH凭据ID(需与Jenkins一致)url: 'git@192.168.10.21:devops_group/web_demo.git'  // GitLab SSH地址]])}}// 2、编译打包stage('编译构建') {steps {sh 'mvn clean package'  // Maven编译打包}}// 3、部署到Tomcatstage('项目部署') {steps {// 部署到测试服务器Tomcatdeploy adapters: [tomcat8(credentialsId: 'tomcat-auth',  // Tomcat凭据IDpath: '',url: 'http://192.168.10.18:8080')],contextPath: null,war: 'target/*.war'}}}// 4、构建后发送邮件通知post {always {  // 无论成功失败都发送emailext(subject: '构建通知: ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',body: '${FILE,path="email.html"}',  // 邮件模板(需提前上传email.html到项目根目录)to: '18262623058@139.com'  // 收件人邮箱)}}
}

5.3.3 上传Jenkinsfile到GitLab

cd /root/web_demo
# 创建email.html(邮件模板,内容见下文)
vim email.html
# 提交并推送
git add Jenkinsfile email.html
git commit -m "add Jenkinsfile and email template"
git push -u origin master

5.3.4 新建Pipeline项目

1、新建Item→任务名称web_demo_pipeline→选择Pipeline确定
2、流水线定义Pipeline script from SCM(从GitLab拉取Jenkinsfile)。
3、SCMGitRepository URLgit@192.168.10.21:devops_group/web_demo.gitCredentials选择gitlab-auth-ssh
4、Branches to build*/master脚本路径Jenkinsfile(GitLab中Jenkinsfile的路径)。
5、点击应用→保存

5.3.5 测试Pipeline

1、Build Now,查看阶段视图,能看到拉取代码→编译构建→项目部署三个阶段依次执行,全部绿色即为成功。
2、验证:同5.1.5,访问Tomcat上的应用。

5.4 参数化构建:动态选择分支

支持手动选择构建分支(如master、v1),适用于多版本迭代场景。

5.4.1 配置参数

1、进入web_demo_pipeline项目→配置General→勾选This project is parameterized
2、添加参数String Parameter

  • 名称branch(参数名,与Jenkinsfile中的变量一致)。
  • 默认值master
  • 描述请输入分支名称(如master、v1)
    3、点击应用→保存

5.4.2 测试参数化构建

1、点击Build with Parameters,输入分支名称(如v1,需提前在GitLab创建v1分支),点击开始构建
2、验证:Jenkins会拉取v1分支代码并部署,访问Tomcat能看到v1分支的页面(需在v1分支修改index.jsp内容)。

六、自动化触发:GitLab Webhook

实现“代码提交即构建”,无需手动点击Build Now,核心是GitLab触发Jenkins构建。

6.1 配置Jenkins接收Webhook

1、安装GitLab插件:Manage Jenkins→插件管理→可选插件,搜索并安装GitLab插件。
2、Manage Jenkins→Configure System→GitLab

  • 取消勾选 Enable authentication for '/project' end-point(解决权限问题,否则Webhook触发失败)。
  • 点击应用→保存

3、配置项目Webhook:

  • 进入web_demo_pipeline配置构建触发器→勾选Build when a change is pushed to GitLab
  • 复制GitLab webhook URLhttp://192.168.10.22:8888/project/web_demo_pipeline(Jenkins项目地址)。

6.2 配置GitLab Webhook

1、登录GitLab→devops_group→web_demo→设置→集成
2、URL:粘贴上述Jenkins Webhook URL。
3、Trigger:勾选Push events(代码提交触发)。
4、点击Add webhook

6.3 测试Webhook

1、本地修改web_demo项目的index.jsp(如添加“Webhook测试”文字)。
2、提交并推送代码:git add . && git commit -m "test webhook" && git push
3、验证:Jenkins自动触发构建,显示Started by Gitlab push by simon即为成功。

七、代码审查:Jenkins + SonarQube

SonarQube是代码质量检测工具,能发现Bug、重复代码、安全漏洞,与Jenkins集成实现自动化审查。

7.1 SonarQube安装(以192.168.10.23为例)

1、安装MySQL5.7(SonarQube需数据库存储数据),创建数据库:

create database sonar;
GRANT ALL PRIVILEGES ON sonar.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'abc123';
FLUSH PRIVILEGES;

2、安装SonarQube 6.7.4(适配JDK1.8):

# 解压SonarQube
unzip sonarqube-6.7.4.zip -d /usr/local/
mv /usr/local/sonarqube-6.7.4 /usr/local/sonar# 创建sonar用户(不能用root启动)
useradd sonar
chown -R sonar:sonar /usr/local/sonar/# 配置数据库连接
vim /usr/local/sonar/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=abc123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&useSSL=false
sonar.web.port=9000  # SonarQube端口# 启动SonarQube
su sonar -c "/usr/local/sonar/bin/linux-x86-64/sonar.sh start"

3、访问http://192.168.10.23:9000,默认用户admin/admin,创建Token(My Account→Security→Generate Token),保存Token(如105c62e8c5f3f80a58331c1498733f38b58b56e3)。

7.2 Jenkins集成SonarQube

1、安装SonarQube Scanner插件:Manage Jenkins→插件管理,安装该插件。
2、Manage Jenkins→Global Tool Configuration→SonarQube Scanner

  • 新增SonarQube Scanner,Name填sonar-scanner,勾选Install automatically,选择版本(如2.6)。
    3、Manage Jenkins→Configure System→SonarQube servers
  • Namesonarqube
  • Server URLhttp://192.168.10.23:9000
  • Server authentication token添加Secret text,粘贴SonarQube Token,描述sonarqube-auth,选择该凭据。
    4、点击应用→保存

7.3 Pipeline集成SonarQube审查

1、在GitLab的web_demo项目根目录创建sonar-project.properties

sonar.projectKey=web_demo_pipeline
sonar.projectName=web_demo_pipeline
sonar.projectVersion=1.0
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.binaries=.
sonar.java.source=1.8
sonar.java.target=1.8
sonar.sourceEncoding=UTF-8
sonar.host.url=http://192.168.10.23:9000

2、修改Jenkinsfile,新增SonarQube代码审查阶段:

stage('SonarQube代码审查') {steps {script {scannerHome = tool 'sonar-scanner'  // 引用SonarQube Scanner工具}withSonarQubeEnv('sonarqube') {  // 引用SonarQube服务器配置sh "${scannerHome}/bin/sonar-scanner"  // 执行审查}}
}

3、提交代码并触发构建,访问http://192.168.10.23:9000,能看到web_demo_pipeline项目的审查结果(如Bug数量、重复代码率)。

八、邮件通知:构建结果实时推送

构建成功/失败后,Jenkins自动发送邮件给相关人员,需配置SMTP服务器(以QQ邮箱为例)。

8.1 安装Email Extension插件

Manage Jenkins→插件管理,安装Email Extension Template插件,重启Jenkins。

8.2 配置SMTP

1、Manage Jenkins→Configure System→Jenkins Location

  • 系统管理员邮件地址xxx@qq.com(发件人邮箱)。

2、Extended E-mail Notification

  • SMTP serversmtp.qq.com(QQ邮箱SMTP服务器)。
  • SMTP Port465(SSL端口)。
  • Credentials添加Username with password,用户名xxx@qq.com,密码为QQ邮箱授权码(需在QQ邮箱设置→账户→开启POP3/SMTP,获取授权码),描述email-auth
  • 勾选Use SSLDefault Recipients960027936@139.com(收件人邮箱)。
    3、点击Test e-mail recipient,输入收件人邮箱,显示Email was successfully sent即为成功。

8.3 测试邮件通知

修改代码并推送,Jenkins构建后会自动发送邮件,包含构建状态、日志链接等信息。


总结

本文从环境搭建到全流程自动化,详细讲解了Jenkins 2.528.1 + Docker GitLab + Tomcat的CI/CD部署方案,核心要点如下:
1、环境适配:JDK21适配Jenkins 2.528.1,Tomcat8.5适配JDK1.8,避免版本兼容性问题;GitLab用Docker版,轻量化且易部署。
2、核心流程GitLab存储代码→Jenkins拉取编译→部署到Tomcat→Webhook自动触发→SonarQube审查→邮件通知,全程自动化。
3、关键配置:凭据管理(安全存储敏感信息)、Pipeline(代码化流程)、Webhook(自动触发),是企业级部署的核心。
4、问题排查:插件源改为清华源(解决离线)、Tomcat注释Valve(允许远程访问)、Jenkins取消Project认证(Webhook触发),这些是新手常踩的坑。

通过本文的步骤,你可以搭建一套稳定的CI/CD流水线,后续可扩展Docker容器化部署、K8s编排等高级功能,进一步提升部署效率。

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

相关文章:

  • 20. Portals和Fragment
  • 企业网站管理wordpress必备插件
  • 数据结构之栈和队列-栈
  • 操作系统-线程
  • sward零基础学习,创建第一个知识库
  • 门户网站建设方式网站制作叫什么
  • step-ca 证书生成完整步骤指南
  • 从字节码生成看 Lua VM 前端与后端协同:编译器与执行器衔接逻辑
  • SQLite3语句以及FMDB数据存储初步学习
  • 抽奖网站怎么制作长沙人力资源招聘网
  • IntelliJ IDEA 远程断点调试完全指南
  • uniapp使用sqlite模块
  • Lua--数据文件和持久性
  • Spark SQL 解锁电商数据密码:窗口函数大显身手
  • 用R语言生成指定品种与对照的一元回归直线(含置信区间)
  • NVR(网络视频录像机)和视频网关的工作方式
  • 如何架设网站服务器网络搭建百度百科
  • opencv 学习: 04 通过ROI处理图片局部数据,以添加水印为例
  • 中小企业网站模板诚信网站平台建设方案
  • chatgpt崩溃了,gpt怎么了
  • [MySQL] 页与索引
  • 2025年AI生成PPT工具评测:以“全链路一体化服务能力”为尺,ChatPPT再登顶
  • 天津特定网站建设推广搜素引擎优化
  • 直播美颜sdk特效功能架构全解析:从图像处理到AI渲染的技术演进
  • 2025强网杯web wp
  • 超融合架构下,如何智能调度让每台虚拟机都“跑得更快”?
  • 【Web应用安全】SQLmap实战DVWA SQL注入(从环境搭建到爆库,完整步骤+命令解读)
  • 从零打造 Telegram 中文生态:界面汉化 + 中文Bot + @letstgbot 搜索引擎整合实战
  • QT 给Qimage数据赋值,显示异常,像素对齐的坑
  • wordpress 整站下载万江做网站