Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)

文章说明

本篇文章记录 Jenkins 发布 Gitee 上的 SpringBoot 项目全过程,内容包括 JDK 安装和配置、Maven 安装和配置、Git 安装和配置、Jenkins 部署 SpringBoot 项目的过程、编写项目启动和重启的脚本,通过 Jenkins 实现一键部署项目的功能。

安装所需的环境,如:JDK、Git 等,如果使用 dnf 或 yum,安装过程将会是非常方便,但是在后期要对这些环境进行管理,那将会是比较头疼。为了以后能更加方便的管理这些环境,下面只展示源码安装。如果觉得步骤繁琐,也可以自行使用 dnf 或 yum 安装环境。

本次记录所使用的系统为:腾讯云 CentOS Stream 8 64位,本次操作都是基于 root 用户操作。

安装 JDK 环境

无论是发布 Jenkins 还是发布 SpringBoot 项目,都依赖于 JDK 环境。对于 JDK 版本建议使用 JDK 1.8,下面是安装和配置 JDK 1.8 的步骤。

下载 JDK8 安装包:https://www.oracle.com/java/technologies/downloads/#java8
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第1张图片
下载好后将 JDK 安装包上传到 CentOS 机器中。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第2张图片
将其解压到 /usr/local 目录下。

tar -zxvf jdk-8u321-linux-x64.tar.gz -C /usr/local/

配置 JDK 的环境:

vim /etc/profile

在尾部添加下面内容:( JAVA_HOME 是解压后的 JDK 路径)

export JAVA_HOME=/usr/local/jdk1.8.0_321
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第3张图片
重新加载配置文件:

source /etc/profile

检查 JDK 是否完成配置环境:

java -version
javac -version

Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第4张图片
如果能正常显示 JDK 的版本号就说明已经完成了 JDK 的环境配置。如果没有正常显示,请重新按照步骤操作。

安装 Maven 环境

要实现 Jenkins 自动安装和部署 SpringBoot 项目,那么就得需要安装和配置 Mavne 环境,下面是安装和配置 Mavne 环境的步骤。

下载 Maven 安装包:https://maven.apache.org/download.cgi
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第5张图片
下载好后将 Maven 安装包上传到 CentOS 机器中。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第6张图片
将其解压到 /usr/local 目录下:

tar -zxvf apache-maven-3.8.6-bin.tar.gz -C /usr/local/

配置 Maven 的环境:

vim /etc/profile

在尾部添加下面内容:( MAVEN_HOME 是解压后的 Maven 路径)

export MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=$MAVEN_HOME/bin:$PATH

Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第7张图片
加载配置文件:

source /etc/profile

检查 Maven:

mvn -version

Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第8张图片
修改 Maven 依赖包的路径、修改 Maven 的仓库地址为阿里云仓库的地址:

vim /usr/local/apache-maven-3.8.6/conf/settings.xml

在 settings 下配置 localRepository 的目录:

/usr/local/maven-repository

Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第9张图片
删除或注释 mirrors 里面的内容:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第10张图片
将 mirrors 标签下改为以下内容:


  alimaven
  central
  aliyun maven
  http://maven.aliyun.com/nexus/content/repositories/central/


  alimaven
  aliyun maven
  http://maven.aliyun.com/nexus/content/groups/public/
  central


  central
  Maven Repository Switchboard
  http://repo1.maven.org/maven2/
  central


  repo2
  central
  Human Readable Name for this Mirror.
  http://repo2.maven.org/maven2/


  ibiblio
  central
  Human Readable Name for this Mirror.
  http://mirrors.ibiblio.org/pub/mirrors/maven2/


  jboss-public-repository-group
  central
  JBoss Public Repository Group
  http://repository.jboss.org/nexus/content/groups/public


  google-maven-central
  Google Maven Central
  https://maven-central.storage.googleapis.com
  central



  maven.net.cn
  oneof the central mirrors in china
  http://maven.net.cn/content/groups/public/
  central

Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第11张图片

安装 Git 环境

要实现 Jenkins 自动发布 Gitee 上的项目,那么需要安装和配置 Gitee 环境,下面是安装和配置 Gitee 环境的步骤。

下载 Git 安装包:https://git-scm.com/download/linux
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第12张图片
下载好后将 Git 安装包上传到 CentOS 机器中。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第13张图片
解压压缩包:

tar -zxvf git-2.37.2.tar.gz

安装相关依赖:

dnf install -y gcc automake autoconf libtool make curl-devel expat-devel gettext-devel openssl-devel zlib-devel

编译并安装 Git 到 /usr/local/git 目录中:

cd git-2.37.2
make prefix=/usr/local/git all install

配置 Git 的环境:

vim /etc/profile

在尾部添加下面内容:( GIT_HOME 是解压后的 Maven 路径)

export GIT_HOME=/usr/local/git
export PATH=$GIT_HOME/bin:$PATH

Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第14张图片
加载配置文件:

source /etc/profile

检查 Git:

git --version

在这里插入图片描述
到这里 Git 就已经完成安装了,但是现在 Git 在拉取代码或上传代码时每次都要输入账户和密码,下面的步骤是让 Git 保存账户和密码。

cd ~
git config --global credential.helper store
vim .gitconfig

将内容修改成以下:(将 name 和 email 修改成你的, 一定要注意格式,name 和 email 前面是一个 tab,不是空格)

[user]
        name = jiale
        email = [email protected]
[credential]
        helper = store

Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第15张图片
然后随便克隆一个该账号下的私有的仓库:

git clone https://xxx/xxx/xxx.git

然后输入账号和密码,此时就会保存账号密码,之后拉取代码或上传代码时就不需要输入账号密码了。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第16张图片

运行 Jenkins 项目

要在 CentOS 机器中安装 Jenkins 有两种方式:1.使用安装包的方式安装;2.使用 war 包通过 java 直接运行。
既然我们已经在机器中安装了 JDK,那么就直接采用启动 war 包的形式启动 Jenkins。

下载 Jenkins WAR 包:https://www.jenkins.io/download/
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第17张图片
将下载的 Jenkins war 包上传到 CentOS 机器中。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第18张图片
后台启动 Jenkins:

# 启动的默认端口号为 80080
nohup java -jar jenkins.war > jeckins.log 2>&1 &
# 如果需要指定端口号使用 --httpPort 参数启动
nohup java -jar jenkins.war --httpPort=8081 > jeckins.log 2>&1 &

命令说明

  1. nohup:表示进程在当用户注销或者网络断开时不会被终止。
  2. java -jar jenkins.war:Java 启动 war 包命令。
  3. jeckins.log:表示日志输出到的位置。
  4. 2>&1:表示不仅命令行正常的输出保存到日志文件中,产生错误信息的输出也保存到日志文件中。

启动之后会自动生成日志文件:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第19张图片
这个文件保存了 Jenkins 的初始密码,查看这个文件:

car jeckins.log

找到默认的密码:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第20张图片
访问机器的 8080 端口,如果启动时指定了端口号,就访问指定的端口号。
如果无法访问请检查端口号的安全组或防火墙是否开启。

输出 Jenkins 的默认密码,点击继续:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第21张图片
选择【安装推荐的插件】,等待安装完成
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第22张图片
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第23张图片
进入用户创建页面,自己填写。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第24张图片
实例配置默认即可,点击【保存并完成】。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第25张图片
点击【开始使用 Jenkins】。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第26张图片
此时就已经完成了 Jenkins 的安装。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第27张图片

Jenkins 全局指定环境

在上面我们安装了 JDK、Maven、Git,这时我们需要告诉 Jenkins 这些环境安装在哪儿。

依次点击【Manage Jenkins】- 【Global Tool Configuration】
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第28张图片
设置 Maven 的 settings.xml 文件的路径:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第29张图片
设置 JDK 安装路径:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第30张图片
设置 git 文件的路径:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第31张图片
【注意】上面的 /usr/local/git/bin/git 是 git 文件的路径,不是 git 的安装路径,如果使用 yum 或 dnf 安装的 git 会在 /usr/bin/git 路径下。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第32张图片
设置 Maven 的安装路径:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第33张图片

然后点击保存:
在这里插入图片描述

Jenkins 部署 Gitee 上的 SpringBoot 项目

Jenkins 在构建 maven 项目时,需要先安装 【Maven Integration】插件。

依次点击【Manage Jenkins】- 【Manage Plugins】
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第34张图片
依次操作【可选插件】-【输入框输入 Maven Integration】 -【勾选】-【Install without restart】
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第35张图片
勾选【安装完成后重启Jenkins(空闲时)】
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第36张图片
插件安装好后会自动重启 Jenkins 服务,然后刷新页面重新登录 Jenkins。

然后点击【新建任务】Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第37张图片
输入任务名称 - 选择【构建一个 maven 项目】- 【确定】
需要注意的是:只有在 Jenkins 中安装了 Maven Integration 插件,才会有【构建一个 maven 项目】的选项。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第38张图片
填写【General】信息:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第39张图片
在【源码管理】中,选择 Git,在 【Repository URL】 输入远程仓库地址,我在 Gitee 中提前创建了 file-depot 项目,并且项目是私有的。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第40张图片
输入仓库地址和所使用的分支。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第41张图片
注意:如果在安装 git 的时候,设置了保存用户名和密码,那么就不需要配置 【Credentials】 下的登录凭证信息,如果没有保存用户名和密码,就需要设置【Credentials】下的信息,下面是配置【Credentials】的步骤,已经保存账户名和密码可以忽略下面步骤

依次点击【Credentials】- 【添加】
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第42张图片
输入账号和密码信息,然后点击添加。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第43张图片
在【Credentials】中选择我们刚刚添加的账号。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第44张图片
然后点击保存。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第45张图片
回到首页,点击【Dashboard】
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第46张图片
点击【构建】按钮。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第47张图片
等待构建,出现以下的信息表示已经构建成功。(第一次构建时没有绿色的√,上图我在事先已经构建过一次,所以才会有绿色的√)
在这里插入图片描述
题外话:比较重要,要理解 jenkins 的工作目录
jenkins 构建其实就相当于在执行 maven 的打包命令,构建完毕之后会生成一个 target 目录和 jar/war 包。

构建的目录在 cd ~/.jenkins/workspace/任务名称 下。

我们看一下家目录:cd ~ 里面存在一个 .jenkins,这个目录就是 jenkins 运行时自动生成的内容。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第48张图片
进入 .jenkins 目录下,我们在首页创建的所有的任务都保存在 workspace 目录下:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第49张图片
进入 workspace 目录下,文件夹名字和我们创建任务的名称一致:
在这里插入图片描述
进入任务文件夹,可以看到我们的源代码,以及构建之后生成的 target 目录。
在这里插入图片描述
进入 target 目录,可以看到打包生成的 jar/war 包。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第50张图片
要启动 jar/war 包,可以使用 java -jar 包名称 命令执行。在 Jenkins 中执行构建之后,可以指定需要执行的 shell 命令或脚本,我们只需要设置好脚本,在每次执行构建结束后,就自动部署执行项目。

题外话结束

要实现 jenkins 在构建完毕后自动执行某些脚本,那就需要再安装一个插件【Post build task】

回到首页,点击 【Manage Jenkins(系统管理)】-【Manage Plugins(插件管理)】-【可选插件】-输入框中输入【Post build task】
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第51张图片
安装 【Post build task】插件,并重启 jenkins。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第52张图片
刷新页面,重新登录 jenkins,回到首页,点击项目名称:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第53张图片
点击配置:
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第54张图片
依次点击【构建后操作】-【增加构建后操作步骤】-【post build task】
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第55张图片
在【Log text】下填写内容 test (固定)。
在 【Script】填写以下脚本:

#!/bin/bash
# 这里可替换为你的 war 或 jar 包路径
APP_NAME=target/file-depot-0.0.1-SNAPSHOT.jar

# 检查程序是否在运行
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
date > /root/start.log
if [ -z "${pid}" ]; then
    # 如果程序不存在直接启动程序,根据个人需求是否需要指定端口号
    nohup java -jar $APP_NAME >> /root/start.log 2>&1 &
else
    # 如果已经执行,将程序停止
    echo '程序目前启动中,正在关闭程序...' >> /root/start.log
    kill -9 $pid
    echo '已关闭运行中的程序~' >> /root/start.log
    # 停止之后启动程序,根据个人需求是否需要指定端口号
    nohup java -jar $APP_NAME >> /root/start.log 2>&1 &
fi

脚本需要注意的地方

  1. jenkins 【post build task】下的脚本,当前操作的目录在:~/.jenkins/workspace/任务名称 下。
  2. java -jar $APP_NAME 可以加属性参数,如端口号、应用名称、环境选择等。
  3. 上述的脚本,当程序以及运行时,会自动把已启动的程序停止,然后重新运行程序(也是程序重新发布的操作)。
  4. /root/start.log 为输出日志,可自己定义输出文件的位置。

然后点击保存。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第56张图片
看下我们现在所占用的端口号:netstat -lnpt
我的 jar 包指定的是 80 端口,目前 80 端口没被使用。
在这里插入图片描述
回到首页,再次点击构建,等待构建成功。
在这里插入图片描述
再次查看所占用的端口号:netstat -lnpt
可以发现 80 端口以及被使用了,证明我们的程序也以及启动起来了。
在这里插入图片描述
访问机器的 80 端口,可以看到我们的项目以及能正常访问了。
Jenkins 发布 Gitee 上的 SpringBoot 项目全过程(详细)_第57张图片
之后我们每次修改了代码,只需要将代码上传到 gitee 中,然后在 jenkins 中点击构建,即可实现重新发布项目。

到此位置 Jenkins 发布 Gitee 上的 SpringBoot 项目全过程就已经结束了~

如果有哪里不明白或者出现步骤不一样的情况,欢迎留言~~

你可能感兴趣的:(Linux,Java,jenkins,spring,boot,运维)