阿里云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
配置.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端口,不然外部无法访问

端口开通.png

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

选择安装推荐的插件即可
安装插件.png

创建用户.png

全局工具配置

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


jdk&git配置.png

maven配置.png

创建任务

创建1.png
创建2.png

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

插件安装1.png

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


插件安装2.png

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


创建3.png

maven打包跳过测试 clean install -Dmaven.test.skip=true
创建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 &
创建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

立即构建

构建.png

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


控制台输出.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环境变量


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>

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容