Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

news/2024/5/6 7:52:24/文章来源:https://blog.csdn.net/weixin_42324463/article/details/127112144

一、环境需求

本帖针对的是Linux环境,Windows或其他系统也可借鉴。具体只讲述Jenkins配置以及整个流程的实现。
1.JDK(或JRE)及Java环境变量配置,我用的是JDK1.8。
2.Jenkins 持续集成和持续交付项目。
3.现有项目及gitlab(SVN或本地路径也行)地址。
4.maven工具及环境变量配置,用于构建和管理任何基于Java的项目。
5.下载解压Tomcat,我用的是Tomcat8。
6.三台服务器,代码托管服务器:172.16.11.1(gitlab) 持续集成服务器:172.16.11.2(jenkins) 应用测试服务器:172.16.11.3(tomcat)

二、Gitlab代码托管服务器安装

1.Gitlab 安装详见我之前的博客:gitlab服务搭建和部署
2.Gitlab添加组、创建用户、创建项目
1)创建组
使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,
不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理。
在这里插入图片描述
在这里插入图片描述
2)创建用户
创建用户的时候,可以选择普通用户或管理类型。
在这里插入图片描述
在这里插入图片描述
3)将用户添加到组中
在这里插入图片描述
在这里插入图片描述
Gitlab用户在组里面有5种不同权限:
Guest:可以创建issue、发表评论,不能读写版本库 Reporter:可以克隆代码,不能提交,QA、PM
可以赋予这个权限 Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个
权限 Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组
长可以赋予这个权限
在这里插入图片描述
4)在用户组中创建项目
以刚才创建的新用户身份登录到Gitlab,然后在用户组(ops组)中创建新的项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.源码上传到Gitlab仓库
下面来到PyCharm 开发工具,我们已经准备好一个简单的Web应用准备到集成部署,我们要把源码上传到Gitlab的项目仓库中。
1)项目结构说明
在这里插入图片描述

一个非常简单的web应用,只有一个index.jsp页面,如果部署好,可以访问该页面就成功啦!

2)开启版本控制,添加git远程仓库地址
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
添加完毕之后
在这里插入图片描述
3)提交代码到本地仓库
先添加到缓存区
在这里插入图片描述
再Commit(提交)到本地仓库
在这里插入图片描述
提交和推送
在这里插入图片描述
4)刷新gitlab项目
回到Git界面,点击项目刷新
在这里插入图片描述

三、持续集成环境-Jenkins安装

1)Jenkins部署

2) 安装推荐插件
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,你也可以选择插件来安装,我这边是选择安装推荐的插件。
在这里插入图片描述
3)添加一个管理员账户,并进入Jenkins后台
在这里插入图片描述
在这里插入图片描述

保存并完成

四、持续集成环境-Jenkins用户权限管理

我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限

安装Role-based Authorization Strategy插件
在这里插入图片描述

开启权限全局安全配置
在这里插入图片描述
授权策略切换为"Role-Based Strategy",保存
在这里插入图片描述
创建角色
在系统管理页面进入 Manage and Assign Roles
在这里插入图片描述

点击"Manage Roles"
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Global roles(全局角色):管理员等高级用户可以创建基于全局的角色 ltem roles(项目角色):
针对某个或者某些项目的角色 Node roles (奴隶角色):节点相关的权限

我们添加以下三个角色:
baseRole:该角色为全局角色。这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑
定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is
missing the Overall/Read permission
role1:该角色为项目角色。使用正则表达式绑定"itcast.",意思是只能操作itcast开头的项目。
role2:该角色也为项目角色。绑定"itheima.
",意思是只能操作itheima开头的项目。

在这里插入图片描述
在这里插入图片描述
保存。
创建用户
在系统管理页面进入 Manage Users
在这里插入图片描述
在这里插入图片描述
分别创建两个用户:jack和eric
在这里插入图片描述
给用户分配角色
系统管理页面进入Manage and Assign Roles,点击Assign Roles
绑定规则如下:
eric用户分别绑定baseRole和role1角色
jack用户分别绑定baseRole和role2角色
在这里插入图片描述
在这里插入图片描述
保存。
创建项目测试权限
以hk管理员账户创建两个项目,分别为itcast01和itheima01
在这里插入图片描述
结果为:
eric用户登录,只能看到itcast01项目
jack用户登录,只能看到itheima01项目

五、持续集成环境-Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便
Jenkins可以和这些第三方的应用进行交互。

安装Credentials Binding插件
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件
在这里插入图片描述
安装插件后,根据图片中的红圈路径,在这里管理所有凭证
在这里插入图片描述
可以添加的凭证有6种:
在这里插入图片描述
Username with password:用户名和密码
SSH Username with private key: 使用SSH用户和密钥
Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径
设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
Certificate:通过上传证书文件的方式
GitHub App 身份验证是一个巨大的进步。

常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH
密钥)

接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。

安装Git插件和Git工具
为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7上安装Git工具。

Git插件安装:
我这里是提前安装好了,所以在已安装这里可以查看到。
在这里插入图片描述
CentOS7上安装Git工具:

yum install git -y 安装
git --version 安装后查看版本

在这里插入图片描述
用户密码类型
1)创建凭证
在这里插入图片描述
选择"Username with password",输入Gitlab的用户名和密码,点击"确定"。
在这里插入图片描述
2)测试凭证是否可用
创建一个项目名(test01)FreeStyle项目
在这里插入图片描述
找到"源码管理"->“Git”,在Repository URL复制Gitlab中的项目URL
在这里插入图片描述
在Credentials选择刚刚添加的凭证
在这里插入图片描述

保存配置后,点击构建”Build Now“ 开始构建项目
在这里插入图片描述
在这里插入图片描述
查看/var/lib/jenkins/workspace/目录,发现已经从Gitlab成功拉取了代码到Jenkins中。
在这里插入图片描述

六、持续集成环境-Maven安装和配置

在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。
安装Maven
172.16.11.2

cd /opt/src
wget --no-check-certificate  https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
mkdir -p /opt/maven
tar  -xf  apache-maven-3.8.6-bin.tar.gz
mv   apache-maven-3.8.6/*  /opt/maven

配置环境变量

vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
source /etc/profile 配置生效
mvn -v 查找Maven版本

全局工具配置关联JDK和Maven
Dashboard->Manage Jenkins->Global Tool Configuration->JDK->新增JDK,配置如下:
在这里插入图片描述

Dashboard->Manage Jenkins->Global Tool Configuration->Maven->新增Maven,配置如下:
在这里插入图片描述
添加Jenkins全局变量
Dashboard->Manage Jenkins->Configure System-> 全局属性 ,添加三个全局变量
在这里插入图片描述

修改Maven的settings.xml

mkdir -p  /home/jenkins/repo 创建本地仓库目录
chown -R  jenkins:jenkins  /home/jenkins  修改目录权限为   jenkins:jenkins
vim /opt/maven/conf/settings.xml

修改两个地方,参数如下:

本地仓库改为: /home/jenkins/repo

在这里插入图片描述
添加阿里云私服地址:

<mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun  maven</name><url>https://maven.aliyun.com/repository/central</url>
</mirror>

在这里插入图片描述
测试Maven是否配置成功
使用之前的gitlab密码测试项目,修改配置
在这里插入图片描述

Build Steps ->增加构建步骤->Execute Shell
在这里插入图片描述
输入
mvn clean package
在这里插入图片描述
再次构建,如果可以把项目打成war包,代表maven环境配置成功啦!

在这里插入图片描述

七、持续集成环境-Tomcat安装和配置

安装Tomcat8.5
172.16.11.3
部署tomcat点击之前的文章

注意:服务器已经关闭了防火墙,所以可以直接访问Tomcat啦
地址为:http://172.16.11.3:8080
在这里插入图片描述
配置Tomcat用户角色权限
默认情况下Tomcat是没有配置用户角色权限的
在这里插入图片描述

在这里插入图片描述
但是,后续Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置
添加用户及权限

vim /opt/tomcat/conf/tomcat-users.xml

内容如下:

<tomcat-users><role rolename="tomcat"/><role rolename="role1"/><role rolename="manager-script"/><role rolename="manager-gui"/><role rolename="manager-status"/><role rolename="admin-gui"/><role rolename="admin-script"/><user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>

在这里插入图片描述

用户和密码都是:tomcat
注意:为了能够刚才配置的用户登录到Tomcat,还需要修改以下配置

vim   /opt/tomcat/webapps/manager/META-INF/context.xml

把上面这行注释掉即可!

重启Tomcat,访问测试

/opt/tomcat/bin/shutdown.sh 停止
/opt/tomcat/bin/startup.sh 启动

访问: http://172.16.11.3:8080/manager/html ,输入tomcat和tomcat,看到以下页面代表成功啦
在这里插入图片描述

八、Jenkins构建Maven项目

Jenkins项目构建类型-Jenkins构建的项目类型介绍
Jenkins中自动构建项目的类型有很多,常用的有以下三种:
自由风格软件项目(FreeStyle Project)
Maven项目(Maven Project)
流水线项目(Pipeline Project)

每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在
实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)

Jenkins项目构建类型-自由风格项目构建
下面演示创建一个自由风格项目来完成项目的集成过程:
拉取代码->编译->打包->部署

拉取代码
1)创建项目
在这里插入图片描述

2)配置源码管理,从gitlab拉取代码
在这里插入图片描述
编译打包
构建->添加构建步骤->Executor Shell

echo “开始编译和打包”
mvn clean package
echo “编译和打包结束”
在这里插入图片描述
部署
把项目部署到远程的Tomcat里面
1)安装 Deploy to container插件
Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现
在这里插入图片描述
2)添加Tomcat用户凭证
在这里插入图片描述
3)添加构建后操作
在这里插入图片描述
在这里插入图片描述
点击"Build Now",开始构建过程
在这里插入图片描述

4)部署成功后,访问项目
http://172.16.11.3:8080/web_demo-1.0-SNAPSHOT/
在这里插入图片描述
演示改动代码后的持续集成
1)IDEA中源码修改并提交到gitlab
在这里插入图片描述2)在Jenkins中项目重新构建
重新构建,需要删除工程目录
在这里插入图片描述
删除之后再次点击"Build Now"
在这里插入图片描述

3)访问Tomcat
重新刷访问
在这里插入图片描述
Jenkins项目构建类型-Maven项目构建
1)安装Maven Integration插件
在这里插入图片描述
2)创建Maven项目
在这里插入图片描述
3)配置项目
拉取代码和远程部署的过程和自由风格项目一样,只是"构建"部分不同
在这里插入图片描述
保存,构建。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_18323.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis实战 - 03 RedisTemplate 的 hash 结构

文章目录1. put(H var1, HK var2, HV var3)2. get(H var1, Object var2)3. entries(H key)4. keys(H key)5. values(H key)6. hasKey(H key, Object var2)7. size(H key)8. putAll(H key, Map<? extends HK, ? extends HV> map)1. put(H var1, HK var2, HV var3) 新增…

机器学习之验证曲线绘制-调参可视化-sklearn

验证曲线是什么&#xff1f; 验证曲线和学习曲线的区别是&#xff0c;横轴为某个超参数的一系列值&#xff0c;由此来看不同参数设置下模型的准确率(评价标准)&#xff0c;而不是不同训练集大小下的准确率。 从验证曲线上可以看到随着超参数设置的改变&#xff0c;模型可能从…

Java Web 12.1 Filter 12.1.2 Filter 快速入门

Java Web 【黑马程序员新版JavaWeb基础教程&#xff0c;Java web从入门到企业实战完整版】 12 Filter & Listener & Ajax 文章目录Java Web12 Filter & Listener & Ajax12.1 Filter12.1.2 Filter 快速入门12.1 Filter 12.1.2 Filter 快速入门 【开发步骤】…

论如何参与一个开源项目(上)

写在前面的一些话 说起开源项目&#xff0c;好像人人都懂&#xff1a;不过就是一群人一起写了些东西&#xff0c;并且这些东西是公开的&#xff0c;大家都能看。但要细说&#xff0c;可能大多数的开发者都说不出个所以然&#xff0c;甚至不知道怎么提issue。 所以我就想写这样…

这,这,是个神人,我喜欢

国庆的第三天&#xff0c;跟一个好友聊天&#xff0c;他本来是准备回老家的&#xff0c;但是因为疫情搁浅在原地了。上来就直接给我搞一个有难度的代码如果没有人跟你说这个是输出helloworld的&#xff0c;鬼知道这个代码。然后&#xff0c;我就说我想对他进行一个采访&#xf…

QX-A51智能小车实现-物联网应用系统设计项目开发

目录介绍说明展示介绍 STC89C52系列单片机是STC推出的新一代高速/低功耗/超强抗干扰/超低价的单片机&#xff0c;指令代码完全兼容传统8051单片机&#xff0c;12时钟每机器周期和6时钟每机器周期可以任意选择 QX-A51智能小车原理图 QX-A51智能小车配置 硬件组成&#xff1a;电…

QT模型索引使用QModelIndex

QT模型索引使用QModelIndex QModelIndex有三个要素&#xff1a;行row 列column 父节点索引parent 但是注意我们并不能定义一个QModelIndex QModelIndex的构造函数QModelIndex()的功能是创建一个新的空的QModelIndex QModelIdex()是一个空索引&#xff0c;它其实可以代表任意mo…

数据库-MySQL基础(9)-多表关系

目录 概述 1、一对多 2、多对多 3、一对一 多表查询概述 多表查询分类 1、连接查询 2、子查询 概述 项目开发中&#xff0c;在进行数据库表结构关系设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析设计表结构&#xff0c;由于业务之间相互关联…

5、android 数据存储(2)(数据库SQLite:SQLiteDatabase)

1、数据库管理器SQLiteDatabase SQLiteDatabase是SQLite的数据库管理类&#xff0c;它提供了若干操作数据表的API&#xff0c;常用的方法有3类&#xff1a; 1. 管理类&#xff0c;用于数据库层面的操作。 openDatabase&#xff1a;打开指定路径的数据库。 isOpen&#xff1a…

机器学习之学习曲线绘制Python-skleran

学习曲线作用&#xff1a; 学习曲线是什么&#xff1f;简单来说&#xff0c;就是用学习曲线(learning curve)来判断模型状态&#xff1a;过拟合还是欠拟合。 学习曲线定义&#xff1a; 学习曲线是根据不同训练集大小&#xff0c;模型在训练集和验证集上的得分变化曲线。 学…

虚拟机搭建Redis 远程密码可访问,并且后台运行

1、关闭系统防火墙 操作指令备注查看防火墙状态systemctl status firewalld / firewall-cmd --state暂时关闭防火墙systemctl stop firewalld永久关闭防火墙(禁用开机自启)systemctl disable firewalld下次启动,才生效暂时开启防火墙systemctl start firewalld永久开启防火墙(…

基于python+django框架+Mysql数据库的校园新生报到系统设计与实现

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于python的校园新生报到系统&#xff0c;整体网站系统基于B/S架构&#xff0c;技术上使用基于python的Django框架来实现&#xff1b;通过后台添加设置校园信息、录入和管理校园资讯、校园风光、学校分院信…

Linux 用户管理 文件目录指令 时间日期指令 搜索查找类 解压压缩类

目录 用户管理 添加用户: 指定/修改密码 删除用户 查询用户信息指令 切换用户 查看当前用户/登录用户 用户组 修改用户的组 用户和组相关文件 指定运行级别1 指定运行级别2 找回root密码 帮助指令 文件目录指令 文件目录类 pwd 指令 ls 指令 cd 指令 mkdir指…

Android Automotive(五) CarService

Android Automotive&#xff08;五&#xff09; CarService CarService是Android Automotive在系统框架层的核心服务。它类似SystemServer在服务内部管理着数十个子服务。 启动流程 CarService是由SystemServer启动的&#xff0c;启动流程如下。 SystemServer 启动CarServi…

【GNN从入门到精通】第一章 图的基本知识

文章目录一、图的表示1.1 什么是图&#xff1f;二、图的特征2.1 子图2.2 连通分量2.3 接通图2.3.1 无向图连通图2.3.2 有向连通图2.4 最短路径2.5 图直径三、图中心性3.1 度中心性3.2 特征向量中心性3.3 中介中心性3.4 连接中心性四、网页排序算法4.1 PageRank4.2 HITS4.3 例子…

游程描述的任意区域最小旋转矩形算法实现

效果 采用游程描述了多个区域,经过算法计算,找到最小包围矩形。 白色是指定的区域,黄色是该区域的最小旋转矩形。 算法原理 有时候算法不一定很高深,只要把道理点破,实现起来很简单,难的是最开始的算法构思过程。 区域最小旋转矩形的算法原理也很简单:将区域从0到90…

Dapper 在继承层次结构中处理数据

Dapper 包含一项功能,用于处理可能逐行映射到不同类型的数据。在处理使用Table Per Hierarchy存储模式的继承层次结构时,此功能特别有用,即一个表用于表示层次结构中的所有类。“鉴别器”列用于区分类型。 以下类定义表示基于抽象Contract类型的继承层次结构。还定义了三种派…

16.python实现线性单元和梯度下降-10月4日编程作业-Relu函数

目录 课堂笔记 代码实现1 运行结果1 代码实现2 评定一个学生的综合绩点 运行结果2 小结 课堂笔记 代码实现1 from cgi import print_environ from functools import reduce import numpy as np#定义感知器类 class perceptron(object):#感知器初始化函数(参数个数&…

ASP.NET Core--项目基础与搭建

文章目录项目基础与搭建创建项目ViewImports.cshtmlappsettings.json执行顺序Program.cs类startup.cs类项目基础与搭建 创建项目 ViewImports.cshtml ViewImports文件可以影响文件夹层次结构中的所有视图 ViewImports文件是我们可以编写代码并放置通用指令以引入我们的视图所需…

数据结构 - 单链表

文章目录一、单链表1.单链表的定义1.1概念介绍2.如何用代码来定义一个单链表*知识点3.单链表的插入删除未完待续...一、单链表 1.单链表的定义 单链表是一种链式存取的数据结构&#xff0c;用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的&…