Docker+Jenkins+Tomcat(保姆级教学)
为了防止文档发了没人看,我在文档里偷偷埋了几个雷
?
1、简介
什么是持续集成(
Continuous integration
)?
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一
次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测
试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够
更快的开发内聚的软件。
如果没有持续集成
1.
项目做模块集成的时候,发现很多接口都不通
==>
浪费大量时间
2.
需要手动去编译打包最新的代码
==>
构建过程不透明
3.
发布代码,上线,基本靠手工
==>
脚本乱飞
持续集成的好处
1.
降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少;
2.
对系统健康持续检查,减少发布风险带来的问题;
3.
减少重复性工作;
4.
持续部署,提供可部署单元包;
5.
持续交付可供使用的版本;
6.
增强团队信心;
所以为了实现项目的持续集成,我们需要自动化部署;
Jenkins
介绍
Jenkins
是一款流行的开源持续集成(
Continuous Integration
)工具,广泛用于项目开发,具有自动
化构建、测试和部署等功能。 我们需要知道的是,
Jenkins
只是一个平台,真正运作的都是插件;这就
是
Jenkins
流行的原因,因为
Jenkins
什么插件都有。
Jenkins
的优势
1
、开源的
Java
语言开发持续集成工具,支持持续集成,持续部署。
2
、易于安装部署配置:可通过
yum
安装
,
或下载
war
包以及通过
docker
容器等快速实现安装部署,可方
便
web
界面配置管理。
3
、消息通知及测试报告:集成
RSS/E-mail
通过
RSS
发布构建结果或当构建完成时通过
e-mail
通知,生成
JUnit/TestNG
测试报告。
4
、分布式构建:支持
Jenkins
能够让多台计算机一起构建
/
测试。
5
、文件识别:
Jenkins
能够跟踪哪次构建生成哪些
jar
,哪次构建使用哪个版本的
jar
等。
6
、丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如
git
,
svn
,
maven
,
docker
等。
1.
代码管理:
Jenkins
可以集成多种源代码管理系统(如
Git
、
SVN
等),从中获取最新的代码。
2.
触发构建:
Jenkins
可以基于预设的触发条件(如定时、代码提交等)触发构建过程。
3.
构建过程:
Jenkins
会执行预设的构建脚本,包括编译代码、生成可执行文件、打包等操作。
4.
单元测试:
Jenkins
会执行预设的单元测试脚本,对构建的软件进行测试。
5.
静态代码分析:
Jenkins
可以执行静态代码分析工具,检查代码质量,如检查代码风格、代码覆盖
率等。
6.
部署过程:根据预设的部署配置,
Jenkins
会将构建好的软件部署到目标环境中。
7.
集成测试:
Jenkins
可以执行预设的集成测试脚本,将不同模块的软件进行集成测试。
8.
验收测试:
Jenkins
可以执行预设的验收测试脚本,验证软件是否符合用户需求。
9.
反馈结果:
2、如何配置
1、Jenkins 安装
1.
创建
Jenkins
挂载目录并授予权限
//
创建目录
mkdir
-p
/usr/local/docker/jenkins_home
//
授权权限
chmod
777
/usr/local/docker/jenkins_home
2. 安装Maven
#
切换到要安装的文件夹
cd
/opt
#
解压
tar
-xzvf
apache-maven-3.9.6-bin.tar.gz
#
配置
apache-maven-3.8.5/conf/settings.xml
,添加阿里云
maven
镜像仓库
vim
apache-maven-3.9.6/conf/settings.xml
#
在
<mirrors>
标签中添加以下配置
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
#
添加环境变量
vi
/etc/profile
#
在文件底部加上
export
M2_HOME
=
/opt/apache-maven-3.8.5
export
PATH
=
$PATH
:
${M2_HOME}
/bin
#
保存并退出编辑,使用下面的命令让修改生效
source
/etc/profile
#
验证
Maven
安装
mvn
-version
注意:你有可能会报错
这是因为你没有安装
Java,
建议安装
JDK11
,因为
Jenkins
的版本最好是
2.440
以上,这样很多插件可以直
接安装,不用再费事手动安装了,
2.440
版本的
Jenkins
最低支持
JKD11
。
3. 启动 Jenkins 容器
#
最好先去
dockerhub
上找到最新版本,拉取指定版本号,否则容易出现插件安装失败的问题
docker run
-d -p
8081
:8080
-p
50000
:50000
--restart
=
always \
-v
/usr/local/docker/jenkins_home:/var/jenkins_home \
-v
/etc/localtime:/etc/localtime
-v
/opt/apache-maven-3.8.5:/usr/local/maven \
-e
TZ
=
"Asia/Shanghai"
--name
jenkins jenkins/jenkins:2.440-jdk11
4. 打开浏览器访问
http://IP
:
端口
5. 获取并输入admin账户密码
vim
/usr/local/docker/jenkins_home/secrets/initialAdminPassword
2
、
Jenkins
配置
插件管理
1. 跳过插件安装
因为
Jenkins
插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安
装。
2. 创建管理员用户
3. 修改 Jenkins 插件下载源
enkins->Manage Jenkins->Manage Plugins
,点击
Available
,这样做是为了把
Jenkins
官方的插件列表
下载到本地。
修改地址文件,替换为国内插件地址。
# docker
安装,因为做了映射,直接在宿主机挂载的
jenkins_home
中修改
cd /usr/local/docker/jenkins_home/updates
#
换成清华镜像库
#
使用
docker
安装的
jenkins
,如没有
“default.json”
文件,则访
问
“http://localhost:8081/restart”
后再执行以下步骤
sed -i 's/http:\/\/updates.jenkins
ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
&& sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
重启 Jenkins
http://192.168.159.100:8081/restart
在
Manage Plugins
点击
Advanced
,把
Update Site
改为国内插件下载地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
然后点击
submit
重启
Jenkins
4. 下载中文汉化插件 (选做,因为你的Jenkins版本可能太低导致不能安装)
用户权限管理
1. 安装Role-based Authorization Strategy插件
2. 授权策略切换为"Role-Based Strategy"
3. 创建角色(不用创建也能用,主要我没看懂这块儿)
系统管理
-> Manage and Assign Roles -> Manage Roles
Global roles
(全局角色):管理员等高级用户可以创建基于全局的角色
Project roles
(项目角色):针对某个或者某些项目的角色,最新版已改名为
“Item roles”
Slave roles
(节点角色):节点相关的权限,最新版已改名为
“Node roles”
4. 创建用户(不用创建也能用,主要我没看懂这块儿)
系统管理
-> Manage Users ->
新建用户
5. 给用户分配角色(不用创建也能用,主要我没看懂这块儿)
系统管理
-> Manage and Assign Roles -> Assign Roles
在
User/group to add
中输入需要分配角色的用户,勾选相应角色,保存。
凭证管理
凭据可以用来存储需要密文保护的数据库密码、
Gitlab
密码信息、
Docker
私有仓库密码等,以便
Jenkins
可以和这些第三方的应用进行交互
安装
Credentials Binding
插件
可以添加的凭证有
5
种:(我用的第一种,其他不知道为啥四种都失败了)
Username with password
:用户名和密码
SSH Username with private key
: 使用
SSH
用户和密钥
Secret file
:需要保密的文本文件,使用时
Jenkins
会将文件复制到一个临时目录中,再将文件路径
设置到一个变量中,等构建结束后,所复制的
Secret file
就会被删除。
Secret text
:需要保存的一个加密的文本串,如钉钉机器人或
Github
的
api token
Certificate
:通过上传证书文件的方式
安装 Git 插件和 Git 工具
为了让
Jenkins
支持从
Gitlab
拉取源码,需要安装
Git
插件以及在
jenkins
服务器上安装
Git
工具。
1. 使用 Git 用户密码拉取代码
2. 测试凭证是否可用
回到主页,新建任务 -> 构建一个自由风格的的软件项目(FreeStyle Project)-> 输入任务名称 -> 确定
在源码管理中选择 Git,填入仓库的http连接,并选择刚才添加的凭据,点击保存。
Repository URL:
填写你
Git
仓库的
Http
地址
Credentials
:选择账号密码那个授权
选择立即构建(
Build Now
)。
如果成功也可以在项目空间里看到你的项目,项目失败 点击控制台输出可以看到进行到哪一步失败了;
使用 Git SSH 密钥拉取代码(不建议使用,因为我用这个方法会报错
(
;
′
⌒
`))
1. 生成SSH密钥
2. 将SSH公钥添加到远程仓库中
3. 在Jenkins中添加凭据,配置私钥
在凭据中选择
SSH Username with private key
,填写用户名和私钥。
4. 测试凭据是否可用
回到主页,新建任务
->
构建一个自由风格的的软件项目(
FreeStyle Project
)
->
输入任务名称
->
确定
在源码管理中选择 Git,填入仓库的ssh连接,并选择刚才添加的凭据,点击保存。
选择立即构建(Build Now)。
Maven配置
1. 全局工具配置关联JDK、Git和Maven
docker
版自带
JDK
和
git
,可进入容器通过以下命令获取
JDK
和
git
路径,使用
Linux
安装需提前安装好
git
和
JDK
#
进入
jenkins
容器
docker exec
-it
jenkins /bin/bash
#
查看
jdk
版本
java
-version
#
查看
jdk
路径
which java
#
查看
git
版本
git
--version
#
查看
git
路径
which
git
此处不建议直接使用自动安装
maven
,自动安装的
maven
会在首次使用
maven
构建项目时才下载下
来,加上使用国外镜像仓库,会导致构建项目时间过长。
但是我用的是自动安装
maven
,因为我找不到我的
maven
装在哪儿了,只能说
Linux
没人用不是没有道
理的,找个文件要给我找死了;
(
╯▔皿▔
)
╯
2.安装 Maven Integration
插件
3. 配置环境变量
配置完全局配置后去配置
jenkins
的环境变量 不然
jenkins
运行打包命令会找不到
JAVA_HOME
和
mvn
命令(
yum
安装
jenkins
需要配置环境变量,
war
包安装方式不用配置,
docker
安装的
jenkins
属于用
war
包安装的,所以可以不用配置)
Manage Jenkins->Configure System->Global Properties
,添加三个全局变量:
JAVA_HOME
、
M2_HOME
、
PATH+EXTRA
4. 修改maven仓库地址,方便查看
docker
挂载的
maven
默认仓库地址位于
jenkins
挂载目录下:
~/jenkins_home/.m2/repository
,如果
不在意的话可以不改
我不在意,所以我没改,主要确实找不到
maven
装哪里了;
#
创建本地仓库目录,
docker
安装的需要进入容器内部创建
mkdir
/root/repo
#
进入配置文件
vi
/opt/maven/conf/settings.xml
#
修改
<localRepository>
中的内容
<localRepository>/root/repo</localRepository
5. 测试Maven是否配置成功
配置源码地址
填入 clean package,保存后进行构建,如果可以编译打包成功,则说明Maven配置成功。
注意这个
pom.xml
,如果你项目的
pom
文件不在最外层,前面需要加一层路径,反正自己看吧,他构建
完检测不到会提示报错;
看到BUILD SUCCESS表示构建成功,或者你构建成功了那个项目上会有个小对勾;
Tomcat
安装和配置
使用
docker
安装
Tomcat
#
首先启动一个
tomcat
容器,记得提前打开
8080
端口或关闭防火前
docker run
-d -p
8080
:8080
--name
=
tomcat tomcat:9.0
#
拷贝配置文件到宿主机
docker
cp
tomcat:/usr/local/tomcat /usr/local/docker/
#
可以修改
tomcat
配置文件(
server.xml
),自定义端口等
#
将
webapps.dist
中的文件复制到
webapps
目录下
cp
/usr/local/docker/tomcat/webapps.dist/ /usr/local/docker/tomcat/webapps/
#
删除之前创建的
tomcat
docker
rm
-f
tomcat
#
启动正式
tomcat
docker run
--restart
=
always
--name
=
tomcat
-p
8080
:8080 \
-v
/usr/local/docker/tomcat:/usr/local/tomcat \
-d
tomcat:9.0
在浏览器的地址栏输入:
http://192.168.159.100:8080/
(服务器的
ip
和
tomcat
默认端口
8080
)
如果出现以下界面,则说明安装成功
配置 Tomcat
1. 配置Tomcat用户角色权限
默认情况下
Tomcat
是没有配置用户角色权限的,后续
Jenkins
部署项目到
Tomcat
服务器,需要用到
Tomcat
的用户,所以修改
tomcat
以下配置,添加用户及权限。
#
修改
tomcat
配置文件,允许
jenkins
访问
vi
/usr/local/docker/tomcat/conf/tomcat-users.xml
#
添加以下配置,管理员密码为
:tomcat/tomcat
<tomcat-users>
<role
rolename
=
"tomcat"
/>
<role
rolename
=
"role1"
/>
<role
rolename
=
"manager-script"
/>
<role
rolename
=
"manager-gui"
/>
<role
rolename
=
"manager-status"
/>
<role
rolename
=
"manager-jmx"
/>
<role
rolename
=
"admin-gui"
/>
<role
rolename
=
"admin-script"
/>
<user
username
=
"tomcat"
password
=
"tomcat"
roles
=
"manager-gui,manager
script,tomcat,manager-status,manager-jmx,admin-gui,admin-script"
/>
</tomcat-users>
#
为了能够刚才配置的用户登录到
Tomcat
,让所以
ip
都可以访问
tomcat
,还需要修改以下配置
vi
/usr/local/docker/tomcat/webapps/manager/META-INF/context.xml
#
注释这段配置
<!-- <Valve
className
=
"org.apache.catalina.valves.RemoteAddrValve"
allow
=
"127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"
/>
--
>
#
重启
Tomcat
docker
restart
tomcat
2. 添加Tomcat用户凭证
把war包部署到 tomcat 中
1. 安装Deploy to container插件
Jenkins
本身无法实现远程部署到
Tomcat
的功能,需要安装
Deploy to container
插件实现。
2. 添加构建后操作
在刚才的
maven
项目配置中增加构建后操作步骤,应用并保存,构建成功后访问项
目地址:格式为
http://ip
:port/context_path
然后构建项目,如果构建成功则去
tomcat
里的
managerAPP
里查看,看到你的项目即构建并部署成功;
图中
gas
为我部署的项目
最后这里可老难了,可能会出现找不到war包之类的情况
出现这种问题,我建议排查:
1
、你的配置有没有出错
2
、你的项目用
maven
构建完是
jar
包还是
war
包?
3
、你的部署路径是否正确?(大概率是错误的,因为我刚开始部署路径也是错的)
所以需要你:
1
、修改你的项目的
pom
文件,让他构建
war
包;
2
、尝试修改你
Jenkins
的工作空间路径(为什么说是尝试,因为网上说的几种办法我都试了,没用
XD
)
3
、重新开一个项目从头配置(我就是这样解决的,我也不知道为啥)
此外,注意你虚拟机的防火墙,建议全关;
3、为什么选用Jenkins
当谈到
CI/CD
(持续集成和持续交付) 工具时,我们都会提到
Jenkins
。它是构建和测试项目的超级有
效工具,从而使持续不断的轻松集成成为可能。
但是,
Jenkins
并不是唯一的
CI/CD
工具。我们还有其他很多选择!
例如:
1.GitLab
GitLab
它是一个开源的
Web
系统,可用于将持续集成,持续部署应用到你的项目中,而无需任何
第三方应用程序。它提供了友好的用户界面以及分布式版本控制服务。
使它成为
Jenkins
最佳替代品之一的一些主要功能是:
像
Jenkins
一样,它也是一个开源工具。
可以并行测试构建,从而减少时间。
它允许与
docker
集成,并有助于自动化发布和应用程序交付。
它提供了更好的支持。
需要知道的是:
1
、易用性
GitLab
是一个一体化平台 ,它为
CI/CD
、版本控制、项目管理和协作提供全面的解决方案 , 使开
发人员可以轻松设置和配置他们的管道 。而
Jenkins
是一个高度可定制的工具,需要一些技术专长来设
置和配置。它具有陡峭的学习曲线,新用户可能会发现上手具有挑战性。
2
、整合
GitLab
和
Jenkins
支持与各种工具和服务的集成。但是,
GitLab
提供与第三方服务的更多原生集
成,包括云提供商、部署平台和监控工具。这使开发人员可以更轻松地设置他们的管道并自动化他们的
工作流程。
Jenkins
也有一个庞大的插件库,支持与各种工具和服务的集成。
3.
性能
GitLab
以其快速可靠的性能而闻名。它具有内置的缓存和并行处理功能,使开发人员能够快速高
效地运行他们的管道。而
Jenkins
在运行大型复杂管道时可能会遇到性能问题。它需要手动优化以确保
它可以处理负载。
4.
安全
GitLab
具有内置的安全功能,可确保代码在每个管道阶段都是安全的。它提供代码扫描、漏洞管
理和容器扫描等功能,可帮助开发人员在将其投入生产之前识别和修复安全问题。
Jenkins
严重依赖插
件来提供安全功能。这会使确保您的管道安全变得具有挑战性,尤其是在您使用第三方插件的情况下。
5.
成本
GitLab
提供免费和付费计划。免费计划包括小型团队
CI/CD
所需的大部分功能。付费计划包括部署
监控、审计和合规性等附加功能。
Jenkins
是一个可以免费使用的开源工具。但是,它需要大量资源来
设置和维护,这会增加使用该工具的总体成本。
2. TeamCity
TeamCity
易于使用和集成,因此也被称为
“ Intelligent CI Server”
。它为不同的操作系统提供了不
同的安装包。它是
JetBrains
开发的功能强大的工具,它甚至可以在提交更改之前就构建和运行测试,从
而保持代码的干净。
使它成为
Jenkins
替代产品之一的一些功能是:
易于安装。
它提供了与
Docker
,
JIRA
等工具的集成。
它提供了可扩展的定义良好的
API
。
需要知道的是:
1
、泛用性
虽然
JetBrains
的
Idea
、
DataGrip
等一系列软件广受好评,但是
TeamCity
用的人是真的少,而说起
CI/CD
大家的第一反应都是
Jenkins
,谁更常用一眼便知;
2.
易用性
与
Jenkins
相比,
TeamCity
提供了更好,更清晰的界面。该界面可以根据要求轻松定制。这并不意
味着
Jenkins
不可用,主要的可用性差异在于
Jenkins
更加关注功能而不是可用性。
TeamCity
的主要组件是服务器,而浏览器托管的界面用于管理项目,代理和项目配置。
3
、安装
安装和配置
TeamCity
服务器很容易,因为它只涉及下载适当的
TeamCity
服务器安装并执行安装
(或升级)说明。
TeamCity
官方站点上的大量文档使此任务更加容易。
Jenkins
是一个自包含的
Java
程序,易于安装,并且可以在
OS X
,
Windows
和基于
Unix
的操作系统中直
接使用。如果已经安装了
Java
和
Apache TomCat
,则需要执行三个安装步骤。总体而言,设置詹金斯的
过程很容易。
Jenkins
的配置是通过
Web
界面执行的,该界面包括内置帮助和即时错误检查。
但是,如果您按照必要的安装步骤进行安装,则
Jenkins
和
TeamCity
都非常简单。
3.
插件生态系统
与
TeamCity
相比,
Jenkins
的插件生态系统更加成熟。主要原因是社区参与了詹金斯的发展。
TeamCity
有大约
400
个插件。这些插件可在
TeamCity
的插件页面上下载。插件必须单独安装,因为它们
不一定是商业产品的一部分。通过使用
Open API
,开发人员可以创建用于与版本控制系统,构建工
具,
IDE
,通知程序和服务器运行状况报告集成的插件。
相比之下,
Jenkins
在社区及其丰富的插件生态系统中蒸蒸日上。在撰写本文时,
Jenkins
提供了
1500
多
个受社区支持的插件,并支持项目中的构建,部署和自动化。由于插件的范围从构建工具到特定于语言
的开发工具,它使自定义任务简单且具有成本效益,因为您不需要昂贵的内部自定义。
3.Buddy
Buddy
,也称为
Buddy Works
,是一种具有用户交互界面的持续集成和交付软件,是
Jenkins
的完
美替代方案。它有助于更快地构建,测试和部署应用程序。你可以在几分钟的配置中运行
CI/CD
流水
线。
此外,它还提供以下功能:
它提供本地解决方案。
它提供了对多种语言的支持。
可以根据要求自定义构建和测试环境。
需要知道的是:
1.
易用性:
Buddy
更加简单易用,即使是普通的开发人员也可以快速上手。而
Jenkins
需要具备一定
的领域知识才能正常使用,通常需要专人进行管理。
2.
集成能力:
Jenkins
具有更强的集成能力,许多插件可以方便地与其集成,支持各种构建、部署和
测试工具。
Buddy
虽然也提供了丰富的插件支持,但其核心功能更加集中,主要用于构建、测试和
发布软件。
3.
适用场景:
Buddy
适用于各种规模的项目,特别是对于需要快速迭代和发布的小型项目来说,
Buddy
可以提供更加灵活和快速的服务。
Jenkins
则更适合大型的、复杂的项目,尤其是一些需要
高度定制和自动化的企业级项目。
不过以大伙将来找到的工作来说,
Buddy
确实是把
Jenkins
完爆了
🤣
;
原文地址:https://blog.csdn.net/m0_63233901/article/details/145105571
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!