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'
                """
            }
        }
    }
}
执行构建
相关推荐
晓梦.6 小时前
Linux
linux·运维·服务器
运维帮手大橙子6 小时前
Linux如何安装使用Rust指南
linux·运维·rust
千百元6 小时前
centos怎么查看磁盘是机械还是固态
linux·运维·centos
LoneEon6 小时前
CentOS 7 系统安装教程
linux·运维·centos
2301_793167996 小时前
网络基础总结
运维·网络·hcia
ssswywywht6 小时前
搭建本地时间同步服务器
linux·运维·服务器
广商 小轩6 小时前
自动化实战 Playwright破解滑块验证码的完整实战指南
运维·自动化
Gss7777 小时前
jenkins介绍与部署
运维·jenkins
FJW0208147 小时前
Linux编辑神器——vim工具的使用
linux·运维·vim