先说一下没用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

- 使配置生效
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端口,不然外部无法访问

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

选择安装推荐的插件即可


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


创建任务


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

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

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

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

最重要的地方到了,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 &

三个脚本都放到/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
立即构建

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

遇到的问题
Maven error :Perhaps you are running on a JRE rather than a JDK?
google解决的,就是再安装一遍,神奇!!!
sudo apt-get install openjdk-8-jdk
如果是win10系统,记得添加JAVA_HOME环境变量

遇到的第二个问题,废了几个小时才找到解决办法问题如下
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>
参考
网友评论