阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署

先说一下没用Jenkins的流程

  • 先把代码push到码云上面,然后使用idea打包jar包
  • 登录服务器,先找到8080端口占用进程,netstat -apn | grep 8080
  • 杀死对应的进程,kill -9 xx进程
  • 删除之前的jar包 rm xxx.jar
  • 使用rz命令上传idea打包的jar包
  • 启动jar包 nohup java -jar xxx.jar –spring.profiles.active=dev > temp.txt 2>&1 &

虽然也没几步,但是每次上传代码都要这样,实在是很繁琐,网上搜索了一下相关工具,花了一天时间配置了一下。使用Jenkins之后,只需要通过idea把代码上传到码云,然后点击一个立即构建按钮即可,比之前要方便。
主要原理就是Jenkins会从码云下载代码,然后自己打包,通过调用脚本代码执行杀死进程,删除文件,启动jar包的相关操作。接下来我会把所有步骤写下了,包括中间遇到的奇怪问题。

安装java

输入java -version查看是否安装java

root@iZwz99ou8xtuhve2z7gdmiZ:~# java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)

如果提示没有java按照提示进行安装即可
apt install openjdk-8-jre-headless

安装Jenkins

Jenkins安装方式比较多,选择war包安装,感觉这个比较方便。
Jenkins.war下载,
也可以直接在服务器下载,

cd /opt
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

安装maven

  • 下载 & 解压
cd /opt
wget http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz
 tar zxvf apache-maven-3.5.3-bin.tar.gz
  • 创建软连接
ln -s /opt/apache-maven-3.5.3/bin/mvn mvn
  • 添加环境配置
vim /etc/profile

在 /etc/profile 文件最后加上下面代码

export M2_HOME=/opt/apache-maven-3.5.3
export PATH=${M2_HOME}/bin:$PATH

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 配置.png

  • 使配置生效
source /etc/profile
  • 更改为淘宝镜像
    修改 /opt/apache-maven-3.5.3/conf 目录下settings.xml,加上
<mirror>  
    <id>nexus-aliyun</id>  
    <mirrorOf>central</mirrorOf>    
    <name>Nexus aliyun</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
</mirror> 

安装git

apt install git

设置name ,emai

git config --global user.name xxx
git config --global user.email xxx@qq.com

生成ssh公钥

ssh-keygen -t rsa -C "xxxxx@xxxxx.com"  

# Generating public/private rsa key pair...
# 三次回车即可生成 ssh key

查看你的 public key,并把他添加到码云(Gitee.com) SSH key添加地址:https://gitee.com/profile/sshkeys)

cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....

添加后,在终端(Terminal)中输入

ssh -T git@gitee.com

若返回

Welcome to Gitee.com, yourname!

则证明添加成功

启动jenkin.war

通过java -jar命令启动war包

cd /opt
nohup java -jar jenkins.war  --httpPort=8000 > temp.txt 2>&1 &

提醒 一定要把阿里云服务器开通8000端口,不然外部无法访问

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 端口开通.png

如果一切顺利,此时通过浏览器即可访问,按照提示找到密码,登录进去。插件安装按照默认即可,后面可以自行添加。

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 登录.png

选择安装推荐的插件即可

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 安装插件.png

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 创建用户.png

全局工具配置

你要做的就是打上勾,jdk和git不用填写任何东西,默认即可

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 jdk&git配置.png

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 maven配置.png

创建任务

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 创建1.png
《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 创建2.png

如果发现没有”构建一个maven项目”,需要安装插件Maven Integration plugin

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 插件安装1.png

在可选插件中搜索即可,然后安装。

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 插件安装2.png

源码管理,加上git地址即可

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 创建3.png

maven打包跳过测试 clean install -Dmaven.test.skip=true

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 创建4.png

最重要的地方到了,shell脚本配置

#!/bin/bash 
cd /opt/scripts
echo "Execute shell Start"
sh stop.sh
sh replace.sh
echo "Execute shell Finish"
chmod 777 /opt/scripts/startup.sh
BUILD_ID=dontKillMe nohup /opt/scripts/startup.sh &

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 创建5.png

三个脚本都放到/opt/scripts
replace.sh

jar_name=xxx.jar
#!编译好的jar包存放地址
file_path=~/.jenkins/workspace/xxx/target
#!将现有的jar备份后,将新的jar包替换
file="/opt/xxx.jar"
if [ -f "$file" ]
then
mv /opt/xxx.jar /opt/backup/xxx.jar.`date +%Y%m%d%H%M%S`
fi
cp ~/.jenkins/workspace/xxx/target/xxx.jar /opt

记住一定要把上面的xxx换成你自己jar包的名称
start.sh

mod 777 /opt/xxx.jar
echo "执行....."
cd /opt
java -jar xxx.jar --spring.profiles.active=dev 
echo "**********************cmp on  jenkins started****

记住一定要把上面的xxx换成你自己jar包的名称,我的项目有两个配置文件,所以通过–spring.profiles.active=dev 指明配置文件,如果你的springboot只有一个配置文件,就删掉这个参数
stop.sh

#!将应用停止
#!stop.sh
#!/bin/bash
cd /opt
echo "Stopping SpringBoot Application for CMP"
ls
pid=`ps -ef | grep xxx.jar | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
#!kill -9 强制终止
   echo "kill -9 的pid:" $pid
   kill -9 $pid
fi

立即构建

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 构建.png

如果构建出错,可以查看信息

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 控制台输出.png

遇到的问题

Maven error :Perhaps you are running on a JRE rather than a JDK?

google解决的,就是再安装一遍,神奇!!!

sudo apt-get install openjdk-8-jdk

如果是win10系统,记得添加JAVA_HOME环境变量

《阿里云Ubuntu系统,Jenkins maven打包SpringBoot jar包自动化部署》 JAVA_HOME.png

遇到的第二个问题,废了几个小时才找到解决办法问题如下

Spring Boot - Cannot determine embedded database driver class for database type NONE

可以看到google答案都是添加注解,但是我都照做了,一直报这个错误。就是idea可以把代码运行起来。并且通过idea打成jar包可以运行,但是我本地通过mvn clean package -Dmaven.test.skip=true命令打包也成功了,但是就是无法运行,最终找到了原因,报这个错误是因为jar包不能找到配置文件,在pom.xml设置就可以了。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

参考

    原文作者:星辰大海__xcdh
    原文地址: https://www.jianshu.com/p/8f04cce383d0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞