手把手教你使用 Jenkins+Docker+Tomcat 自动化部署项目(2022最新)

持续集成

持续集成的好处

  1. 降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少;
  2. 对系统健康持续检查,减少发布风险带来的问题;
  3. 减少重复性工作;
  4. 持续部署,提供可部署单元包;
  5. 持续交付可供使用的版本;
  6. 增强团队信心;

Jenkins 介绍

Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。官网:Jenkins 官网

Jenkins的特征

  • 开源的Java语言开发持续集成工具,支持持续集成,持续部署。

  • 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。

  • 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。

  • 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。

  • 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。

  • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

Jenkins 自动化部署实现原理

img

Jenkins 安装和持续集成环境配置

Jenkins 安装

1. 创建 Jenkins 挂载目录并授予权限

//创建目录
mkdir -p /usr/local/docker/jenkins_home
//授权权限
chmod 777 /usr/local/docker/jenkins_home

2. 安装Maven

因为用到的docker镜像中不包含maven,所以要在宿主机中安装,通过文件挂载的方式提供调用
官网下载maven,并放到宿主机/opt目录下

image-20220403234457185

# 切换到要安装的文件夹
cd /opt
# 解压
tar -xzvf apache-maven-3.8.5-bin.tar.gz
# 配置 apache-maven-3.8.5/conf/settings.xml,添加阿里云maven镜像仓库
vim apache-maven-3.8.5/conf/settings.xml
# 在<mirrors>标签中添加以下配置
<mirror>
 <id>aliyunmaven</id>
 <mirrorOf>*</mirrorOf>
 <name>阿里云公共仓库</name>
 <url>https://maven.aliyun.com/repository/public</url>
</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,则如下图所示:
image-20220404000225359

2. 启动 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 PHP_TZ="Asia/Shanghai" --name jenkins jenkins/jenkins:2.341-jdk8

3. 打开浏览器访问

http://192.168.159.100:8081

4. 获取并输入admin账户密码

vim /usr/local/docker/jenkins_home/secrets/initialAdminPassword

在 Docker 容器中更新 Jenkins 版本

# 如果jenkins版本太老,可以在不影响jenkins项目的情况下,更新jenkins版本
# 1.以root用户进入jenkins容器
    docker exec -it -u root jenkins /bin/bash
# 2.在容器中下载jenkins的最新war包,],如果嫌下载太慢也可以从官网(https://www.jenkins.io/download/)下载war包然后拷贝到挂载目录中
    wget http://mirrors.jenkins.io/war/latest/jenkins.war
# 3.查看容器中jenkins war包的位置,并备份原来的war包
    whereis jenkins
    cd /usr/share/jenkins
    cp jenkins.war jenkinsBAK.war
# 4.将/var/jenkins_home的包cp到/usr/share/jenkins下覆盖
    cp /var/jenkins_home/jenkins.war /usr/share/jenkins/
# 5.退出容器并重启
    exit
    docker restart jenkins

Jenkins 配置

插件管理

1. 跳过插件安装

​ 因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装。
image-20220323153736298
image-20220323155427930

2. 创建管理员用户
image-20220323155538634

image-20220323155650994

image-20220323155741369

3. 修改 Jenkins 插件下载源

Jenkins->Manage Jenkins->Manage Plugins,点击Available,这样做是为了把Jenkins官方的插件列表下载到本地。

image-20220323160539887

修改地址文件,替换为国内插件地址。

# 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,地址为部署的地址后加/restart

修改 Update Site

在Manage Plugins点击Advanced,把Update Site改为国内插件下载地址:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

然后点击submit
image-20220326143556516

重启 Jenkins

访问 http://192.168.159.100:8081/restart,地址为部署的地址后加/restart

4. 下载中文汉化插件

image-20220326144801927

用户权限管理

1. 安装Role-based Authorization Strategy插件
image-20220326160427660
2. 授权策略切换为"Role-Based Strategy"
image-20220403151401465
image-20220326160838186
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插件

image-20220326165544931

​ 安装插件后,在安全菜单会显示凭证管理选项,在这里管理所有凭证。

image-20220326170246949

可以添加的凭证有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工具。

image-20220326171446661

# 使用linux安装jenkins,需要jenkins所在的服务器安装git,docker 版的容器已经安装,所以不需要再安装
yum install git -y
使用 Git 用户密码拉取代码

1.添加凭据

Manage Credentials -> Jenkins -> 全局凭据 -> 添加凭据,填入git仓库的账号和密码即可

image-20220401214254107

image-20220401214300339

image-20220401214352286

image-20220401214415231
image-20220403152341524
2. 测试凭证是否可用

回到主页,新建任务 -> 构建一个自由风格的的软件项目(FreeStyle Project)-> 输入任务名称 -> 确定
image-20220403154202084
在源码管理中选择Git,填入仓库的http连接,并选择刚才添加的凭据,点击保存。
image-20220403154544885
选择立即构建(Build Now)。
image-20220403154919218
点击控制台输出,可以看到项目保存位置。
image-20220403180349602
image-20220403155343422

使用 Git SSH 密钥拉取代码

1. 生成SSH密钥

# 使用docker部署的需使用“docker exec -it jenkins bin/bash”命令进入容器内生成密钥
# 输入以下命令后,连着按三次回车键,生成秘钥
ssh-keygen -t rsa
# 获取公钥
cat ~/.ssh/id_rsa.pub

2. 将SSH公钥添加到远程仓库中
image-20220403162252905
3. 在Jenkins中添加凭据,配置私钥
在凭据中选择SSH Username with private key,填写用户名和私钥。

# 获取私钥
cat ~/.ssh/id_rsa

image-20220403163545759
image-20220403163336059
4. 测试凭据是否可用

回到主页,新建任务 -> 构建一个自由风格的的软件项目(FreeStyle Project)-> 输入任务名称 -> 确定
image-20220403164004273
在源码管理中选择Git,填入仓库的ssh连接,并选择刚才添加的凭据,点击保存。
image-20220403175557825
选择立即构建(Build Now)。
image-20220403154919218
点击控制台输出,可以看到项目保存位置。
image-20220403180349602
image-20220403180653525

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

image-20220403183750691
image-20220403191751463
image-20220403191813537
image-20220403191829071
此处不建议直接使用自动安装maven,自动安装的maven会在首次使用maven构建项目时才下载下来,加上使用国外镜像仓库,会导致构建项目时间过长。
image-20220404002443610
2.安装Maven Integration插件
image-20220403220802237
3. 配置环境变量

​ 配置完全局配置后去配置 jenkins 的环境变量 不然jenkins 运行打包命令会找不到 JAVA_HOME 和mvn 命令(yum安装jenkins需要配置环境变量,war包安装方式不用配置,docker 安装的jenkins属于用war包安装的,所以可以不用配置)

​ Manage Jenkins->Configure System->Global Properties ,添加三个全局变量:JAVA_HOME、M2_HOME、PATH+EXTRA
image-20220404133825428
4. 修改maven仓库地址,方便查看

​ docker 挂载的maven默认仓库地址为jenkins挂载目录中~/jenkins_home/.m2/repository下,如果不在意的话可以不改

# 创建本地仓库目录,docker安装的需要进入容器内部创建
mkdir /root/repo
# 进入配置文件
vi /opt/maven/conf/settings.xml
# 修改<localRepository>中的内容
<localRepository>/root/repo</localRepository

5. 测试Maven是否配置成功

​ 构建一个maven项目。
image-20220404143532323
​ 配置源码地址。

image-20220404143917613
​ 填入clean package,保存后进行构建,如果可以编译打包成功,则说明Maven配置成功。

image-20220404143949709
image-20220404144429762

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)

​ 如果出现以下界面,则说明安装成功
image-20220404154852237

配置 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用户凭证
image-20220404165729687

把war包部署到 tomcat 中

1. 安装Deploy to container插件

​ Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现。
image-20220404160036001
2. 添加构建后操作
在刚才的maven项目配置中增加构建后操作步骤,应用并保存,构建成功后访问项目地址:格式为http://ip:port/context_path
image-20220404165045833
img

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jenkins是一款开源的持续集成工具,它可以帮助开发团队自动化地构建、测试和部署软件项目。在Jenkins中配置Docker插件后,我们可以结合Docker技术来进行自动化部署Docker是一种轻量级的容器化技术,它可以将应用程序和其依赖的环境打包成一个可移植的容器,方便在不同的环境中部署和运行。 而Kubernetes(简称K8s)是一个开源的容器编排平台,它可以管理和调度Docker容器集群。通过在K8s中创建Pod、Service等资源对象,我们可以实现Spring Cloud项目自动化部署。 首先,我们可以使用Jenkins的Pipeline功能来编写自动化部署的流水线脚本。流水线脚本可以定义一系列的步骤,包括构建、测试和部署等。在流水线脚本中,我们可以使用Docker插件来创建Docker镜像,并将其推送到Docker仓库。接着,我们可以使用K8s插件来在Kubernetes集群中创建相关的资源对象,如Deployment和Service等。 在自动化部署过程中,我们可以将Spring Cloud项目的源代码与Dockerfile放在一个Git仓库中,并通过Jenkins的Webhook功能来触发自动化部署流水线。当有新的代码提交时,Jenkins会自动拉取最新的代码,并执行流水线脚本。在流水线脚本中,我们可以使用Maven或Gradle等工具来构建和打包Spring Cloud项目。然后,通过Docker插件创建可运行的Docker镜像,并将其推送到Docker仓库。 最后,使用K8s插件在Kubernetes集群中创建相关的资源对象,如Deployment和Service等。通过创建Deployment对象,我们可以定义应用程序的副本数和容器的镜像。通过创建Service对象,我们可以定义应用程序可以访问的网络端口和负载均衡规则。 通过JenkinsDocker和Kubernetes的自动化部署,我们可以实现Spring Cloud项目的快速、可靠和可重复部署。这种自动化部署的方式可以提高开发效率和部署质量,同时也降低了运维成本和风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值