Jenkins自动化构建运行Springboot项目

通过在Jenkins中创建流水线任务,编写流水线脚本以实现自动化构建和部署SpringBoot项目

好处

  1. 自动化: 自动化整个部署流程,减少人工干预,降低出错率。

  2. 一致性: 确保每次部署都遵循相同的步骤和配置,提高部署的一致性。

  3. 快速反馈: 快速地将代码更改部署到测试或生产环境,便于及时发现和解决问题。

  4. 持续集成: 与版本控制系统(如Git)集成,实现代码的持续集成,提高开发效率。

  5. 持续部署: 可选地实现持续部署,自动将通过测试的代码部署到生产环境。

  6. 易于回滚: 出现问题时,可以快速回滚到上一个稳定版本。

  7. 环境隔离: 通过Jenkins的agent,可以在不同的环境(如开发、测试、生产)上运行流水线,实现环境隔离。

  8. 扩展性: Jenkins提供了丰富的插件生态,可以根据需要添加新的功能。

  9. 监控与报告: 可以集成监控工具,收集部署过程中的数据,生成报告。

  10. 协作: 促进开发、测试和运维团队之间的协作,提高团队效率。

  11. 灵活性: 可以根据项目需求定制流水线,适应不同的开发和部署模式。

  12. 节省时间: 自动化部署流程可以节省大量手动操作的时间,让开发人员专注于更有价值的任务。

  13. 提高质量: 通过自动化测试和部署,可以更早地发现问题,提高软件质量。

  14. 可追溯性: Jenkins提供了详细的构建历史和日志,便于追踪问题和审计。

  15. 减少人为错误: 自动化减少了人为操作错误的可能性,提高了部署的可靠性。

使用Jenkins流水线可以显著提高软件开发和部署的效率和质量,是现代DevOps实践的重要组成部分。

构建

General

        通用配置:描述这部分一般是填写这个任务的作用以及注意事项的,正常情况下建议不要留空白,根据实际情况来填写。保存后后续可以在任务的主页上面看到对应的内容了。

源码管理

下的Git源码管理功能是由Git插件提供的,选择和添加必要信息

Build Steps

shell命令是在使用Maven构建工具时的命令行参数,用于构建和安装项目

clean install -pl companion-robot-api -am -D dev

解释:

clean :清理项目的工作目录,删除之前构建生成的所有文件

install :用于将构建的包安装到本地仓库中

-pl:用于指定构建特定的子模块或模块列表。如果不指定,则默认构建所有模块

-am : 用于强制构建模块以及其依赖的模块,即使它们是最新的

-D : Maven的-D选项,用于设置系统属性

dev:指定开发环境

综上所述,整个命令的含义是:清理并安装名为companion-robot-api的模块,同时强制构建该模块及其依赖的模块,设置一个名为dev的系统属性,这可能用于配置特定的开发环境设置

cd /root/.jenkins/workspace/dev-zmrobot-companion/companion-robot-api/target/
rm -rf companion-api.tar.gz

解释:

cd:进入到指定目录

rm -rf :删除指定的目录及其内容

综上所述,整个命令的含义是:切换到构建输出目录,并删除一个特定的压缩文件

tar -czvf companion-api.tar.gz *.jar -C classes application-dev.yml

解释:

tar -czvf:用来打包和压缩文件的命令

companion-api.tar.gz :创建的归档文件的名称

*.jar:这是一个通配符,表示当前目录下所有以.jar结尾的文件

-C classes application-dev.yml:改变随后的参数所指向的目录classes ,除了classes目录下的所有.jar文件外,还要包含这个配置文件到压缩包中

综上所述,整个命令的含义是:在当前目录下创建一个名为companion-api.tar.gz的压缩文件,其中包含classes目录下所有的.jar文件以及当前目录下的application-dev.yml配置文件

scp /root/.jenkins/workspace/dev-zmrobot-companion/companion-robot-api/target/companion-api.tar.gz 192.168.0.157:/data/recent/

解释:

scp:执行文件的复制操作

综上所述,整个命令的含义是:将本地路径/root/.jenkins/workspace/dev-zmrobot-companion/companion-robot-api/target/下的companion-api.tar.gz文件复制到IP地址为192.168.0.157的远程机器的/data/recent/目录下

ansible zmrobotdev -m copy -a 'force=yes src=/home/jenkins/script-zmrobot/companion-api.sh dest=/data/script/'

解释:

ansible :用于执行配置管理和自动化任务

zmrobotdev :用于指定要连接的主机或主机组

-m copy:-m后面跟着的是模块的名称。copy模块用于将文件从本地复制到远程主机

-a:用于传递模块参数

'force=yes src=/home/jenkins/script-zmrobot/companion-api.sh dest=/data/script/':这是传递给copy模块的参数字符串,使用单引号括起来以确保参数作为整体传递

解释:

force=yes: 表示如果目标文件已经存在,Ansible将覆盖它

src=/home/jenkins/script-zmrobot/companion-api.sh:指定了要复制的源文件的路径

dest=/data/script/:目标路径

综上所述,整个命令的含义是:使用Ansible的copy模块,强制将本地路径/home/jenkins/script-zmrobot/companion-api.sh的脚本文件复制到指定的远程主机zmrobotdev/data/script/目录下。如果远程目录中已经存在同名文件,它将被覆盖

ansible zmrobotdev -m command -a 'sh /data/script/companion-api.sh'

解释:

ansible :用于执行配置管理和自动化任务

zmrobotdev :用于指定要连接的主机或主机组

-m command :-m后面跟着的是模块的名称。command模块用于在远程主机上执行命令

-a 'sh /data/script/companion-api.sh': 传递给command模块的参数字符串,参数指定了要在远程主机上执行的命令

companion-api.sh

这段脚本是一个自动化部署流程,用于停止服务、备份代码、清理环境、更新代码和启动服务

# 停止服务
ps -ef | grep /data/service/companion-api/ | grep -v grep | awk '{print $2}' | xargs kill -9
# 备份代码
date_str=`date '+%F_%H%M'`
mkdir -p /data/backup/companion-api/"$date_str"
cd /data/service/companion-api/
tar -czvf companion-api.tar.gz application.properties *.jar
mv -f companion-api.tar.gz /data/backup/companion-api/"$date_str"
# 清理环境
rm -rf application-dev.yml *.jar
# 更新代码
tar -xzvf /data/recent/companion-api.tar.gz -C /data/service/companion-api/
# 启动服务
sleep 10
sh /data/service/companion-api/bin/start.sh

停止服务

ps -ef | grep /data/service/companion-api/ | grep -v grep | awk '{print $2}' | xargs kill -9

解释:

ps -ef :列出系统中所有的进程

grep /data/service/companion-api/ :过滤出包含指定路径的进程

grep -v grep :排除包含grep命令本身的行

awk '{print $2}' :使用awk打印出进程ID(通常是第二列)

xargs kill -9 :使用xargs将上一步得到的PID传递给kill命令,强制杀死这些进程

备份代码

date_str=`date '+%F_%H%M'`
mkdir -p /data/backup/companion-api/"$date_str"
cd /data/service/companion-api/
tar -czvf companion-api.tar.gz application.properties *.jar
mv -f companion-api.tar.gz /data/backup/companion-api/"$date_str"

解释:

date_str=`date '+%F_%H%M'` :使用date命令生成一个时间字符串,用于创建备份目录

mkdir -p:创建备份目录

tar -czvf:创建一个包含application.properties和所有.jar文件的压缩包

mv -f :强制移动压缩包到备份目录

清理环境

rm -rf application-dev.yml *.jar

解释:

rm -rf :强制删除指定的文件和目录,这里删除了application-dev.yml配置文件和所有.jar文件。

更新代码

tar -xzvf /data/recent/companion-api.tar.gz -C /data/service/companion-api/

解释:

tar -xzvf :解压指定的压缩包到指定目录

启动服务

sleep 10
sh /data/service/companion-api/bin/start.sh

解释:

sleep 10:等待10秒,确保所有更新操作完成

sh /data/service/companion-api/bin/start.sh:执行启动脚本,启动服务

start.sh

SERVER_BIN_DIR=$(cd "$(dirname "$0")"; pwd)

SERVER_DIR=$(cd "$SERVER_BIN_DIR";cd "..";pwd)

echo 脚本目录:$SERVER_BIN_DIR
echo 项目目录:$SERVER_DIR

#读取配置文件
SERVER_NAME=`sed '/^SERVER_NAME=/!d;s/.*=//' $SERVER_BIN_DIR/deploy.conf`
VM=`sed -n '2p' $SERVER_BIN_DIR/deploy.conf`


#设定系统运行环境变量
LC_ALL="zh_CN.UTF-8"
LANG="zh_CN.UTF-8"
export LC_ALL
export LANG


#设定服务程序路径与名称(注意:此路径是文件路径,包含执行文件名称)
SERVER_PATH="$SERVER_DIR/**.jar"


#查看进程是否存在
RESULT=$(ps -ef | grep ${SERVER_PATH} | grep -v "grep")


#判断RESULT是否不为空,不为空则说明进程已经启动
if [ -n "$RESULT" ]; then
    echo [$SERVER_NAME] 正在运行
else
    #启动服务器
    source /etc/profile
    nohup java -jar $VM $SERVER_PATH >/dev/null 2>&1 &

        echo  [$SERVER_NAME] 启动完成
fi

设置脚本和项目目录变量

SERVER_BIN_DIR=$(cd "$(dirname "$0")"; pwd)
SERVER_DIR=$(cd "$SERVER_BIN_DIR";cd "..";pwd)

解释:

  • dirname "$0"获取脚本文件所在的目录。
  • cd命令结合pwd获取当前目录的完整路径。
  • 第一个命令设置SERVER_BIN_DIR为脚本所在的目录。
  • 第二个命令首先切换到SERVER_BIN_DIR,然后切换到上一级目录,设置SERVER_DIR为项目的根目录。

打印脚本和项目目录

echo 脚本目录:$SERVER_BIN_DIR
echo 项目目录:$SERVER_DIR

读取配置文件

SERVER_NAME=`sed '/^SERVER_NAME=/!d;s/.*=//' $SERVER_BIN_DIR/deploy.conf`
VM=`sed -n '2p' $SERVER_BIN_DIR/deploy.conf`

解释:

使用sed命令从deploy.conf配置文件中提取SERVER_NAME和第二行的内容(VM可能是JVM参数)

设定系统运行环境变量

LC_ALL="zh_CN.UTF-8"
LANG="zh_CN.UTF-8"
export LC_ALL
export LANG

解释:

设置区域设置和语言环境变量,用于支持中文。

设定服务程序路径与名称

SERVER_PATH="$SERVER_DIR/**.jar"

解释:

这里使用glob模式**.jar来匹配项目目录下所有jar文件,但通常服务只有一个jar文件,可能需要调整为具体的服务jar文件名

查看进程是否存

RESULT=$(ps -ef | grep ${SERVER_PATH} | grep -v "grep")

解释:

使用ps查看所有进程,通过grep查找包含SERVER_PATH的进程,排除grep命令本身

判断进程是否启动并相应操作

if [ -n "$RESULT" ]; then
    echo [$SERVER_NAME] 正在运行
else
    #启动服务器
    source /etc/profile
    nohup java -jar $VM $SERVER_PATH >/dev/null 2>&1 &

    echo  [$SERVER_NAME] 启动完成
fi

解释:

如果RESULT变量不为空,说明服务正在运行

如果服务没有运行,使用nohup启动Java服务,并将输出重定向到/dev/null,使进程在后台运行

source /etc/profile用于加载系统环境变量配置

deploy.conf

-Xms1024M -Xmx1024M -XX:+HeapDumpOnOutOfMemoryError

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值