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

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,无法实现)

环境准备

# 卸载 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

# 下载 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
在这里插入图片描述

获取初始密码

cat /root/.jenkins/secrets/initialAdminPassword
# 输出:b17a0e359ce14220bbfbab934ccc29dd

在这里插入图片描述

3.3 自定义 Jenkins

插件安装

在这里插入图片描述

在这里插入图片描述

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

创建管理员用户

  • 用户名:admin
  • 密码:admin

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

配置国内源

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

源地址

  • 原国外插件源地址:https://updates.jenkins.io/update-center.json
  • 国内插件源地址:https://mirrors.huaweicloud.com/jenkins/updates/update-center.json

在这里插入图片描述

安装 Git 相关插件

  • GitHub
  • GitLab
  • Gitee

安装简体中文插件
在这里插入图片描述

在这里插入图片描述

安装完成后,会重启 Jenkins

用户界面
[图示:Jenkins 主界面]

任务管理
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

全局工具配置
安装 JDK
在这里插入图片描述

节点管理
[图示:节点管理界面]

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

环境规划

主机名称IP 地址需要的应用服务工具包系统
Node1192.168.100.10tomcat、jenkinsgit、mavenRHEL8
Node2192.168.100.20tomcatRHEL8

4.1 基础环境准备

  1. 关闭防火墙和 SELinux

  2. 在 Node1 上部署服务 Tomcat 和 Jenkins
    (上面已经部署),重新部署,登录 Web 界面时选择安装推荐的插件,部署好后,设置国内源

    在这里插入图片描述

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

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

    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

# 下载对应java的maven
# 查看maven版本
yum search maven
yum -y install git maven

示例代码仓库

  • https://github.com/Ken-Song/tomcat-java-demo.git
  • https://github.com/devopsbyhari/JenkinsTomcatExample.git

方法一:使用脚本

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

在这里插入图片描述

在这里插入图片描述

蓝色为正在构建

在这里插入图片描述

绿色为构建成功

在这里插入图片描述

也可以看构建日志

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

第二阶段:打包构建
pipeline {agent anystages {stage('pull code') {steps {git 'http://github.com/lizhenliang/tomcat-java-demo.git'}}stage('package') {steps {sh """mvn cleanmvn package"""}}}
}

构建结果

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

验证部署

# 在 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
编写流水线脚本
pipeline {agent anystages {stage('pull code') {steps {git "${git_url}"}}stage('package') {steps {sh """mvn cleanmvn 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'"""}}}
}
执行构建

在这里插入图片描述

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

相关文章:

  • 新书速览|DeepSeek高效数据分析:从数据清洗到行业案例
  • 搜索百科(5):Easysearch — 自主可控的国产分布式搜索引擎
  • 自己建商城型网站做设计的软件
  • # 模型量化(二):基于BERT的量化代码实战
  • 网站没有备案会怎样资源网官网
  • 【C++:继承】面向对象编程精要:C++继承机制深度解析与最佳实践
  • Python访问者模式实战指南:从基础到高级应用
  • 《数组和函数的实践游戏---扫雷游戏(基础版附源码)》
  • 专门做网站的软件是网站着陆页怎么做
  • 南京专业网站制作公司如何申请免费网站空间
  • 【乌班图】远程连接(向日葵/ToDesk)显示成功却无桌面的问题解析与解决
  • 异或的应用
  • c++语法——字符串(10.23讲课)
  • AI大事记13:GPT 与 BERT 的范式之争(上)
  • wordpress安装后查看站点失败网站创建多少年了
  • 文件指针控制函数
  • 【JavaEE初阶】 多线程编程核心:解锁线程创建、方法与状态的创新实践密码
  • JavaEE初阶——HTTP/HTTPS 核心原理:从协议格式到加密传输
  • Linux 内存 get_user_pages_remote 函数
  • 【图像处理】图像滤波
  • CSS 列表详解
  • 建设工程规范下载网站商城网站开发的完整流程
  • 同德县网站建设公司海南网站建设及维护
  • 广西送变电建设公司网站深圳市建设工程造价站官网
  • 网站获取访问者qq号码专业的网页设计和网站制作公司
  • 网站建设费账务处理a站下载
  • 哈尔滨网站建设丿薇建立短语
  • 徐州seo网站推广网站开发 页面功能布局
  • 用extjs做的网站wps如何做网站
  • 青羊区建设局网站怎样入驻微信小程序