Jenkins 自动化构建部署 Spring Boot 项目(从零到搭建完成)

Linux 虚拟机安装

由于我们是在测试环境实现 jenkins 的,这里我们直接使用 VMware 安装 CentOs7 的虚拟机,安装的方法可以直接参考我分享的这篇文章:https://blog.csdn.net/wuhuayangs/article/details/125295937?spm=1001.2014.3001.5502

jenkins 安装方式

Jenkins 安装支持 docker 和 war 两种方式,这里我们只讲 war 方式进行安装,docker 安装留在下一篇讲,一步步来嘛。

下载 jenkins

下载 jenkins 有两种方式:

  • 使用命令:wget https://get.jenkins.io/war-stable/2.303.2/jenkins.war
  • 直接请求下载 http://mirrors.jenkins.io/war-stable/latest/jenkins.war
如果下载较慢,建议采用迅雷下载,然后上传。

创建 Jenkins 用户

在我们部署 jenkins 的时候一定要记得不能使用 root 的用户去部署我们的 jenkins ,因为使用 root 去部署的话,会出现各类权限等问题,因此我们创建一个 ci 的组,同时创建一个 jenkins 用户,用于部署我们的 jenkins 。

# 配置 ci 用户组,创建 jenkins 用户,并且指定 ci 组
groupadd ci
useradd jenkins -g ci

# 设置 jenkins 用户密码
passwd jenkins

# 删除用户和组
userdel ci
groupdel jenkins

# 创建存放 jenkins 工具的目录,并指定权限,因 jenkins 后期构建比较占用磁盘,此处建议先挂载磁盘
mkdir -p /data/software
chown -R jenkins:ci /data/software

# 切换 jenkins 用户,进入到 software 目录,并下载 jenkins.war
su jenkins
cd /data/software/
wget https://get.jenkins.io/war-stable/2.303.2/jenkins.war

下载会有点慢,如果出现以下界面,说明下载成功了。

在这里插入图片描述

设置网络端口放行

我们首先需要让我们的服务器的防火墙对 8777 端口放行,要不我们的浏览器无法访问到我们的 jenkins,我们直接使用以下的命令放行 8777 端口:

firewall-cmd --zone=public --add-port=8777/tcp --permanent

使配置生效

firewall-cmd --reload

启动 Jenkins

# 使用 nohup 命令启动
nohup java -jar /data/software/jenkins.war  --httpPort=8777 --httpsPort=8778 > /data/software/jenkins.log 2>&1 &

由于网络的原因可能我们会在第一次启动的时候一直卡在我们的初始化页面一直无法跳出 jenkins 的解锁页面,使用 tail 命令查看启动日志,日志中会输出 jenkins 密码,如下:

在这里插入图片描述

访问 jenkins

外网或宿主机访问浏览器地址 http://192.168.2.128:8777/,这时候会弹出 jenkins 页面,输入上面日志中的密码,点击继续
在这里插入图片描述
直接选择安装推荐插件

在这里插入图片描述
安装插件需要时间,如果按照失败,则需要更新相关依赖,手动安装,安装成功会跳转到如下页面:
在这里插入图片描述
创建完用户进入到实例配置页面,这里是默认获取到的,不需要改动
在这里插入图片描述
到这步已经安装完 jenkins,可以正常使用了,点击开始使用 jenkins 进入。
在这里插入图片描述
这里就是 jenkins 的工作台
在这里插入图片描述
由于 jenkins 的所有插件安装后需要重启才能生效,jenkins 国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址,这里推荐使用清华大学源:

第一步:进入 Manage Jenkins -》 Manage Plugin -> Advanced 最下面有 Update Site 设置为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

在这里插入图片描述

第二步:修改服务器配置,进入 jenkins 安装目录 ,找到 /updates/default.json文件 ,我的在 /root/.jenkins/updates/default.json,

在这里插入图片描述
将其中的 updates.jenkins-ci.org/download 替换为 mirrors.tuna.tsinghua.edu.cn/jenkins ,然后把 www.google.com 修改为 www.baidu.com。

打开 default.json 文件数据太多,我们使用下面的命令执行:

sed -i 's/http:\/\/updates.jenkinsci.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 

替换后使用 http://192.168.2.128:8777/restart 重启 jenkins

接下来我们安装一个插件来试试下载效果

安装主题并重新启动 jenkins,Manage Jenkins–> Manage Plugins。单击 “可选插件” 选项卡并搜索 simple theme 插件
在这里插入图片描述

在这里插入图片描述
下载还是很快的,因为 jenkins 不刷新,可以手动刷新看结果。

JDK 集成

1、卸载已有的 open-jdk

1.1、查看目前已有的 JDK

rpm -qa | grep jdk

如果存在,比如下面一条.

java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64

1.2、执行删除命令

 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64

1.3、再次查看确认

rpm -qa | grep jdk

2、安装 jdk

2.1、准备好 xxx.tar.gz 文件,并使用解压命令 tar -zxvf xxx.gz.tar 将其解压
在这里插入图片描述

2.2、使用 vim/vi 命令编辑 /etc/profile 文件,在最后一行追加如下内容

export JAVA_HOME=/usr/local/java/jdk1.8.0_291
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

2.3、使JDK配置生效,并查看版本号

source /etc/profile
java -version

下面在 jenkins 中配置 JDK 路径:

在这里插入图片描述
在这里插入图片描述

凭证配置

凭据就是用来存储需要密文保护的数据库密码、Gitlab 密码信息、Docker 私有仓库密码等,以便 jenkins 可以和这些第三方的应用进行交互,这里需要先安装凭证插件 Credentials Binding

在这里插入图片描述
该插件默认在一开始就会被安装,安装后在 jenkins -> 系统管理 -> 安全 -> 管理凭据中查看到,若没有需要安装插件并重启。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
凭证类型:

  • Username with password(常用):用户名和密码
  • GitHub APP
  • SSH Username with private key(常用): 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径 设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

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

集成Git

为了 jenkins 能够拉取代码,需要安装 Git 环境和 jenkins 对应的 Git 插件。

1、CentOS 7上安装 Git 环境:

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

2、jenkins 安装 Git 插件:

在这里插入图片描述
3、jenkins 配置 Git 环境:

此处无需在 jenkins 中配置 Git 环境,采用默认生成的即可。
在这里插入图片描述
4、拉取 Gitee 代码首先需要配置凭证

在这里插入图片描述
在这里插入图片描述

5、Gitee上创建一个仓库
在这里插入图片描述
6、测试凭据是否能够使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进入 jenkins 的工作空间查看文件是否拉取下来,所有拉取的文件都会存放在 jenkins 工作空间中

[root@mycentos /]# cd /root/.jenkins/workspace
[root@mycentos workspace]# ll
总用量 0
drwxr-xr-x. 3 root root 55 617 09:56 test_gitee
drwxr-xr-x. 2 root root  6 617 09:56 test_gitee@tmp
[root@mycentos workspace]# cd test_gitee
[root@mycentos test_gitee]# ll
总用量 8
-rw-r--r--. 1 root root 832 617 09:56 README.en.md
-rw-r--r--. 1 root root 921 617 09:56 README.md
[root@mycentos test_gitee]# 

在这里插入图片描述
到此通过用户名密码方式的凭证已经可以获取到 Gitee 的代码了。

Maven集成

在 jenkins 上发布 Java 项目时需要使用 Maven 来进行构建打包

1、下载安装

# 进入
cd /usr/local/

# 创建一个 maven 目录
mkdir maven

#从阿里云上下载 maven 安装包
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

# 解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz

2、环境配置

# 执行命令
vi /etc/profile
# 添加如下配置
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

在这里插入图片描述
3、使配置生效并查看安装情况

source /etc/profile
mvn -version

在这里插入图片描述
4、jenkins 配置 Maven
在这里插入图片描述
5、安装 Maven 插件
在这里插入图片描述
在这里插入图片描述
安装 Maven 插件成功,在构建任务这里会出来构建一个 Maven 项目选项
在这里插入图片描述

6、使用 jenkins 用户在 /data/software 目录下新建一个 repository 文件夹,用来作为 Maven 的仓库

cd /data/software
mkdir repository

7、修改 Maven 的 settings.xml 文件,这里指定仓库目录和阿里云镜像

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  
  <!--本地仓库-->          
  <localRepository>/data/software/repository</localRepository>
  
  <mirrors>
    <!--阿里云镜像-->
    <mirror>
      <id>aliyun-maven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven mirror</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>
    ...
    ...
</settings>

8、Maven 测试项目构建

接下来创建一个 Java 项目传到 Gitee 上供 jenkins 拉取打包,这里如果运维人员不懂 Java 代码,可以让开发人员给一个上传代码的 Gitee 地址、用户名和密码。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
9、在 Gitee 上建一个项目
在这里插入图片描述

10、使用 Git 上传到码云

# 进入到本地的项目文件夹初始化仓库
$ git init

# 添加文件至工作区并提交
$ git add .
$ git commit -m "初始化提交"

# 关联 Gitee 远程仓库
$ git remote add origin https://gitee.com/WUHUAYANG/jenkins-project.git

# 将本地仓库推送到远程仓库的 master 分支,此处会弹出用户名密码交互
$ git push -u origin master

## 如果 push 报错可以先拉取一下,会有新的 gitee 生成的文件拉下来,然后重新添加提交并 push
$ git pull origin master --allow-unrelated-histories
$ git add .
$ git commit -m "拉取下来合并后再次提交"
$ git push -u origin master

在这里插入图片描述
11、jenkins 添加 Maven 项目任务

构建任务
在这里插入图片描述
连接 Git 仓库
在这里插入图片描述

编写 Maven 编译命令

在这里插入图片描述
保存后,点击立即构建,然后进入日志控制台查看日志

在这里插入图片描述
从日志可以看到代码已经在拉取了,而且走的是阿里云仓库,第一次拉取过程会比较长。
在这里插入图片描述
这里报了个错,我这边是重复构建几次就好了,这里有可能是因为我的网络问题
在这里插入图片描述
构建成功后查看 jenkins 的 workspace 目录下的 jar 包
在这里插入图片描述

通过查看 /data/software/repository 可以看到有存放拉取的 jar 包
在这里插入图片描述
从这两个可以证明 settings.xml 文件配置成功且有效的,到此 Maven 集成完毕

构建发布 SpringBoot 项目

这里以我上面创建的项目为例,添加应用访问的接口和端口,并将代码提交至 Gitee

在这里插入图片描述

在这里插入图片描述
浏览器访问本地的服务是否启动成功

在这里插入图片描述

下面将代码提交并且推送至 Gitee

在这里插入图片描述
在 Gitee 上检查到代码推送成功

这里发布项目启动还需要配置很重要的一部分,就是配置 Post Steps,选中执行 shell
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

shell中加入如下发布脚本:

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/home/webapps"
projectName="demo-0.0.1-SNAPSHOT"


echo "拷贝jar包到/home/webapps目录"
cp /root/.jenkins/workspace/jenkins-project/target/${projectName}.jar /home/webapps

echo "切换到启动脚本目录"
cd ${DIR}

BUILD_ID=dontKillMe

echo "停止服务"
sh stop.sh

echo "停止服务"
sh start.sh 

echo "success"

在上面命令中还有两个启动脚本 stop.sh 和 start.sh,这里 切换到 /home/webapps 目录下创建脚本

创建启动脚本 start.sh

touch start.sh
vi start.sh

将下面代码粘贴到 start.sh 中

#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail

APP_ID=demo-0.0.1-SNAPSHOT
APP_DIR="/home/webapps"

nohup java -Dspring.profiles.active=dev -jar ${APP_DIR}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
        sleep 3
        tail -n 10 release_out.log
        sleep 5
        tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
    echo "Application started ok"
    exit 0
else
    echo "Application started error"
    exit 1
fi

创建停止脚本 stop.sh:

touch stop.sh
vi stop.sh

将下面代码粘贴到 stop.sh 中

#!/bin/bash

APP_ID=demo-0.0.1-SNAPSHOT
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

下面在 jenkins 中点击构建进行启动和停止测试,查看日志输出是否正常,但是首先需要先把端口开放出来

1、如果是虚拟机则需要给防火墙添加 9100 端口
2、如果是 ECS 则需要在安全组中开放 9100 端口

以下是虚拟机:

# 开启防火墙 9100 端口
$ firewall-cmd --zone=public --add-port=9100/tcp --permanent
# 使配置生效
$ firewall-cmd --reload

下面执行构建成功
在这里插入图片描述
我们本地访问服务项目看是否生效,请求 http://192.168.2.128:9100/index
在这里插入图片描述
为什么还不能访问到呢?端口也开放了啊,其实不是端口没有开放的问题,解决办法其实非常容易,只需要在执行 .sh 文件之前,加上 BUILD_ID=dontKillMe 即可。

如上连接已经更换为:https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+build 。 原因:jenkins 在构建结束后会把额外启动的进程杀死

在这里插入图片描述
重新构建请求 http://192.168.2.128:9100/index
在这里插入图片描述
结果成功了。

下面我们把代码修改重新提交看会不会变化

在这里插入图片描述
jenkins 重新构建以后请求成功了
在这里插入图片描述

到此一个简单的 SpringBoot 项目发布完成,但企业中的发布往往比这要复杂很多,相信大家有了基础之后更加复杂的环境都能解决。

这里还要讲下,由于 jenkins 构建消耗内存极大,一般 jenkins 是一台单独配置的服务器,Java 项目一般在其他的服务器上,通过 ssh 免密登录进行 jar 拷贝,这个免密登录非常容易,网上也有很多文章,我工作的公司都是 jenkins 和 jar 分开搞。

下一篇文章将讲解 Docker、Jenkins、Git 自动化部署 SpringBoot 项目

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为 AI 语言模型,我无法编写完整的可自动化构建的微服务框架。但是,我可以为您提供一些指导性的信息和建议。 首先,您需要了解每个技术组件的作用和用途: - Spring Cloud Alibaba:一个基于 Spring Cloud 的微服务框架,提供了诸如服务注册与发现、配置中心、消息总线、负载均衡、断路器、数据监控等功能。 - Dubbo:一个高性能 RPC 框架,支持多种协议和序列化方式,可用于构建分布式系统。 - Docker:一个容器化技术,可以将应用程序和其依赖项打包成一个可移植的容器,方便在不同环境中部署和运行。 - Jenkins:一个流行的持续集成和持续交付工具,支持自动化构建、测试、打包和部署。 - Redis:一个内存数据库,常用于缓存和消息队列。 - Nacos:一个服务发现和配置管理中心,支持服务注册、配置管理、动态 DNS 服务等。 - Gateway:Spring Cloud Gateway 是一个基于 Spring Framework 5,Spring Boot 2 和 Project Reactor 的 API 网关,它支持路由、过滤和负载均衡等功能。 - MyBatis Plus:一个基于 MyBatis 的 ORM 框架,提供了更加便利的 API 和增强功能,减少了开发者的重复工作。 - PostgreSQL:一个开源的关系型数据库管理系统,支持 ACID 事务、并发控制等功能。 在了解了每个技术组件的作用和用途后,您可以开始构建您的微服务框架。下面是一些建议: 1. 搭建基础环境 首先,您需要搭建好基础环境,包括 JDK、Maven、Git 等。您可以选择使用 IDE,如 IntelliJ IDEA 或 Eclipse,来方便地进行代码开发和调试。 2. 搭建服务注册与发现中心 您可以选择使用 Nacos 来搭建服务注册与发现中心。Nacos 支持服务注册、配置管理、动态 DNS 服务等功能,可以方便地管理您的微服务。 3. 搭建 RPC 框架 您可以选择使用 Dubbo 来搭建 RPC 框架。Dubbo 支持多种协议和序列化方式,可以方便地构建分布式系统。 4. 搭建 API 网关 您可以选择使用 Spring Cloud Gateway 来搭建 API 网关。Spring Cloud Gateway 是一个基于 Spring Framework 5,Spring Boot 2 和 Project Reactor 的 API 网关,它支持路由、过滤和负载均衡等功能。 5. 搭建数据访问层 您可以选择使用 MyBatis Plus 来搭建数据访问层。MyBatis Plus 是一个基于 MyBatis 的 ORM 框架,提供了更加便利的 API 和增强功能,减少了开发者的重复工作。 6. 搭建数据库 您可以选择使用 PostgreSQL 来搭建数据库。PostgreSQL 是一个开源的关系型数据库管理系统,支持 ACID 事务、并发控制等功能。 7. 搭建缓存和消息队列 您可以选择使用 Redis 来搭建缓存和消息队列。Redis 是一个内存数据库,常用于缓存和消息队列。 8. 容器化 最后,您可以选择使用 Docker 将您的应用程序和其依赖项打包成一个可移植的容器,方便在不同环境中部署和运行。您可以使用 Jenkins 来进行自动化构建、测试、打包和部署。 总之,构建一个完整的可自动化构建的微服务框架需要您深入了解每个技术组件的作用和用途,并且需要一定的技术能力和经验。您可以参考相关的文档和教程来进行学习和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值