Git+Jenkins基本使用_jenkins git-程序员宅基地

技术标签: 自动化部署  

Git+Jenkins基本使用

本章资源请访问
https://download.csdn.net/download/weixin_54373617/19447568

技能目标:

  • 了解 Jenkins 持续集成工具
  • 学会安装 Jenkins 持续集成工具
  • 学会利用Jenkins 实现源码自动打包部署

案例分析

案例概述

随着软件开发复杂度的不断提高,团队成员之间如何更好地协同工作以确保软件开发的质量,已经慢慢成为开发过程中不可回避的问题。Jenkins 自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而可以更早的进入测试阶段;并且能够更早的发现问题,这样解决问题的成本就会显著下降。持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也缩短了中间出现的等待时间。持续集成也意味着开发、集成、测试、部署得以持续。所以,当配置完 Jenkins 持续集成持续交付环境后,就可以把发布的任务交给集成服务器去处理了。本章将使用 Maven(Ant) 等来实现 Java 项目自动化构建发布部署。这些工具可以帮助在构建过程中实现自动化发布、回滚等动作。

案例前置知识点

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 在一次集成中需要执行的任务,如下图所示。
在这里插入图片描述

5. Maven 介绍

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

Maven 除了程序构建能力出色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 脚本就可以构建简单的项目。由于Maven 是面向项目的方法,许多 Apache Jakarta 项目发布时都使用 Maven,而且公司企业项目采用 Maven 的比例也在持续增长。

Maven 这个单词意为知识的积累,最初在 Jakata Turbine 项目中用来简化构建过程。当时,有一些项目(有各自 Ant build 文件)仅有细微的差别,而 JAR 文件都由 CVS 维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享 JARs,因此 Maven 就这样诞生了。

案例环境

1. 本案例环境

本案例共使用三台服务器,每台服务器划分不同的服务角色,最后通过配置 Jenkins 实现自动打包部署 Java 项目。本案例具体实验环境如下表所示。

主机名 系统 IP地址 配置 主要软件
jenkins CentOS7.9 192.168.10.101 2C/4G Jenkins、JDK、Tomcat、maven、git
docker CentOS7.9 192.168.10.102 1C/1G docker、JDK、
git CentOS7.9 192.168.10.103 1C/1G git

2. 案例拓扑

本章案例拓扑图,如下图所示。
在这里插入图片描述

3. 案例需求

(1) 从 GitHub 下载开源的博客系统到本地,然后将开源的博客系统源码提交到 Git 本地代码版本控制系统。
(2) 配置 Jenkins 持续集成持续交付工具,完成 Java 项目自动打包部署等工作。

4. 案例实现思路

(1) 准备 Jenkins 基础环境。

(2) Jenkins 基本配置。

(3) 实现 Jenkins 自动打包。

案例实施

准备 Jenkins 基础环境

1. 准备系统环境,所有主机操作

修改主机名

192.168.10.101主机操作
hostnamectl set-hostname jenkins
su
192.168.10.102主机操作
hostnamectl set-hostname docker
su
192.168.10.103主机操作
hostnamectl set-hostname git
su

关闭防火墙SELinux和网络管理

systemctl stop firewalld && systemctl disable firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
setenforce 0

安装时间同步服务

yum -y install chrony
systemctl start chronyd
systemctl enable chronyd
chronyc sources -v

2. 使用 YUM 安装并配置 Git, git主机操作

yum -y install git       #jenkins主机也需执行此条命令
useradd git
passwd git 
更改用户 git 的密码 。
新的 密码:                           #密码自定义
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

su - git   #切换到指定帐户,同时切换到git的家目录
mkdir tale.git
cd tale.git
git --bare init
初始化空的 Git 版本库于 /home/git/tale.git/

ll
总用量 12
drwxrwxr-x. 2 git git   6 67 15:36 branches
-rw-rw-r--. 1 git git  66 67 15:36 config
-rw-rw-r--. 1 git git  73 67 15:36 description
-rw-rw-r--. 1 git git  23 67 15:36 HEAD
drwxrwxr-x. 2 git git 242 67 15:36 hooks
drwxrwxr-x. 2 git git  21 67 15:36 info
drwxrwxr-x. 4 git git  30 67 15:36 objects
drwxrwxr-x. 4 git git  31 67 15:36 refs

此时,Git 服务器就已经部署完成。但是,用户还不能向服务器推送数据,也不能克隆Git 版本仓库。因为要在服务器上开放至少一种支持 Git 的协议,比如:HTTP/HTTPS/SSH 协议等,现在使用最多的就是 HTTPS 和 SSH 协议。

切换至 jenkins 主机也就是 Git 的客户机(192.168.10.101)生成免交互 SSH 密钥认证。

ssh-keygen   #一路回车
ssh-copy-id [email protected]	//将客户机的公钥传递给Git 服务器
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.10.103 (192.168.10.103)' can't be established.
ECDSA key fingerprint is SHA256:2fQLgiER9lL5D2sIHiKrcE9C9lAc3IRuu4+kyZIGMR4.
ECDSA key fingerprint is MD5:14:58:01:3a:bb:1c:72:e1:1f:21:14:4e:ba:b5:ba:32.
Are you sure you want to continue connecting (yes/no)? yes        
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:     #密码是git的用户密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

这样,就可以从 Git 服务器中克隆版本仓库了(此时目录内没有文件是正常的)。

pwd  #git主机操作
/home/git/tale.git 

git clone git@192.168.10.103:/home/git/tale.git     #jenkins主机操作
正克隆到 'tale'...
warning: 您似乎克隆了一个空版本库。

3. 下载开源博客系统,jenkins主机操作

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

mkdir tale-test
cd tale-test/
#上传tale.git.gz的包
cd
cp -rf tale-test/tale/* tale/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_54373617/article/details/117659937

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法