本篇文章记录 Jenkins 发布 Gitee 上的 SpringBoot 项目全过程,内容包括 JDK 安装和配置、Maven 安装和配置、Git 安装和配置、Jenkins 部署 SpringBoot 项目的过程、编写项目启动和重启的脚本,通过 Jenkins 实现一键部署项目的功能。
安装所需的环境,如:JDK、Git 等,如果使用 dnf 或 yum,安装过程将会是非常方便,但是在后期要对这些环境进行管理,那将会是比较头疼。为了以后能更加方便的管理这些环境,下面只展示源码安装。如果觉得步骤繁琐,也可以自行使用 dnf 或 yum 安装环境。
本次记录所使用的系统为:腾讯云 CentOS Stream 8 64位,本次操作都是基于 root 用户操作。
无论是发布 Jenkins 还是发布 SpringBoot 项目,都依赖于 JDK 环境。对于 JDK 版本建议使用 JDK 1.8,下面是安装和配置 JDK 1.8 的步骤。
下载 JDK8 安装包:https://www.oracle.com/java/technologies/downloads/#java8
下载好后将 JDK 安装包上传到 CentOS 机器中。
将其解压到 /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
source /etc/profile
检查 JDK 是否完成配置环境:
java -version
javac -version
如果能正常显示 JDK 的版本号就说明已经完成了 JDK 的环境配置。如果没有正常显示,请重新按照步骤操作。
要实现 Jenkins 自动安装和部署 SpringBoot 项目,那么就得需要安装和配置 Mavne 环境,下面是安装和配置 Mavne 环境的步骤。
下载 Maven 安装包:https://maven.apache.org/download.cgi
下载好后将 Maven 安装包上传到 CentOS 机器中。
将其解压到 /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
source /etc/profile
检查 Maven:
mvn -version
修改 Maven 依赖包的路径、修改 Maven 的仓库地址为阿里云仓库的地址:
vim /usr/local/apache-maven-3.8.6/conf/settings.xml
在 settings 下配置 localRepository 的目录:
/usr/local/maven-repository
删除或注释 mirrors 里面的内容:
将 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 上的项目,那么需要安装和配置 Gitee 环境,下面是安装和配置 Gitee 环境的步骤。
下载 Git 安装包:https://git-scm.com/download/linux
下载好后将 Git 安装包上传到 CentOS 机器中。
解压压缩包:
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
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
git clone https://xxx/xxx/xxx.git
然后输入账号和密码,此时就会保存账号密码,之后拉取代码或上传代码时就不需要输入账号密码了。
要在 CentOS 机器中安装 Jenkins 有两种方式:1.使用安装包的方式安装;2.使用 war 包通过 java 直接运行。
既然我们已经在机器中安装了 JDK,那么就直接采用启动 war 包的形式启动 Jenkins。
下载 Jenkins WAR 包:https://www.jenkins.io/download/
将下载的 Jenkins war 包上传到 CentOS 机器中。
后台启动 Jenkins:
# 启动的默认端口号为 80080
nohup java -jar jenkins.war > jeckins.log 2>&1 &
# 如果需要指定端口号使用 --httpPort 参数启动
nohup java -jar jenkins.war --httpPort=8081 > jeckins.log 2>&1 &
命令说明
nohup
:表示进程在当用户注销或者网络断开时不会被终止。java -jar jenkins.war
:Java 启动 war 包命令。jeckins.log
:表示日志输出到的位置。2>&1
:表示不仅命令行正常的输出保存到日志文件中,产生错误信息的输出也保存到日志文件中。
启动之后会自动生成日志文件:
这个文件保存了 Jenkins 的初始密码,查看这个文件:
car jeckins.log
找到默认的密码:
访问机器的 8080 端口,如果启动时指定了端口号,就访问指定的端口号。
如果无法访问请检查端口号的安全组或防火墙是否开启。
输出 Jenkins 的默认密码,点击继续:
选择【安装推荐的插件】,等待安装完成
进入用户创建页面,自己填写。
实例配置默认即可,点击【保存并完成】。
点击【开始使用 Jenkins】。
此时就已经完成了 Jenkins 的安装。
在上面我们安装了 JDK、Maven、Git,这时我们需要告诉 Jenkins 这些环境安装在哪儿。
依次点击【Manage Jenkins】- 【Global Tool Configuration】
设置 Maven 的 settings.xml 文件的路径:
设置 JDK 安装路径:
设置 git 文件的路径:
【注意】上面的 /usr/local/git/bin/git
是 git 文件的路径,不是 git 的安装路径,如果使用 yum 或 dnf 安装的 git 会在 /usr/bin/git
路径下。
设置 Maven 的安装路径:
Jenkins 在构建 maven 项目时,需要先安装 【Maven Integration】插件。
依次点击【Manage Jenkins】- 【Manage Plugins】
依次操作【可选插件】-【输入框输入 Maven Integration】 -【勾选】-【Install without restart】
勾选【安装完成后重启Jenkins(空闲时)】
插件安装好后会自动重启 Jenkins 服务,然后刷新页面重新登录 Jenkins。
然后点击【新建任务】
输入任务名称 - 选择【构建一个 maven 项目】- 【确定】
需要注意的是:只有在 Jenkins 中安装了 Maven Integration 插件,才会有【构建一个 maven 项目】的选项。
填写【General】信息:
在【源码管理】中,选择 Git,在 【Repository URL】 输入远程仓库地址,我在 Gitee 中提前创建了 file-depot 项目,并且项目是私有的。
输入仓库地址和所使用的分支。
注意:如果在安装 git 的时候,设置了保存用户名和密码,那么就不需要配置 【Credentials】 下的登录凭证信息,如果没有保存用户名和密码,就需要设置【Credentials】下的信息,下面是配置【Credentials】的步骤,已经保存账户名和密码可以忽略下面步骤
依次点击【Credentials】- 【添加】
输入账号和密码信息,然后点击添加。
在【Credentials】中选择我们刚刚添加的账号。
然后点击保存。
回到首页,点击【Dashboard】
点击【构建】按钮。
等待构建,出现以下的信息表示已经构建成功。(第一次构建时没有绿色的√,上图我在事先已经构建过一次,所以才会有绿色的√)
题外话:比较重要,要理解 jenkins 的工作目录
jenkins 构建其实就相当于在执行 maven 的打包命令,构建完毕之后会生成一个 target 目录和 jar/war 包。
构建的目录在 cd ~/.jenkins/workspace/任务名称
下。
我们看一下家目录:cd ~
里面存在一个 .jenkins,这个目录就是 jenkins 运行时自动生成的内容。
进入 .jenkins 目录下,我们在首页创建的所有的任务都保存在 workspace 目录下:
进入 workspace 目录下,文件夹名字和我们创建任务的名称一致:
进入任务文件夹,可以看到我们的源代码,以及构建之后生成的 target 目录。
进入 target 目录,可以看到打包生成的 jar/war 包。
要启动 jar/war 包,可以使用 java -jar 包名称
命令执行。在 Jenkins 中执行构建之后,可以指定需要执行的 shell 命令或脚本,我们只需要设置好脚本,在每次执行构建结束后,就自动部署执行项目。
题外话结束
要实现 jenkins 在构建完毕后自动执行某些脚本,那就需要再安装一个插件【Post build task】
回到首页,点击 【Manage Jenkins(系统管理)】-【Manage Plugins(插件管理)】-【可选插件】-输入框中输入【Post build task】
安装 【Post build task】插件,并重启 jenkins。
刷新页面,重新登录 jenkins,回到首页,点击项目名称:
点击配置:
依次点击【构建后操作】-【增加构建后操作步骤】-【post build task】
在【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
脚本需要注意的地方
- jenkins 【post build task】下的脚本,当前操作的目录在:
~/.jenkins/workspace/任务名称
下。java -jar $APP_NAME
可以加属性参数,如端口号、应用名称、环境选择等。- 上述的脚本,当程序以及运行时,会自动把已启动的程序停止,然后重新运行程序(也是程序重新发布的操作)。
- /root/start.log 为输出日志,可自己定义输出文件的位置。
然后点击保存。
看下我们现在所占用的端口号:netstat -lnpt
我的 jar 包指定的是 80 端口,目前 80 端口没被使用。
回到首页,再次点击构建,等待构建成功。
再次查看所占用的端口号:netstat -lnpt
可以发现 80 端口以及被使用了,证明我们的程序也以及启动起来了。
访问机器的 80 端口,可以看到我们的项目以及能正常访问了。
之后我们每次修改了代码,只需要将代码上传到 gitee 中,然后在 jenkins 中点击构建,即可实现重新发布项目。
到此位置 Jenkins 发布 Gitee 上的 SpringBoot 项目全过程就已经结束了~
如果有哪里不明白或者出现步骤不一样的情况,欢迎留言~~