先說一下沒用Jenkins的流程
- 先把代碼push到碼云上面,然后使用idea打包jar包
- 登錄服務(wù)器坞古,先找到8080端口占用進(jìn)程,netstat -apn | grep 8080
- 殺死對應(yīng)的進(jìn)程劫樟,kill -9 xx進(jìn)程
- 刪除之前的jar包 rm xxx.jar
- 使用rz命令上傳idea打包的jar包
- 啟動jar包 nohup java -jar xxx.jar --spring.profiles.active=dev > temp.txt 2>&1 &
雖然也沒幾步痪枫,但是每次上傳代碼都要這樣,實(shí)在是很繁瑣叠艳,網(wǎng)上搜索了一下相關(guān)工具奶陈,花了一天時間配置了一下。使用Jenkins之后附较,只需要通過idea把代碼上傳到碼云吃粒,然后點(diǎn)擊一個立即構(gòu)建按鈕即可,比之前要方便拒课。
主要原理就是Jenkins會從碼云下載代碼徐勃,然后自己打包,通過調(diào)用腳本代碼執(zhí)行殺死進(jìn)程早像,刪除文件僻肖,啟動jar包的相關(guān)操作。接下來我會把所有步驟寫下了扎酷,包括中間遇到的奇怪問題檐涝。
安裝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按照提示進(jìn)行安裝即可
apt install openjdk-8-jre-headless
安裝Jenkins
Jenkins安裝方式比較多,選擇war包安裝,感覺這個比較方便法挨。
Jenkins.war下載,
也可以直接在服務(wù)器下載,
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
- 創(chuàng)建軟連接
ln -s /opt/apache-maven-3.5.3/bin/mvn mvn
- 添加環(huán)境配置
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
設(shè)置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 &
提醒 一定要把阿里云服務(wù)器開通8000端口窃植,不然外部無法訪問
如果一切順利,此時通過瀏覽器即可訪問荐糜,按照提示找到密碼巷怜,登錄進(jìn)去。插件安裝按照默認(rèn)即可暴氏,后面可以自行添加延塑。
選擇安裝推薦的插件即可
全局工具配置
你要做的就是打上勾,jdk和git不用填寫任何東西答渔,默認(rèn)即可
創(chuàng)建任務(wù)
如果發(fā)現(xiàn)沒有"構(gòu)建一個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
#!將現(xiàn)有的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 "執(zhí)行....."
cd /opt
java -jar xxx.jar --spring.profiles.active=dev
echo "**********************cmp on jenkins started****
記住一定要把上面的xxx換成你自己jar包的名稱,我的項目有兩個配置文件磨总,所以通過--spring.profiles.active=dev 指明配置文件嗦明,如果你的springboot只有一個配置文件,就刪掉這個參數(shù)
stop.sh
#!將應(yīng)用停止
#!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 強(qiáng)制終止
echo "kill -9 的pid:" $pid
kill -9 $pid
fi
立即構(gòu)建
如果構(gòu)建出錯蚪燕,可以查看信息
遇到的問題
Maven error :Perhaps you are running on a JRE rather than a JDK?
google解決的,就是再安裝一遍娶牌,神奇!A谑怼裙戏!
sudo apt-get install openjdk-8-jdk
如果是win10系統(tǒng),記得添加JAVA_HOME環(huán)境變量
遇到的第二個問題厕诡,廢了幾個小時才找到解決辦法問題如下
Spring Boot - Cannot determine embedded database driver class for database type NONE
可以看到google答案都是添加注解累榜,但是我都照做了,一直報這個錯誤灵嫌。就是idea可以把代碼運(yùn)行起來壹罚。并且通過idea打成jar包可以運(yùn)行,但是我本地通過mvn clean package -Dmaven.test.skip=true命令打包也成功了寿羞,但是就是無法運(yùn)行猖凛,最終找到了原因,報這個錯誤是因?yàn)閖ar包不能找到配置文件绪穆,在pom.xml設(shè)置就可以了辨泳。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
參考