Jenkins 安装,自动化全方位详解文档

该文档围绕Jenkins展开,涵盖其简介、相关工具、CI/CD概念、安装部署及流水线项目发布流程等内容。以下是按逻辑梳理并扩展修正后的详细内容,代码与文字分离呈现,方便查看。

Jenkins 全方位详解文档

一、Jenkins 简介

Jenkins 是一款开源的 CI&CD(持续集成与持续部署)软件,同时也是提供友好操作界面的持续集成(CI)工具。它起源于 Hudson,而 Hudson 属于商用软件。Jenkins 主要用途是持续、自动地构建和测试软件项目,还能监控外部任务的运行。其采用 Java 语言编写,既可以在 Tomcat 等流行的 servlet 容器中运行,也能够独立运行。在实际应用中,Jenkins 通常会与版本管理工具(SCM)以及构建工具配合使用,以实现更高效的软件开发流程。

Jenkins 官网地址为:https://www.jenkins.io/zh

1.1 常用版本控制工具

  • SVN:全称为 Subversion,是一款开放源代码的版本控制系统。它借助高效的分支管理系统,实现了多个人共同开发同一个项目时的资源共享,最终达成集中式的项目管理,确保团队成员的开发工作能够协同进行,避免代码冲突等问题。
  • GIT:作为目前非常流行的分布式版本控制系统,它支持离线工作,每个开发者都可以在本地拥有完整的代码仓库副本。通过分支管理、提交、合并等操作,能够灵活地进行代码管理,方便团队协作和版本控制,广泛应用于各类大小型软件开发项目中。

1.2 常用构建工具

  • Maven:主要用于构建 Java 项目中的 war 包等。它基于项目对象模型(POM),通过一小段描述信息就能对项目的构建、报告和文档进行管理,是一款功能强大的软件项目管理工具。除了出色的程序构建能力,Maven 还提供了高级项目管理功能。由于其缺省构建规则具有较高的可重用性,通常只需两三行 Maven 构建脚本,就能构建简单的项目。目前,许多 Apache Jakarta 项目发文时会使用 Maven,而且在公司项目中采用 Maven 的比例也在持续增长。
  • Ant:是一个自动化工具,主要作用是将软件的编译、测试、部署等步骤串联起来,形成一个自动化的流程。它的主要用途是构建 Java 应用程序,同时也提供了众多内置任务,可用于编译、组装、测试和运行 Java 应用程序。此外,Ant 还能有效地用于构建非 Java 应用程序,例如 C 或 C++应用程序,具有较强的通用性。
  • Gradle:基于 Apache Ant 和 Apache Maven 的概念开发而成,是一款先进的项目自动化构建工具。它承担着工程管理的重要职责,能够帮助开发者完成项目依赖管理、打包、部署、发布以及各种渠道的差异管理等工作。Gradle 结合了 Ant 和 Maven 的优点,具有灵活性高、构建效率高的特点,在现代软件开发中应用越来越广泛。

1.3 Jenkins 工作原理

Jenkins 的工作流程始于从 SVN 或 Git 等版本控制系统中,将源代码拷贝一份到本地环境。接着,根据用户预先设置好的 build(构建)脚本,对项目进行构建操作。在整个 Jenkins 系统中,build 脚本起着关键作用,它清晰地告知 Jenkins 在一次集成过程中需要执行的各项具体任务,如编译代码、运行测试用例等,确保集成过程的自动化和规范化。

1.4 Jenkins 特点

  1. 易安装:Jenkins 的安装过程十分简便,仅需一个 Jenkins.war 文件。用户从官网下载该文件后,可直接运行,无需进行额外的复杂安装步骤,也不需要安装数据库来支持其运行,极大地降低了安装门槛。
  2. 易配置:提供了友好的图形用户界面(GUI)配置界面,用户无需具备深厚的技术功底,通过直观的操作就能完成 Jenkins 的各项配置,如连接版本控制系统、设置构建脚本等,方便用户快速上手使用。
  3. 变更支持:Jenkins 具备从代码仓库(如 SVN、Git)中获取代码更新列表的能力,并能将这些更新信息输出到编译输出信息中。这样,开发者可以清晰地了解每次代码集成所涉及的变更内容,便于追踪和管理代码修改。
  4. 支持永久链接:用户通过 Web 方式访问 Jenkins,而 Jenkins 中 Web 页面的链接地址均为永久链接。这些永久链接可以直接在各种文档中使用,方便用户随时访问相关页面,查看项目构建状态、测试报告等信息。
  5. 集成 E-Mail/RSS/IM:当 Jenkins 完成一次集成操作后,能够通过 E-Mail、RSS 或 IM 等工具,将集成结果实时发送给相关人员。由于构建一次集成需要花费一定时间,有了这个功能,开发者在等待结果的过程中可以处理其他工作,提高工作效率。
  6. JUnit/TestNG 测试报告:具备以图表等直观形式提供详细测试报表的功能。通过这些测试报表,用户可以清晰地了解测试用例的执行情况,包括测试通过率、失败原因等信息,为项目质量评估提供有力支持。
  7. 支持分布式构建:Jenkins 能够将集成构建等工作分发到多台计算机中协同完成。这种分布式构建方式可以充分利用多台计算机的资源,提高构建效率,尤其适用于大型项目的构建,有效缩短构建时间。
  8. 文件指纹信息:Jenkins 会对构建集成过程中产生的 jars 文件等进行记录,保存这些文件的指纹信息,同时还会记录集成构建所使用的版本。这有助于追踪文件的来源和版本变迁,方便进行版本回溯和问题排查。
  9. 支持第三方插件:Jenkins 拥有强大的插件生态系统,支持众多第三方插件。这些插件能够为 Jenkins 扩展各种功能,满足不同项目的个性化需求,使得 Jenkins 的功能变得越来越强大,适用范围也越来越广泛。

二、CI/CD 概念解析

2.1 CI(持续集成)

2.1.1 简介

CI 即持续集成(Continuous Integration),是一种现代化的软件开发实践。其核心思想是,当开发人员提交新代码后,系统会立即自动对代码进行构建和(单元)测试操作。通过测试结果,开发团队能够快速判断新提交的代码与原有代码是否能够正确地集成在一起,及时发现并解决代码集成过程中出现的问题,保障代码质量。

以一个代码存储在 GitLab 的 Git 仓库中的应用程序为例,开发人员每天会多次将代码更改推送到仓库。针对每次向仓库的推送操作,用户可以创建一组自动化脚本,用于对应用程序进行构建和测试。这种做法就是持续集成,它能够对提交给应用程序(甚至是开发分支)的每项更改,自动连续地进行构建和测试,确保所引入的更改符合应用程序预先设定的所有测试标准、代码准则和合规性要求。

2.1.2 CI 工作模式

(此处原文档提及图片,现以文字描述工作流程)CI 工作模式始于开发人员将代码通过 CHECK-IN 操作提交到代码仓库(REPOSITORY)。随后,CI 服务器(CI SERVER)监测到代码仓库的变更,从仓库中获取源代码(SOURCE)并进行构建(BUILD)操作。构建完成后,对项目进行测试(TEST),最后将测试结果(RESULT)反馈给相关人员,整个流程形成一个自动化的闭环。

2.1.3 持续集成的优势
  1. 易于定位错误:在持续集成过程中,每一次代码集成都会执行相关的测试工作。由于持续集成具有频繁集成的特点,这就天然地将复杂的代码逻辑分割成了多个小块。当测试过程中出现错误时,开发者能够更轻松地定位错误所在的代码片段,降低错误排查的难度和时间成本。
  2. 易于控制开发流程:持续集成要求开发人员更细致地进行工作提交,每次提交的代码量相对较少且目标明确。这种方式使得管理者能够更清晰地判断当前的项目工作进度,为开发流程的规划和调整提供了准确、有效的参考依据。同时,也为开发人员节省了汇报工作的时间,让他们能够将更多精力投入到代码开发中。

2.2 CD(持续交付与持续部署)

2.2.1 持续交付(Continuous Delivery)
  • 简介:持续交付是在持续集成(CI)的基础上发展而来的。在持续集成完成单元测试的基础上,持续交付会将集成后的代码部署到更贴近真实运行环境的类生产环境(如 Staging 环境)中。在这个环境中,可以进行更多更全面的测试,如连接数据库进行功能测试等。如果代码在类生产环境中经过测试没有发现问题,开发团队可以根据实际情况,手动将代码部署到生产环境中,为软件的发布做好准备。
  • CD(持续交付)工作模式:(原文档提及图片,文字描述流程)开发人员进行代码 CHECK-IN 操作,代码进入代码仓库(REPOITOY)。CI 服务器(CI EER)获取源代码(SORCE)并执行构建(BUILD)和测试(TEST)操作。测试通过后,将代码部署到类生产环境(STGING),在该环境中进一步测试(TEST),并将各环节的结果(RESULT)反馈。最终,通过手动(MANAL)操作,根据实际需求决定是否将代码部署到生产环境,整个过程强调代码的可交付性和测试的全面性。
2.2.2 持续部署(Continuous Deployment)
  • 简介:持续部署是持续集成(CI)和持续交付(CD)的进一步延伸。它在持续交付的基础上,实现了将交付的应用程序自动部署到生产环境的功能。通过持续部署,新的功能和代码修改能够快速、自动地应用到生产环境中,开发团队可以及时收到用户的使用反馈,根据反馈进行产品优化。同时,由于每次部署的代码变更相对较小,也降低了部署过程中的风险,减少了因大规模部署可能带来的问题。持续部署的目标是确保代码在任何时刻都处于可部署的状态,并能够自动、平稳地进入生产环境。
  • 工作模式:(原文档提及图片,文字描述流程)开发人员 CHECK-IN 代码到代码仓库(REPOSITORY),CI 服务器(CI SERVER)获取源代码(SOURCE)并执行构建(BUILD)和测试(TEST),将测试结果(RESULT)反馈。之后,代码会被部署到类生产环境(STAGING)进行再次测试(TEST),获取测试结果(RESULT)。若所有测试均通过,系统会自动(AUTO)将代码部署到生产环境(PRODUCTION),完成整个持续部署流程,实现代码从开发到生产的全自动化交付。

三、使用 Tomcat 容器安装 Jenkins

3.1 部署 Tomcat

3.1.1 下载 Tomcat

Tomcat 下载地址为:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat。建议下载 9.0 版本,经实践验证,10 版本在部署过程中存在 bug,无法正常实现 Jenkins 的部署,为避免不必要的麻烦,推荐优先选择 9.0 版本。

3.1.2 卸载 CentOS7 中自带的 JDK

在安装 Tomcat 之前,需要先卸载 CentOS7 系统中自带的 JDK,避免版本冲突。执行以下命令:

bash 复制代码
# 查看系统中已安装的 Java 相关包
rpm -qa | grep java
# 卸载指定的 JDK 包,根据实际查询结果修改包名
rpm -e java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64 --nodeps
rpm -e java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64 --nodeps
3.1.3 安装 JDK

卸载完成自带 JDK 后,安装适合的 JDK 版本,此处以 Java 11 为例,执行以下命令:

bash 复制代码
[root@server ~]# yum -y install java-11-openjdk
3.1.4 解压并部署 Tomcat
  1. 执行解压命令,将下载的 Tomcat 压缩包解压到指定目录/usr/local/
bash 复制代码
[root@server ~]# tar -xzf apache-tomcat-9.0.67.tar.gz -C /usr/local/
  1. 为了方便后续操作,创建 Tomcat 的软链接:
bash 复制代码
[root@server local]# ln -s apache-tomcat-9.0.67/ tomcat
3.1.5 启动 Tomcat 并测试访问
  1. 进入 Tomcat 目录并启动服务:
bash 复制代码
[root@server local]# cd tomcat/
[root@server tomcat]# bin/startup.sh
  1. 启动后,在浏览器中输入192.168.100.10:8080(将 IP 地址替换为实际的服务器 IP),如果能够看到 Tomcat 的首页,说明 Tomcat 部署成功并正常运行。Tomcat 首页通常会显示"Apache Tomcat/9.0.67"等版本信息,以及"Server Status""Manager App""Host Manager"等功能入口。

3.2 部署 Jenkins

3.2.1 下载 Jenkins 到指定目录
  1. 首先进入 Tomcat 的 webapps 目录:
bash 复制代码
[root@server webapps]# pwd
/usr/local/tomcat/webapps
  1. 执行以下命令下载 Jenkins 的 war 包,下载后系统会自动解压:
bash 复制代码
[root@server webapps]# wget http://mirrors.jenkins.io/war-stable/2.346.3/jenkins.war
  1. 下载完成后,查看 webapps 目录下的文件,会发现新增了jenkins目录和jenkins.war文件,说明下载和解压成功:
bash 复制代码
[root@server webapps]# ls
docs  examples  host-manager  jenkins  jenkins.war  manager  ROOT
3.2.2 重启 Tomcat 服务

为了使 Jenkins 能够正常加载,需要重启 Tomcat 服务,执行以下命令:

bash 复制代码
[root@server tomcat]# bin/catalina.sh stop
[root@server tomcat]# bin/catalina.sh start
3.2.3 浏览器访问 Jenkins 并解锁
  1. 在浏览器中输入服务器IP:8080/jenkins(如192.168.100.10:8080/jenkins),进入 Jenkins 的解锁页面。页面会提示"为了确保管理员安全地安装 Jenkins,密码已写入到日志中,该文件在服务器上:/root/.jenkins/secrets/initialAdminPassword"。
  2. 在服务器上执行以下命令,查看并复制初始管理员密码:
bash 复制代码
[root@server tomcat]# cat /root/.jenkins/secrets/initialAdminPassword
# 示例输出:b17a0e359ce14220bbfbab934ccc29dd
  1. 将复制的密码粘贴到 Jenkins 解锁页面的"管理员密码"输入框中,点击"继续"按钮,进入后续的配置步骤。

3.3 自定义 Jenkins

3.3.1 选择插件安装方式

进入"自定义 Jenkins"页面后,有两种插件安装方式可供选择:"安装推荐的插件"和"选择插件来安装"。为了根据实际需求灵活安装插件,避免不必要的插件占用资源,此处选择"选择插件来安装"选项。

3.3.2 选择暂不安装插件

在插件选择页面,点击"无"选项,暂不安装任何插件,后续根据实际需要再通过插件管理功能安装所需插件,然后点击"安装"按钮。

3.3.3 创建管理员用户
  1. 插件安装完成后,进入"创建第一个管理员用户"页面,填写相关信息,例如:
    • Username(用户名):admin
    • Password(密码):admin(实际使用中建议设置更复杂的密码,保障账户安全)
    • Confirm password(确认密码):admin
    • Full name(全名):chenyu
  2. 填写完成后,点击"保存并完成"按钮,然后选择"使用 admin 账户继续"。
3.3.4 替换 Jenkins 国内源
  1. 登录 Jenkins 后,默认是英文界面,且插件源为国外地址,下载插件速度较慢。点击页面左侧的"Manage Jenkins"(系统管理)选项,进入系统管理页面。
  2. 在系统管理页面中,点击"Manage Plugins"(插件管理)选项,进入插件管理页面。
  3. 在插件管理页面中,点击"Advanced"(高级)选项卡,找到"Update Site"(更新站点)部分。
  4. 将原有的国外插件源地址"https://updates.jenkins.io/update-center.json"替换为国内插件源地址,例如:
  5. 替换完成后,点击"Submit"(提交)按钮,保存设置。
3.3.5 安装简体中文插件
  1. 在插件管理页面的"Available Plugins"(可选插件)选项卡中,在搜索框中输入"Localization: Chinese (Simplified)",找到简体中文语言包插件。
  2. 勾选该插件,同时可以根据需要勾选其依赖插件,如"Localization Support""Locale"等,然后点击"Download now and install after restart"(立即下载并在重启后安装)按钮。
  3. 在插件安装页面,可以选择"Restart Jenkins when installation is complete and no jobs are running"(安装完成且无任务运行时重启 Jenkins)选项,以便插件生效。等待插件安装完成后,Jenkins 会自动重启,重启后界面将变为简体中文。
3.3.6 安装版本控制和构建相关插件
  1. Jenkins 重启完成后,再次进入插件管理页面的"可选插件"选项卡,搜索并安装以下插件:
  • Git:用于连接 Git 版本控制系统。
  • GitHub:用于与 GitHub 仓库进行集成。
  • GitLab:用于与 GitLab 仓库进行集成。
  • Gitee:用于与 Gitee(码云)仓库进行集成。
  1. 勾选所需插件后,点击"Download now and install after restart"按钮,安装完成后 Jenkins 会自动重启,确保插件正常加载。
3.3.7 Jenkins 界面功能介绍
  1. Dashboard(仪表盘):登录 Jenkins 后的默认页面,显示 Jenkins 中的任务列表、构建历史、系统状态等信息,是 Jenkins 的核心操作界面。
  2. New Item(新建任务):用于创建新的 Jenkins 任务,如自由风格项目、流水线项目等。
  3. People(用户列表):显示 Jenkins 中的所有用户信息,管理员可以在此管理用户账户。
  4. Build History(构建历史):记录所有任务的构建记录,包括构建编号、构建时间、构建状态等信息,方便查看和追溯构建过程。
  5. Manage Jenkins(系统管理):包含 Jenkins 的各项系统配置、插件管理、节点管理、安全设置等功能,是 Jenkins 系统配置的核心入口。
  6. My Views(我的视图):用户可以自定义视图,根据自己的需求筛选和展示相关的任务,提高工作效率。
  7. Build Queue(构建队列):显示等待执行的构建任务,用户可以查看任务的等待状态和优先级。
  8. Build Executor Status(构建执行器状态):显示 Jenkins 中构建执行器的运行状态,如空闲(Idle)、忙碌等,了解系统的资源使用情况。
3.3.8 任务管理
  1. 创建任务:点击"New Item"(新建任务),输入任务名称(如"DEMO"),选择任务类型(如"构建一个自由风格的软件项目"),然后点击"确定"按钮,进入任务配置页面。
  2. 任务配置 :在任务配置页面,可以进行以下配置:
    • General(通用):设置任务的描述信息、丢弃旧构建策略、是否允许并发构建等。
    • 源码管理(Source Code Management):选择使用的版本控制系统(如 Git、SVN),并配置仓库地址、认证信息、分支等。
    • 构建触发器(Build Triggers):设置触发任务构建的条件,如定时构建、轮询 SCM、触发远程构建、其他工程构建后触发等。
    • 构建(Build):添加构建步骤,如执行 Shell 脚本、调用 Maven 构建、调用 Ant 构建等,定义任务的构建流程。
    • 构建后操作(Post-build Actions):设置构建完成后的操作,如归档构建产物、发送邮件通知、部署到远程服务器等。
  3. 保存任务:配置完成后,点击"保存"按钮,任务创建完成,在仪表盘页面可以看到创建的任务。
  4. 运行任务:在仪表盘页面,找到创建的任务,点击"Build Now"(立即构建)按钮,触发任务构建。可以在"Build History"(构建历史)中查看构建进度和结果,点击构建编号可以查看构建日志,了解构建过程中的详细信息。
3.3.9 全局工具配置(以 JDK 为例)
  1. 点击"Manage Jenkins"(系统管理),然后点击"Global Tool Configuration"(全局工具配置)选项,进入全局工具配置页面。
  2. 在全局工具配置页面,找到"JDK"选项,点击"Add JDK"(新增 JDK)按钮。
  3. 在新增 JDK 配置页面,取消勾选"自动安装"(如果需要手动指定 JDK 安装路径),或者勾选"自动安装"并选择从 Oracle 等官方网站下载 JDK(需要 Oracle 账号)。
    • 别名(Name):为 JDK 配置设置一个别名,如"jdk11",方便后续引用。
    • JDK 安装目录(JAVA_HOME):如果手动指定,填写 JDK 在服务器上的安装目录,如"/usr/lib/jvm/java-11-openjdk-11.0.16.0.8-1.el7_9.x86_64"(实际路径根据系统安装情况而定)。
  4. 配置完成后,点击"Save"(保存)按钮,完成 JDK 的全局配置。后续在创建任务时,可以选择已配置的 JDK 版本进行项目构建。
3.3.10 节点管理

Jenkins 支持分布式构建,可以将构建任务分发到多个节点(Agent)上执行,提高构建效率。节点管理主要包括添加节点、配置节点、监控节点状态等操作:

  1. 添加节点:点击"Manage Jenkins"(系统管理),然后点击"Manage Nodes and Clouds"(管理节点和云)选项,进入节点管理页面。点击"New Node"(新建节点)按钮,输入节点名称,选择节点类型(如"Permanent Agent"(永久节点)),点击"OK"按钮。
  2. 配置节点 :在节点配置页面,设置以下关键信息:
    • 远程工作目录(Remote root directory):节点上 Jenkins 工作目录的路径,如"/var/jenkins_agent"。
    • 标签(Labels):为节点设置标签,用于在任务配置中指定任务在特定标签的节点上执行。
    • 启动方式(Launch method):选择节点的启动方式,如"Launch agent via SSH"(通过 SSH 启动代理)、"Launch agent from browser"(从浏览器启动代理)等。如果选择通过 SSH 启动,需要配置节点的 SSH 连接信息,包括主机名、端口、用户名、认证方式(密码或密钥)等。
    • 工具位置(Tool Locations):如果节点上的工具(如 JDK、Maven、Git 等)安装路径与主节点不同,可以在此处指定节点上工具的安装路径。
  3. 保存节点配置:配置完成后,点击"Save"(保存)按钮,完成节点添加。
  4. 监控节点状态:在节点管理页面,可以查看所有节点的状态,如"Online"(在线)、"Offline"(离线)等。点击节点名称,可以查看节点的详细信息,包括节点上的构建执行器状态、构建历史等。如果节点处于离线状态,可以查看离线原因并进行排查和修复。

四、Jenkins 流水线项目发布流程

4.1 环境准备

本次流水线项目发布涉及两台主机,具体信息如下表所示:

主机名称 IP 地址 需要的应用服务 工具包 系统
Node1 192.168.100.10 Tomcat、Jenkins Git、Maven RHEL9
Node2 192.168.100.20 Tomcat centos7(运维1)

4.2 前期准备操作

4.2.1 关闭防火墙和 SELinux

在 Node1 和 Node2 两台主机上分别执行以下命令,关闭防火墙和 SELinux,避免其影响服务的部署和通信:

  1. 关闭防火墙并设置开机不启动:
bash 复制代码
# 关闭防火墙
systemctl stop firewalld
# 设置防火墙开机不启动
systemctl disable firewalld
  1. 临时关闭 SELinux(立即生效,重启后失效):
bash 复制代码
setenforce 0
  1. 永久关闭 SELinux(需要重启系统生效):
    编辑/etc/selinux/config文件,将SELINUX=enforcing修改为SELINUX=disabled,然后保存文件。
4.2.2 在 Node1 上部署 Tomcat 和 Jenkins(补充说明)

前面已经详细介绍了使用 Tomcat 容器安装 Jenkins 的步骤,此处按照该步骤在 Node1 上完成 Tomcat 和 Jenkins 的部署。在登录 Jenkins web 界面时,选择"安装推荐的插件",以便获取更全面的基础功能支持。部署完成后,按照之前的方法设置 Jenkins 国内源,提高插件下载速度。

4.2.3 在 Node1 上生成密钥并传至 Node2

为了实现 Node1 与 Node2 之间的无密码 SSH 登录,方便后续通过 SCP 命令传输文件和执行远程命令,需要在 Node1 上生成 SSH 密钥对,并将公钥传输到 Node2 上:

  1. 在 Node1 上执行以下命令生成 SSH 密钥对(一路按回车键默认生成即可):
bash 复制代码
[root@node1 ~]# ssh-keygen
  1. 执行以下命令将 Node1 的公钥传输到 Node2 的 root 用户下(将192.168.100.20替换为 Node2 的实际 IP 地址):
bash 复制代码
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.20

执行命令后,根据提示输入 Node2 的 root 密码,完成公钥传输。之后,在 Node1 上通过 SSH 连接 Node2 或使用 SCP 传输文件时,就无需再输入密码。

4.2.4 在 Node2 上部署 Tomcat
  1. 首先在 Node2 上安装 JDK,执行以下命令:
bash 复制代码
[root@node2 ~]# yum -y install java-11-openjdk
  1. 将下载的 Tomcat 9.0 版本压缩包上传到 Node2 服务器(可使用 SCP 命令从本地或其他服务器传输),然后执行以下命令解压到/usr/local/目录:
bash 复制代码
[root@node2 ~]# tar -xzf apache-tomcat-9.0.67.tar.gz -C /usr/local/
  1. 进入/usr/local/目录,创建 Tomcat 的软链接:
bash 复制代码
[root@node2 ~]# cd /usr/local/
[root@node2 local]# ln -s apache-tomcat-9.0.67/ tomcat
  1. 查看 Tomcat 目录下的文件,确认部署成功:
bash 复制代码
[root@node2 local]# ls tomcat/
# 示例输出:bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  webapps  work

4.3 在 Node1 中配置 Jenkins 流水线项目

4.3.1 安装必要工具

在 Node1 所在服务器上,执行以下命令安装 Git 和 Maven,用于后续从代码仓库拉取代码和构建项目:

bash 复制代码
[root@node1 ~]# yum -y install git 
[root@node1 ~]# yum search maven
[root@node1 ~]# yum  -y  install  maven-openjdk11.noarch
4.3.2 准备代码仓库地址

本次流水线项目发布使用的示例代码仓库地址如下(可根据实际项目情况替换为自己的代码仓库地址):

4.3.3 流水线项目发布方法一:使用脚本方式
4.3.3.1 创建流水线任务
  1. 登录 Jenkins 后,点击页面左侧的"New Item"(新建任务)选项,进入新建任务页面。
  2. 输入任务名称,例如"test",在任务类型中选择"Pipeline"(流水线),然后点击"OK"按钮,进入流水线任务配置页面。
4.3.3.2 编写流水线脚本(拉取代码阶段)
  1. 在流水线任务配置页面的"Pipeline"(流水线)部分,选择"Pipeline script"(流水线脚本)选项,在脚本编辑框中输入以下脚本,实现从代码仓库拉取代码的功能:
groovy 复制代码
pipeline { 
    agent any

    stages { 
        stage('pull code') { 
            steps { 
                // 此处使用示例代码仓库地址,可根据实际情况替换
                git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
                // 也可使用其他仓库地址,如 git 'http://github.com/lizhenliang/tomcat-java-demo.git'
            }
        }
    }
}
  1. 编写完成后,点击"Save"(保存)按钮,完成任务配置。
4.3.3.3 执行构建并查看结果
  1. 回到 Jenkins 仪表盘页面,找到创建的"test"流水线任务,点击"Build Now"(立即构建)按钮,触发任务构建。
  2. 构建过程中,任务状态会显示为蓝色(表示正在构建)。可以点击构建编号进入构建详情页面,查看构建进度。
  3. 当构建完成后,如果构建成功,任务状态会变为绿色。点击"Stage View"(阶段视图)可以查看各阶段的执行情况,如"pull code"阶段的执行时间等。
  4. 点击"Console Output"(控制台输出)可以查看详细的构建日志,了解代码拉取的具体过程,包括代码仓库的克隆、分支切换等操作。从日志中可以看到代码被拉取到了 Jenkins 的工作目录下,默认工作目录为/root/.jenkins/workspace/test
4.3.3.4 完善流水线脚本(添加打包阶段)
  1. 进入"test"流水线任务的配置页面,在流水线脚本编辑框中,添加打包阶段的脚本,完整脚本如下:
groovy 复制代码
pipeline { 
    agent any

    stages { 
        stage('pull code') { 
            steps { 
                // 拉取代码,使用实际的代码仓库地址
                git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
            }
        }

        stage('package') { 
            steps { 
                // 执行 Maven 命令,清理项目并打包
                sh """ 
                    mvn clean
                    mvn package
                """
            }
        }
    }
}
  1. 点击"Save"按钮保存配置,然后再次点击"Build Now"按钮执行构建。
  2. 由于第一次执行打包操作需要下载项目依赖的各种 jar 包,因此构建时间会相对较长。构建完成后,查看构建日志,可以了解 Maven 清理和打包的详细过程。
  3. 打包完成后,生成的项目包(通常为 war 包)会存放在项目的target目录下。通过构建日志可以找到具体的目录路径,例如/root/.jenkins/workspace/test/target/,在该目录下会有类似ly-simple-tomcat-0.0.1-SNAPSHOT.war的文件(具体文件名根据项目配置而定)。
4.3.3.5 完善流水线脚本(添加部署阶段)
  1. 再次进入"test"流水线任务的配置页面,在流水线脚本中添加部署阶段的脚本,实现将打包后的 war 包传输到 Node2 的 Tomcat 服务器,并重启 Tomcat 服务的功能,完整脚本如下:
groovy 复制代码
pipeline { 
    agent any

    stages { 
        stage('pull code') { 
            steps { 
                // 拉取代码
                git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
            }
        }

        stage('package') { 
            steps { 
                // 清理并打包项目
                sh """ 
                    mvn clean
                    mvn package
                """
            }
        }

        stage('deploy') { 
            steps { 
                // 将打包后的 war 包传输到 Node2 的 Tomcat webapps 目录,并重启 Tomcat
                sh """                
                    scp target/ly-simple-tomcat-0.0.1-SNAPSHOT.war root@192.168.100.20:/usr/local/tomcat/webapps/
                    ssh root@192.168.100.20 '/usr/local/tomcat/bin/catalina.sh stop && /usr/local/tomcat/bin/catalina.sh start'
                """
            }
        }
    }
}

注意:脚本中的ly-simple-tomcat-0.0.1-SNAPSHOT.war为打包生成的 war 包文件名,需根据实际项目打包结果修改;192.168.100.20为 Node2 的 IP 地址,/usr/local/tomcat/webapps/为 Node2 上 Tomcat 的 webapps 目录路径,需根据实际环境调整。

  1. 保存配置后,点击"Build Now"按钮执行构建。构建完成后,查看构建日志,确认 war 包已成功传输到 Node2,并且 Tomcat 服务已重启。
4.3.3.6 验证部署结果
  1. 在 Node2 服务器上,执行以下命令进入 Tomcat 的 webapps 目录,查看 war 包是否已成功传输:
bash 复制代码
[root@node2 ~]# cd /usr/local/tomcat/webapps/
[root@node2 webapps]# ls
# 示例输出:docs  examples  host-manager  ly-simple-tomcat-0.0.1-SNAPSHOT  ly-simple-tomcat-0.0.1-SNAPSHOT.war  manager  ROOT

可以看到,ly-simple-tomcat-0.0.1-SNAPSHOT.war文件已存在,并且 Tomcat 已自动解压该 war 包,生成了ly-simple-tomcat-0.0.1-SNAPSHOT目录。

  1. 在浏览器中输入Node2的IP地址:8080/项目上下文路径(如192.168.100.20:8080/ly-simple-tomcat-0.0.1-SNAPSHOT/),如果能够成功访问项目页面,说明使用脚本方式的 Jenkins 流水线项目部署成功。
4.3.4 流水线项目发布方法二:使用文本参数方式
4.3.4.1 清理 Node2 上的旧项目文件

为了确保实验效果,首先在 Node2 服务器上执行以下命令,删除之前部署的项目文件:

bash 复制代码
[root@node2 ~]# cd /usr/local/tomcat/webapps/
[root@node2 webapps]# rm -rf ly-simple-tomcat-0.0.1-SNAPSHOT*
4.3.4.2 创建新的流水线任务
  1. 点击 Jenkins 左侧的"New Item"选项,输入任务名称,例如"cy",选择"Pipeline"(流水线)任务类型,点击"OK"按钮。
4.3.4.3 添加文本参数
  1. 在流水线任务配置页面的"General"(通用)部分,勾选"This project is parameterized"(此项目已参数化)选项,然后点击"Add Parameter"(添加参数)按钮,选择相应的参数类型,添加以下参数:
    • Multi-line String Parameter(多行字符串参数)
    • String Parameter(字符串参数)
      • Name(参数名):maven_package
      • Default Value(默认值):java-tomcat-maven-example(打包生成的项目包名称,不包含后缀.war,根据实际项目修改)(在这个目录下/root/.jenkins/workspace/ycy/target)
      • Description(描述):项目打包后的名称(可选)
    • String Parameter(字符串参数)
      • Name(参数名):tomcat_path
      • Default Value(默认值):/usr/local/tomcat(Node2 上 Tomcat 的安装目录,根据实际环境修改)
      • Description(描述):Tomcat 安装路径(可选)
    • Multi-line String Parameter(多行字符串参数)
      • Name(参数名):client_ip
      • Default Value(默认值):192.168.100.20(Node2 的 IP 地址,根据实际环境修改)
  2. 添加完成后,参数列表会显示在页面上,可根据需要调整参数顺序。
4.3.4.4 编写流水线脚本(使用参数)
  1. 在"Pipeline"部分,选择"Pipeline script"选项,在脚本编辑框中输入以下脚本,脚本中使用之前定义的参数:
groovy 复制代码
pipeline { 
    agent any

    stages { 
        stage('pull code') { 
            steps { 
                // 使用 git_url 参数指定代码仓库地址
                git "${git_url}"
            }
        }

        stage('package') { 
            steps { 
                // 执行 Maven 清理和打包命令
                sh """ 
                    mvn clean
                    mvn package
                """
            }
        }

        stage('deploy') { 
            steps { 
                // 使用参数指定 war 包名称、客户端 IP 和 Tomcat 路径,执行文件传输和 Tomcat 重启命令
                sh """                
                    scp target/${maven_package}.war root@${client_ip}:${tomcat_path}/webapps/
                    ssh root@${client_ip} '${tomcat_path}/bin/catalina.sh stop && ${tomcat_path}/bin/catalina.sh start'
                """
            }
        }
    }
}
  1. 脚本编写完成后,点击"Save"按钮保存配置。
4.3.4.5 执行带参数构建
  1. 回到 Jenkins 仪表盘页面,找到"cy"流水线任务,此时任务名称下方会显示"This build requires parameters"(此构建需要参数)。点击"Build with Parameters"(带参数构建)按钮,进入参数配置页面。
  2. 在参数配置页面,可以看到之前添加的所有参数及其默认值。如果需要修改参数值,可直接在输入框中修改,例如更换代码仓库地址、项目包名称等。确认参数值无误后,点击"Build"(构建)按钮,触发任务构建。
4.3.4.6 验证部署结果
  1. 构建完成后,查看构建日志,确认代码拉取、项目打包、文件传输和 Tomcat 重启等步骤均成功执行。
  2. 在 Node2 服务器上,进入 Tomcat 的 webapps 目录,查看是否存在新传输的 war 包及其解压目录。
  3. 在浏览器中输入Node2的IP地址:8080/项目上下文路径(如192.168.100.20:8080/java-tomcat-maven-example),如果能够成功访问项目页面,说明使用文本参数方式的 Jenkins 流水线项目部署成功。通过文本参数方式,用户可以在每次构建时灵活修改相关参数,适应不同的项目部署需求,提高了流水线的通用性和灵活性。

为了方便你后续查阅和使用这份 Jenkins 详细文档,我可以帮你整理一份Jenkins 核心内容速查手册,手册会提炼文档中的关键步骤、命令和配置信息,以简洁明了的形式呈现,你需要吗?

相关推荐
半梦半醒*3 小时前
Jenkins流水线项目发布
运维·ci/cd·tomcat·jenkins·maven·运维开发
塔能物联运维3 小时前
物联网运维中的自适应网络拓扑重构技术
运维·物联网·重构
TG_yunshuguoji4 小时前
亚马逊云渠道商:如何配置 AWS 自动化快照?
自动化·云计算·aws
weixin_307779134 小时前
AWS云上Quickwit部署指南与成本分析
服务器·自动化·云计算·运维开发·aws
路由侠内网穿透4 小时前
本地部署开源数据分析平台 Elastic Stack 并实现外部访问( Windows 版本)
运维·服务器·网络·windows·开源·jenkins
王道长服务器 | 亚马逊云5 小时前
AWS CloudFormation —— 自动化部署的“云中脚本大师”
运维·服务器·网络·自动化·云计算·aws
Bruce_Liuxiaowei5 小时前
解决Kali虚拟机中VMnet1(仅主机模式)网卡无法获取IP地址的问题
运维·网络·网络协议·tcp/ip
key_Go5 小时前
12.docker swarm
运维·docker·容器·docker swarm
馨谙5 小时前
SSH密钥认证:从密码到密钥的安全升级指南
运维·安全·ssh