Jenkins 持续集成与部署指南

Jenkins 持续集成与部署指南

1. 简介

Jenkins 是一个开源 CI&CD 软件,提供友好操作界面的持续集成(CI)工具。

  • 起源:起源于 Hudson(Hudson 是商用的)
  • 主要功能:持续、自动地构建/测试软件项目、监控外部任务的运行
  • 技术特性:用 Java 语言编写,可在 Tomcat 等流行的 servlet 容器中运行,也可独立运行
  • 集成能力:通常与版本管理工具(SCM)、构建工具结合使用

常用工具

版本控制工具

  • SVN
  • GIT

构建工具

  • Maven
  • Ant
  • Gradle

官网https://www.jenkins.io/zh

1.1 SVN 介绍

SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

1.2 Maven 介绍

Maven 就是构建 Java 里面的一个 war 包的软件项目管理工具。

  • 项目对象模型(POM):可以通过一小段描述信息来管理项目的构建、报告和文档
  • 特色功能:除了以程序构建能力为特色之外,还提供高级项目管理工具
  • 优势:由于 Maven 的缺省构建规则有较高的可重用性,常常用两三行 Maven 构建脚本就可以构建简单的项目
  • 应用广泛:许多 Apache Jakarta 项目发文时使用 Maven,公司项目采用 Maven 的比例在持续增长

1.3 Ant 介绍

Ant 是一个将软件编译、测试、部署等步骤联系在一起的自动化工具。

  • 主要用途:构建 Java 应用程序
  • 内置任务:提供了许多内置的任务,可以编译、组装、测试和运行 Java 应用程序
  • 扩展应用:还可以有效地用于构建非 Java 应用程序,例如 C 或 C++ 应用程序

1.4 Gradle 介绍

Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具。

  • 功能:工程的管理,帮我们做了依赖、打包、部署、发布、各种渠道的差异管理等工作

1.5 Jenkins 工作原理

将源代码从 SVN/Git 版本控制系统中拷贝一份到本地,然后根据设置的脚本进行 build(构建)。整个系统的关键就是 build 脚本,build 脚本告诉 Jenkins 在一次集成中需要执行的任务。

1.6 Jenkins 特点

  1. 易安装:仅仅一个 Jenkins.war,从官网下载该文件后,直接运行,无需额外的安装,更无需安装数据库
  2. 易配置:提供友好的 GUI 配置界面
  3. 变更支持:Jenkins 能从代码仓库(SVN/Git)中获取并产生代码更新列表,并输出到编译输出信息中
  4. 支持永久链接:用户是通过 Web 来访问 Jenkins 的,而这些 Web 页面的链接地址都是永久链接地址
  5. 集成 E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时收取集成结果
  6. JUnit/TestNG 测试报告:用以图表等形式提供详细的测试报表功能
  7. 支持分布式构建:Jenkins 可以把集成构建等工作分发到多台计算机中完成
  8. 文件指纹信息:Jenkins 会保存构建集成所产生的 jars 文件、集成构建使用了哪个版本
  9. 支持第三方插件:Jenkins 支持第三方插件,这使得 Jenkins 功能变得越来越强大

2. CI/CD 概念解析

2.1 CI 持续集成

简介

CI 持续集成(全称:Continuous Integration),中文意思是持续集成,是一种软件开发实践。

持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试;根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

工作流程示例

假设一个应用程序,其代码存储在 GitLab 的 Git 仓库中。开发人员每天都要多次推送代码更改。对于每次向仓库的推送,可以创建一组脚本来自动构建和测试应用程序,从而减少向应用程序引入错误的机会。

CI 工作模式
持续集成的优势

(1)易于定位错误

每一次的代码集成都需要执行相关的测试工作,持续集成频繁的集成次数天然的将复杂的代码逻辑切割为了小块,使得错误更容易被定位。

(2)易于控制开发流程

更为细致的工作提交意味着更容易判断当前的工作进度,为管理者规划开发流程提供有效参考。

2.2 CD 持续交付

简介

CD 持续交付(全称:Continuous Delivery),是在 CI 持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。

流程:完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中进行更多测试,如果代码没有问题,可以继续手动部署到生产环境。

CD 工作模式

2.3 CD 持续部署

简介

CD 持续部署(全称:Continuous Deployment),是 CI 持续集成、CD 持续交付的延伸。

  • 功能:自动将交付的应用部署到生产环境
  • 优势:能及时收到用户反馈,降低部署风险
  • 目标:代码在任何时刻都是可部署的,并可自动进入到生产环境
工作模式

3. 使用 Tomcat 容器安装 Jenkins

3.1 部署 Tomcat

下载 Tomcat

https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat

(此时下载 9.0 版本的,10 版本部署有 bug,无法实现)

环境准备

bash 复制代码
# 卸载 CentOS 7 中自带的 JDK
rpm -qa | grep java
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

# 安装 JDK
yum -y install java-11-openjdk

# 将Tomcat包拖入,解压 Tomcat 并部署安装
tar -xzf apache-tomcat-9.0.67.tar.gz -C /usr/local/
ln -s apache-tomcat-9.0.67/ tomcat

# 启动 Tomcat,测试能否访问 Tomcat 首页
cd tomcat/
bin/startup.sh

3.2 部署 Jenkins

下载 Jenkins

bash 复制代码
# 下载 jenkins 到 /usr/local/tomcat/webapps/ 目录下
cd /usr/local/tomcat/webapps
wget http://mirrors.jenkins.io/war-stable/2.346.3/jenkins.war

# 下载下来后会自动解压
ls
# 显示:docs examples host-manager jenkins jenkins.war manager ROOT

# 启动服务
bin/catalina.sh stop
bin/catalina.sh start

访问 Jenkins

获取初始密码

bash 复制代码
cat /root/.jenkins/secrets/initialAdminPassword
# 输出:b17a0e359ce14220bbfbab934ccc29dd

3.3 自定义 Jenkins

插件安装

选择"无",进行安装,后期需要什么插件就安装什么插件

创建管理员用户

  • 用户名:admin
  • 密码:admin

图示:创建管理员用户界面

配置国内源

  • 点击 Advanced → 更新为国内源 → Submit

源地址

安装 Git 相关插件

  • GitHub
  • GitLab
  • Gitee

安装简体中文插件

安装完成后,会重启 Jenkins

用户界面

图示:Jenkins 主界面

任务管理

全局工具配置

安装 JDK

节点管理

图示:节点管理界面

4. Jenkins 流水线项目发布流程

环境规划

主机名称 IP 地址 需要的应用服务 工具包 系统
Node1 192.168.100.10 tomcat、jenkins git、maven RHEL8
Node2 192.168.100.20 tomcat RHEL8

4.1 基础环境准备

  1. 关闭防火墙和 SELinux

  2. 在 Node1 上部署服务 Tomcat 和 Jenkins

    (上面已经部署),重新部署,登录 Web 界面时选择安装推荐的插件,部署好后,设置国内源

  3. 在 Node1 主机上生成密钥,传给 Node2 主机

    bash 复制代码
    ssh-keygen
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.20
  4. 在 Node2 上部署 Tomcat

    bash 复制代码
    yum -y install java-11-openjdk
    tar -xzf apache-tomcat-9.0.67.tar.gz -C /usr/local/
    cd /usr/local/
    ln -s apache-tomcat-9.0.67/ tomcat
    ls tomcat/

4.2 在 Node1 中配置 Jenkins

创建任务
创建流水线任务

发布流水线的方法有两种:

  • 脚本方式
  • 使用文本参数的方式

环境准备

首先需要在 Jenkins 所在服务器(Node1)中安装 git 和 maven

bash 复制代码
# 下载对应java的maven
# 查看maven版本
yum search maven
yum -y install git maven

示例代码仓库

方法一:使用脚本

第一阶段:拉取代码
bash 复制代码
pipeline {
    agent any
    stages {
        stage('pull code') {
            steps {
                git 'https://github.com/devopsbyhari/JenkinsTomcatExample.git'
            }
        }
    }
}

蓝色为正在构建

绿色为构建成功

也可以看构建日志

在构建历史中可以看到构建情况

构建日志中记录这pull到哪里了

第二阶段:打包构建
bash 复制代码
pipeline {
    agent any
    stages {
        stage('pull code') {
            steps {
                git 'http://github.com/lizhenliang/tomcat-java-demo.git'
            }
        }
        stage('package') {
            steps {
                sh """
                mvn clean
                mvn package
                """
            }
        }
    }
}

构建结果

  • 第二次构建是为了安装软件包,生成站点
  • 站点位置:/root/.jenkins/workspace/test/target/
  • 生成文件:ly-simple-tomcat-0.0.1-SNAPSHOT.war
第三阶段:部署
bash 复制代码
pipeline {
    agent any
    stages {
        stage('pull code') {
            steps {
                git 'http://github.com/lizhenliang/tomcat-java-demo.git'
            }
        }
        stage('package') {
            steps {
                sh """
                mvn clean
                mvn package
                """
            }
        }
        stage('deploy') {
            steps {
                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'
                """
            }
        }
    }
}

验证部署

bash 复制代码
# 在 Node2 上验证
cd /usr/local/tomcat/webapps
ls
# 显示:docs host-manager ly-simple-tomcat-0.0.1-SNAPSHOT.war ROOT examples ly-simple-tomcat-0.0.1-SNAPSHOT manager

方法二:使用文本参数实现流水线项目发布

创建新的流水线项目
配置参数
  1. 添加 Git 下载信息文本参数

    • 参数:git_url
    • 值:http://github.com/lizhenliang/tomcat-java-demo.git
  2. 添加 Maven 打包字符参数

    • 参数:maven_package
    • 值:ly-simple-tomcat-0.0.1-SNAPSHOT
  3. 添加 Tomcat 路径字符参数

    • 参数:tomcat_path
    • 值:/usr/local/tomcat
  4. 添加客户端 IP 文本参数

    • 参数:client_ip
    • 值:192.168.100.20
编写流水线脚本
bash 复制代码
pipeline {
    agent any
    stages {
        stage('pull code') {
            steps {
                git "${git_url}"
            }
        }
        stage('package') {
            steps {
                sh """
                mvn clean
                mvn package
                """
            }
        }
        stage('deploy') {
            steps {
                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'
                """
            }
        }
    }
}
执行构建
相关推荐
Leinwin1 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382501 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇1 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7591 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣2 小时前
智能体选型实战指南
运维·人工智能
yy55272 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔5 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密5 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20155 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑