jenkins + git +spring boot 自动部署

本文记录了在Ubuntu环境下,使用Jenkins自动化部署SpringBoot项目的全过程,包括解决git权限问题、配置PublishoverSSH插件、上传jar包到指定目录并执行启动脚本等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用spring boot写了个检测考勤记录的程序,感觉部署太麻烦,准备用jenkins,项目上用的是svn,我用的git,遇到了不少坑,特此记录。

环境:系统是ubuntu 

git服务器、Jenkins、应用部署服务器都是这一台 

Jenkins安装

这个过程就不说了,比较简单,网上教程很多。

参考大神教程:

https://www.cnblogs.com/ityouknow/p/7899349.html

https://www.cnblogs.com/fakerblog/p/8482682.html

根据教程安装好jenkin,配置好各种插件和环境,比较重要的是Publish over SSH,需要测试成功

 

部署项目

这个也不详细说了,主要记录下遇到的问题

1.git检出代码权限问题

Failed to connect to repository : Command "git ls-remote -h git@140.143.241.138:/home/gitrepo/test.git HEAD" returned status code 128:
stdout: 
stderr: Permission denied, please try again. 
Permission denied, please try again. 
Permission denied (publickey,password). 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

之前用git也比较少,看报错信息应该是没有权限,下面的凭据添加了好几个都不行

解决

参考网上的一种解决方案:https://www.jianshu.com/p/ed0edb93e234

为jenkins应用新建一个jenkins用户,用于检出代码

为jenkins生成SSH 私钥和公钥

将jenkins用户的公钥添加到git用户的authorized_keys文件中

然后配置检出代码的凭据就可以了,具体操作如下

#添加用户
useradd jenkins
#设置密码
passwd jenkins

#切换jenkins用户
su jenkins
#生成公钥私钥
ssh-keygen -t rsa -C "你的邮箱标识"
#在jenkins home路径下生成.ssh文件夹,里面包含两个文件
cd /home/jenkins/.ssh
ls
id_rsa  id_rsa.pub
#其中id_rsa中存储的是私钥private key,id_rsa.pub是公钥public key

#接下来将jenkins的公钥也就是id_rsa.pub中的内容添加到git用户的authorized_keys文件中
#因为我jenkins和git都在同一台服务器上,可以直接使用下面的命令
cat /home/jenkins/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys

配置凭据,username填写jenkins用户名,key中复制jenkins用户的私钥,也就是id_rsa文件中的内容

 

 

2.上传jar包到指定运行目录

上面的Name填写服务器地址

Source files填写jar包相对于jenkins工作区项目根目录的相对路径

比如我的工程jenkins拉取代码编译的jar包位置在

/home/ubuntu/.jenkins/workspace/Oalert/target/oalert-0.0.1-SNAPSHOT.jar

这里我只需要填写target/*.jar  之前填写的是/target/*.jar测试不成功

Remove prefix猜测可能是需要填写去掉的路径前缀,只留下文件名称,这里填写target/

Remote directory这里应该是将文件上传的相对路径,我在配置Publish over SSH插件信息时路径就是填写的jar包运行路径,这里空着

如果之前没有配置,这里应该填写的是相对于程序运行服务器用户home目录的路径,比如我的用户名是ubuntu,这里填写相对于/home/ubuntu的路径

Exec command这里填写上传完jar包文件后执行的命令

网上普遍做法是执行shell脚本,我也是采用这种方法,参考:https://www.cnblogs.com/fakerblog/p/8482682.html

echo `pwd` #这个命令可以在jenkins构建的时候在控制台记录打印当前所在路径
cd /home/ubuntu/Project/OAlert #进入到脚本所在路径
chmod 777 *.sh                 #为脚本添加运行权限
./stop.sh                      #运行脚本停止之前正在运行的程序
./start.sh                     #运行脚本启动新上传的jar包程序

stop.sh文件

#!/bin/bash
echo `pwd`
echo `ls -l`
echo "stop SpringBoot BAppApiServerApplication"
pid=`ps -ef | grep oalert-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
echo “旧应用进程id:$pid”
if [ -n "$pid" ]
then
kill -9 $pid
fi

start.sh文件

#!/bin/bash
#指定jdk路径,这里我用默认的java不行,必须这么配置才能启动程序,原因不明
export JAVA_HOME=/opt/java/jdk1.8.0_161
echo ${JAVA_HOME}

echo "授权当前用户"
chmod 777 /home/ubuntu/Project/OAlert/oalert-0.0.1-SNAPSHOT.jar
echo "执行...."
cd /home/ubuntu/Project/OAlert
BUILD_ID=dontkillMe nohup ${JAVA_HOME}/bin/java -jar oalert-0.0.1-SNAPSHOT.jar > /dev/null &
echo "启动成功"

在这里两个地方需要注意

第一个是我本地必须指定java运行路径,不然程序不能启动,我看其他一些教程上都没有配置

第二个是在最后运行jar包的时候 在后面加上  > /dev/null & ,这样将不会在jenkins控制台打印记录,如果不加将会有超时提醒,不过不会影响程序运行

命令如果这么填写:BUILD_ID=dontkillMe nohup ${JAVA_HOME}/bin/java -jar oalert-0.0.1-SNAPSHOT.jar &

结果如下:

ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 286,436 ms]
Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE
Finished: UNSTABLE

 

加上之后:BUILD_ID=dontkillMe nohup ${JAVA_HOME}/bin/java -jar oalert-0.0.1-SNAPSHOT.jar > /dev/null &

结果如下:

授权当前用户
执行....
启动成功
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [140.143.241.138] ...
SSH: Transferred 1 file(s)
Finished: SUCCESS

目前没有找到更合适的处理方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值