0


Git+Jenkins 基本使用(Basic Usage of Git+Jenkins)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

自动化运维之Git+Jenkins 基本使用

**技能目标: **

**- 了解 Jenkins 持续集成工具 **

**- 学会安装 Jenkins 持续集成工具 **

**- 学会利用Jenkins实现源码自动打包部署 **

**2.1 案例分析 **

**2.1.1 案例概述 **

**随着软件开发复杂度的不断提高,团队成员之间如何更好地协同工作以确保软件开发的 **

**质量,已经慢慢成为开发过程中不可回避的问题。Jenkins 自动化部署可以解决集成、测试、 **

**部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代 **

**码变更的信息,从而可以更早的进入测试阶段;并且能够更早的发现问题,这样解决问题的 **

**成本就会显著下降。持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也缩 **

**短了中间出现的等待时间。持续集成也意味着开发、集成、测试、部署得以持续。所以,当 **

**配置完 Jenkins 持续集成持续交付环境后,就可以把发布的任务交给集成服务器去处理了。 **

**本章将使用 Maven(Ant) 等来实现 Java 项目自动化构建发布部署。这些工具可以帮助在构 **

**建过程中实现自动化发布、回滚等动作。 **

**2.1.2 案例前置知识点 **

**1. 什么是 Jenkins **

**Jenkins 原名 Hudson,2011 年改为现在的名字,它是一个开源的实现持续集成的软件 **

**工具。官方网站网址:https://jenkins.io/。 **

**Jenkins 能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能, **

**还能通过图表的形式,形象地展示项目构建的趋势和稳定性。 **

**Jenkins 包含以下几个特点: **

** **

**易安装:从官网仅需要下载一个 jenkins.war 文件后,直接运行,无需额外的安装,更 **

**无需安装数据库; **

** **

**易配置:提供友好的 GUI 配置界面; **

** **

**变更支持:Jenkins 能从代码仓库(SVN /Git)中获取并产生代码更新列表,并显示到 **

**编译输出信息中; **

** **

**支持永久链接:用户是通过 Web 来访问 Jenkins 的,而这些 Web 页面的链接地址都是 **

永久链接地址,可以在各种文档中直接使用该链接;

** **

**集成 E-Mail/RSS/IM:当完成一次集成后,可通过这些工具实时收取集成结果(构建一 **

**次集成需要花费一定时间,有了这个功能,就可以在等待结果过程中,干别的事情); **

** JUnit/TestNG 测试报告:是以图表等形式提供详细的测试报表功能; **

** **

**支持分布式构建:Jenkins 可以把集成构建等工作分发到多台计算机中完成; **

** **

**文件指纹信息:Jenkins 会保存构建集成所产生的 jars 文件、集成构建使用了哪个版本 **

**的 jars 文件等构建记录; **

** **

**支持第三方插件:Jenkins 支持第三方插件,这使得 Jenkins 功能变得越来越强大。 **

**2. 持续集成的作用 **

**持续集成(Continuous Integration,简写为 CI)可以保证团队开发人员提交代码的质量, **

**减轻软件发布的时间压力。在持续集成过程中任何一个环节都是自动完成的,无需太多的人 **

**工干预,这样有利于减少重复过程,从而可以节省时间、费用和工作量。 **

**3. 持续集成的特点 **

**持续集成是一个自动化的、周期性的集成测试过程,检出代码、编译构建、运行测试、 **

**结果记录、测试统计等过程都是自动完成的,无需人工干预。持续集成需要有专门的集成服 **

**务器来执行集成构建操作,同时需要有代码托管工具的支持。 **

**4. 持续集成的工作原理 **

**Jenkins 的工作原理是先将源代码从 SVN/Git 版本控制系统中拷贝一份到本地,然后根 **

**据设置的脚本进行 build(构建)。整个系统的关键就是 build 脚本,build 脚本告诉 Jenkins **

在一次集成中需要执行的任务,如图 2.1 所示。**图 2.1 持续集成工作原理 **

**5. Maven 介绍 **

**Maven 项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文 **

**档的软件项目管理工具。 **

**Maven 除了程序构建能力出色之外,还提供高级项目管理工具。由于 Maven 的缺省构 **

**建规则有较高的可重用性,所以常常用两三行 Maven 脚本就可以构建简单的项目。由于 **

**Maven 是面向项目的方法,许多 Apache Jakarta 项目发布时都使用 Maven,而且公司企业 **

**项目采用 Maven 的比例也在持续增长。 **

**Maven 这个单词意为知识的积累,最初在 Jakata Turbine 项目中用来简化构建过程。 **

**当时,有一些项目(有各自 Ant build 文件)仅有细微的差别,而 JAR 文件都由 CVS 维护。 **

**于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式 **

**发布项目的信息,以及一种简单的方式在多个项目中共享 JARs,因此 Maven 就这样诞生 **

**了。 **

**2.1.3 案例环境 **

**1. 本案例环境 **

**本案例共使用三台服务器,每台服务器划分不同的服务角色,最后通过配置 Jenkins 实 **

**现自动打包部署 Java 项目。本案例具体实验环境如表 2-1 所示。 **

*表 2-1 Git+Jenkins 基本环境主机操作系统 主机名/IP 地址主要软件服务器CentOS 7.3-x86_64Jenkins/192.168.8.91Jenkins服务器CentOS 7.3-x86_64Docker/192.168.8.92Docker服务器CentOS 7.3-x86_64Git/192.168.8.93*Git/SVN **
**2. 案例拓扑 **

本章案例拓扑图,如图 2.2 所示。

**图 2.2 案例拓扑 **

**3. 案例需求 **

**(1)从 GitHub 下载开源的博客系统到本地,然后将开源的博客系统源码提交到 Git 本 **

**地代码版本控制系统。 **

**(2)配置 Jenkins 持续集成持续交付工具,完成 Java 项目自动打包部署等工作。 **

**4. 案例实现思路 **

**(1)准备 Jenkins 基础环境。 **

**(2)Jenkins 基本配置。 **

**(3)实现 Jenkins 自动打包。 **

**2.2 案例实施 **

2.2.1 准备 Jenkins 基础环境

**1. 准备系统环境 **

**三台主机都执行以下操作,主机名根据不同主机做调整。 **

**[root@localhost ~]# hostnamectl set-hostname jenkins **

**[root@localhost ~]# bash **

**[root@jenkins ~]# systemctl stop firewalld && systemctl disable firewalld **

**[root@jenkins ~]# systemctl stop NetworkManager && systemctl disable NetworkManager **

**[root@jenkins ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config **

**[root@jenkins ~]# setenforce 0 **

**2. 使用 YUM 安装并配置 Git **

**[root@git ~]# yum install -y git **

**//jenkins 主机也需执行此条命令 **

**[root@git ~]# useradd git **

**[root@git ~]# passwd git **

**更改用户 git 的密码 。 **

**新的 密码: **

**//输入 git 用户的密码,密码可自行设定 **

**重新输入新的 密码: **

**passwd:所有的身份验证令牌已经成功更新。 **

**[root@git ~]# su - git **

**[git@git ~]$ mkdir tale.git **

//创建 Git 版本仓库,一般以.git 为后缀

**[git@git tale.git]$ git --bare init **

**初始化空的 Git 版本库于 /home/git/tale.git/ **

**[git@git tale.git]$ ll **

**total 12 **

**drwxrwxr-x. 2 git git **

**6 Jul 1 17:10 branches **

**-rw-rw-r--. 1 git git 66 Jul 1 17:10 config **

**-rw-rw-r--. 1 git git 73 Jul 1 17:10 description **

**-rw-rw-r--. 1 git git 23 Jul 1 17:10 HEAD **

**drwxrwxr-x. 2 git git 242 Jul 1 17:10 hooks **

**drwxrwxr-x. 2 git git 21 Jul 1 17:10 info **

**drwxrwxr-x. 4 git git 30 Jul 1 17:10 objects **

**drwxrwxr-x. 4 git git 31 Jul 1 17:10 refs **

**此时,Git 服务器就已经部署完成。但是,用户还不能向服务器推送数据,也不能克隆 **

**Git 版本仓库。因为要在服务器上开放至少一种支持 Git 的协议,比如:HTTP/HTTPS/SSH **

**协议等,现在使用最多的就是 HTTPS 和 SSH 协议。切换至 Git 客户机(192.168.8.91)生 **

**成免交互 SSH 密钥认证。 **

**[root@jenkins ~]# ssh-keygen **

**//一路回车 **

**[root@jenkins ~]# ssh-copy-id git@192.168.8.93 **

**//将客户机的公钥传递给 Git 服务器 **

**这样,就可以从 Git 服务器中克隆版本仓库了(此时目录内没有文件是正常的)。[root@jenkins ~]# git clone git@192.168.8.93:/home/git/tale.git **

**正克隆到 'tale'... **

**warning: 您似乎克隆了一个空版本库。 **

**3. 下载开源博客系统 **

**将开源博客系统源码克隆到本地 Git 仓库目录,然后添加注释“all tale”,并提交到 Git **

**版本仓库中。 **

**[root@jenkins ~]# mkdir tale-test **

**[root@jenkins ~]# cd tale-test/ **

**[root@jenkins table-test]# git clone https://github.com/otale/tale.git **

**[root@jenkins table-test]# cd **

**[root@jenkins ~]# cp -rf tale-test/tale/* tale/ **

**[root@jenkins ~]# cd tale **

**[root@jenkins tale]# git add . **

**[root@jenkins tale]# git commit -m "all tale" **

***** Please tell me who you are. **

**Run **

**git config --global user.email "you@example.com" **

**git config --global user.name "Your Name" **

**to set your account's default identity. **

**Omit --global to set the identity only in this repository. **

**fatal: unable to auto-detect email address (got 'root@Jenkins.(none)') **

**[root@jenkins tale]# git config --global user.email "admin@example.com" **

**[root@jenkins tale]# git config --global user.name "admin" **

**[root@jenkins tale]# git commit -m "all tale" **

**[root@jenkins tale]# git push origin master **

**//默认 push 到 master 主干 **

**Counting objects: 349, done. **

**Compressing objects: 100% (302/302), done. **

**Writing objects: 100% (349/349), 5.29 MiB | 5.54 MiB/s, done. **

**Total 349 (delta 37), reused 0 (delta 0) **

**To git@192.168.8.93:/home/git/tale.git **

*** [new branch] **

**master -> master **

**4. 安装部署 Jenkins **

**(1)部署 Tomcat **

**提前下载好 JDK 与 Tomcat 软件包,用于部署 Tomcat 服务。 **

**[root@jenkins ~]# tar zxvf jdk-8u202-linux-x64.tar.gz **

**//先上传 JDK 安装包 **

**[root@jenkins ~]# mv jdk1.8.0_202/ /usr/local/java/ **

**[root@jenkins ~]# vim /etc/profile **

**export JAVA_HOME=/usr/local/java/ **

**export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarexport PATH=$JAVA_HOME/bin:$PATH **

**[root@jenkins ~]# source /etc/profile **

**[root@jenkins ~]# java -version **

**java version "1.8.0_202" **

**Java(TM) SE Runtime Environment (build 1.8.0_202-b08) **

**Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode) **

**[root@jenkins ~]# tar zxvf apache-tomcat-8.5.56.tar.gz **

**[root@jenkins ~]# mv apache-tomcat-8.5.56 /usr/local/tomcat **

**[root@jenkins ~]# tar zxvf apache-maven-3.6.0-bin.tar.gz **

**[root@jenkins ~]# mv apache-maven-3.6.0 /usr/local/maven **

**[root@jenkins ~]# cd /usr/local/tomcat/bin/ **

**[root@jenkins bin]# sh startup.sh **

**(2)部署 Jenkins **

**从官网 http://mirrors.jenkins.io/war,下载 jenkins.war 软件包,尽量下载较新版本的 **

**Jenkins,旧版本在实验中可能会出现默认插件不支持安装。将 jenkins.war 文件保存到 **

**Tomcat 服务的 /usr/local/tomcat/webapps 目录下。启动 Tomcat 就会自动部署 Jenkins。 **

**将 jenkins.war 软件包上传到 Tomcat 服务的对应目录后,在浏览器的地址栏中输入 **

http://192.168.8.91:8080/jenkins 便可开始部署 Jenkins,如图 2.3 所示。

**图 2.3 解锁 Jenkins **

**从图 2.3 中可以看出 Tomcat 方式启动 Jenkins 已经成功。初次部署 Jenkins,会生成 **

**一个初始登录密码。 **

**[root@jenkins ~]# cat /root/.jenkins/secrets/initialAdminPassword **

**909ce9e5e72440d2b90ea891ef8148d9 **

**//每个人的密码不同 **

**复制这段密码到浏览器的“管理员密码”框中,并单击“继续”登录 Jenkins,然后选择“安 **

装推荐插件”,如图 2.4 所示。在实际生产环境下,可以根据需求安装 Jenkins 插件。**图 2.4 安装推荐插件 **

**在安装插件的过程中,个别插件可能因为网络问题会出现安装失败现象。如果出现插件 **

**安装失败现象,可暂时忽略,之后可到“插件管理”内安装对应插件。 **

**插件安装完后,会出现“创建第一个管理员用户”的提示,本案例中创建的用户、密码与 **

邮件地址,如图 2.5 所示。

**图 2.5 创建管理员用户 **

**创建完管理员用户后单击“保存并完成”→“开始使用 Jenkins”,可进入 Jenkins 首页,如 **

图 2.6 所示。

**图 2.6 Jenkins 首页 **

**至此,Jenkins 已经部署完毕。 **

**2.2.2 Jenkins 配置 **

**在部署完 Jenkins 工具后,就可以对 Jenkins 进行配置。本案例的配置主要包括以下几 **

**个步骤。 **

**(1) 安装 Jenkins 必要插件; **

**(2) 添加验证凭据; **

**(3) 添加 Publish Over SSH 远程主机; **

**(4) 配置 Maven、JDK、Git 环境; **

**(5) 构建 tale 基础镜像; **

**(6) 构建新的工程项目; **

**(7) 验证 Jenkins 持续集成持续交付。 **

**1. 安装 Jenkins 必要插件 **

**在 Jenkins 首页中,单击左侧的“Manage Jenkins”→“Manage Plugins”→“可选插件”, **

**进入如图 2.7 所示插件安装界面,在搜索框中,输入要安装的 Publish Over SSH 、Maven **

Integration 插件,并勾选其左侧的复选框,单击“直接安装”按钮,开始插件安装操作。

**图 2.7 可选插件页面 **

**2. 添加 Publish Over SSH 远程主机 **

**在 Docker 主机上创建远程目录。 **

**[root@docker ~]# mkdir /data **

**在 Jenkins 首页中,单击“Manage Jenkins”→“Configure System”→“Publish over **

**SSH”→“SSH Servers”→“新增”选项,添加 SSH 远程主机,如图 2.8 所示。输入 Name、 **

**Hostname、Username 必要信息后,单击“高级”选项→勾选“Use Password authentication,or **

**use a different key”选项→输入“远程主机登录密码”→“Test Configuration”测试远程主机配 **

置。测试远程主机配置成功后,单击“保存”按钮。

**图 2.8 SSH Servers 配置 **

**3. 配置 Maven、JDK、Git 环境 **

**在 Jenkins 首页中,单击“Manage Jenkins”→“Global Tool Configuration”→“JDK”→“新 **

**增 JDK”。“JDK 别名”设置为“JDK1.8”,去掉“自动安装”选项,“JAVA_HOME”设置为本案例 **

中 JDK 实际安装路径“/usr/local/java”,如图 2.9 所示。

**图 2.9 JDK 配置 **

**在“Global Tool Configuration”配置界面中,找到“Maven”配置选项,然后单击“新增 **

**Maven”,并设置别名为“Maven3.6”、MAVEN_HOME 为“/usr/local/maven”,如图 2.10 所 **

示。

**图 2.10 Maven 配置 **

**Git 配置保持默认即可,以上各项配置完毕后,推荐重启下 Jenkins 服务,重启命令如 **

**下所示。 **

**[root@jenkins ~]# cd /usr/local/tomcat/bin **

**[root@jenkins bin]# sh shutdown.sh **

**[root@jenkins bin]# sh startup.sh **

**4. 构建 tale 基础镜像 **

**在 Docker 主机(192.168.8.92)上,构建 tale 基础镜像。在构建基础镜像之前需要先 **

**安装 Docker 与 JDK。 **

**[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 **

**[root@docker ~]# yum-config-manager --add-repo **

**https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo **

**[root@docker ~]# yum makecache fast **

**[root@docker ~]# yum -y install docker-ce **

**[root@docker ~]# mkdir /etc/docker **

**[root@docker ~]# cat << EOF >> /etc/docker/daemon.json **

**{ **

**"registry-mirrors": [ **

**"https://dockerhub.azk8s.cn", **

**"https://hub-mirror.c.163.com" **

**] **

**} **

**EOF **

**[root@docker ~]# systemctl start docker && systemctl enable docker **

**Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to **

**/usr/lib/systemd/system/docker.service. **

**[root@docker ~]# tar zxvf jdk-8u202-linux-x64.tar.gz **

**[root@docker ~]# mv jdk1.8.0_202/ /usr/local/java/ **

**[root@docker ~]# vim /etc/profile **

**export JAVA_HOME=/usr/local/java/ **

**export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar **

**export PATH=$JAVA_HOME/bin:$PATH **

**[root@docker ~]# source /etc/profile **

**[root@docker ~]# java -version **

**java version "1.8.0_162" **

**Java(TM) SE Runtime Environment (build 1.8.0_162-b12) **

**Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode) **

**构建 tale 基础镜像时依赖 Dockerfile 等相关文件,所以需要先创建 tale 基础镜像所用 **

**到的文件。 **

**[root@docker ~]# mkdir /git **

**[root@docker ~]# cd /git **

**[root@docker git]# ll **

**//上传并查看构建 tale 基础镜像所需文件 **

**总用量 186696 **

**-rw-r--r-- 1 root root 366 8 月 31 18:45 Dockerfile **

**-rw-r--r-- 1 root root 98 8 月 31 18:45 run.sh **

**[root@docker git]# docker build -t 192.168.8.92:5000/tale:v1 . **

**5. 构建一个新的工程项目 **

**在以上配置完成后,回到 Jenkins 首页,选择“新建任务”,输入一个任务名称“tale-test”, **

并选择“构建一个 maven 项目”配置项,单击当前页面下方的“确定”按钮,如图 2.11 所示。**图 2.11 新建任务 **

**在任务配置页面中,选择“源码管理”并选中“Git”,设置“Repository URL”地址为 **

git@192.168.8.93:/home/git/tale.git”,如图 2.12 所示。

**图 2.12 源码管理 **

之后,选择“Build”模块,“Goals and options”填写“clean package”,如图 2.13 所示。

**图 2.13 Build 设置 **

**选择“构建后操作”中的“Send build artfacts over SSH”选项,并进行配置,如图 2.14 所 **

示。

**图 2.14 构建后操作 **

**Exec command 执行命令如下所示: **

**cd /data/tale && tar zxf *.tar.gz **

**docker run -itd --name kgc-tale-test -p 9000:9000 -v /usr/local/java:/usr/local/jdk -v /data/tale:/tale **

**192.168.8.92:5000/tale:v1 **

**以上全部配置完成后,单击“保存”即可。然后单击左侧的“立即构建”,就开始 tale 项目 **

**的编译构建,直至任务构建完成。在构建过程中可以单击进度条查看控制台输出,如图 2.15 **

所示。

**图 2.15 控制台输出 **

**如图 2.16 所示,可以看到此工程任务已构建成功,并且在构建后,用于创建 tale 项目 **

的 Docker Web 环境命令也执行成功。

**图 2.16 构建成功 **

**2.2.3 验证 Jenkins 自动打包部署结果 **
**1. 验证拷贝目录内容 **

**在 Docker 主机上查看 tale 目录是否拷贝到/data 目录下,查询结果如下所示。 **

**[root@docker ]# cd /data/tale/ **

**[root@docker tale]# ll **

**总用量 6296 **

**drwxr-xr-x 2 root root **

**4096 9 月 **

**4 11:19 lib **

**drwxr-xr-x 5 root root **

**118 9 月 **

**4 11:19 resources **

**-rw-r--r-- 1 root root 6371965 9 月 **

**4 11:19 tale-latest.jar **

**-rw-r--r-- 1 root root 23706933 9 月 **

**4 11:19 tale.tar.gz **

**-rw-r--r-- 1 root root **

**3409 9 月 **

**4 11:19 tool **

**从结果可知,Jenkins 已经将打好的 jar 包拷贝过来了。 **

**2. 验证 tale 项目 Docker Web 环境 **

**[root@docker ~]# docker ps -a **

**CONTAINER ID **

**IMAGE **

**COMMAND **

**CREATED **

**STATUS **

**PORTS **

**NAMES **

**9ce60aff10e5 **

**192.168.8.92:5000/tale:v1 **

**"/run.sh" **

**4 minutes ago **

**Up **

**4 minutes **

**0.0.0.0:9000->9000/tcp **

**kgc-tale-test **

**从上述结果可以得知,Web 容器已经创建成功,可以通过浏览器访问 tale 开源博客系 **

**统,在浏览器中输入 http://192.168.8.92:9000 即可访问,访问结果如图 2.17 所示。图 2.17 tale 博客安装首页 **

**至此,Jenkins 自动打包部署完毕。 **


本文转载自: https://blog.csdn.net/J56793/article/details/141569449
版权归原作者 Linux运维老纪 所有, 如有侵权,请联系我们删除。

“Git+Jenkins 基本使用(Basic Usage of Git+Jenkins)”的评论:

还没有评论