Jenkins芝加,原名 Hudson耍攘,2011 年改為現在的名字武通。它是一個開源的實現持續(xù)集成的軟件工具奉呛。
一计螺、Jenkins安裝
1.1 Linux下安裝Jenkins
- 安裝java運行環(huán)境
yum search java|grep jdk
yum install java-1.8.0-openjdk
- 安裝git
yum -y install git
- 運行jenkins.war
nohup java -jar jenkins.war &
1.2 Docker安裝Jenkins
- 拉取jenkins鏡像
目前jenkins鏡像不用了,要用jenkins/jenkins鏡像
docker pull jenkins/jenkins
- 創(chuàng)建jenkins工作目錄
mkdir /home/jenkins/jenkins_home
- 啟動
docker run -u root -d -p 8080:8080 -p 50000:50000 --name jenkins --restart always -v /home/jenkins/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins
二瞧壮、配置全局參數
-
jdk安裝
-
配置maven環(huán)境
-
Publish Over SSH 配置
3.1 安裝 Publish Over SSH 插件
3.2 配置 Publish Over SSH
在Configure System菜單里 往下拉
3.3 配置 Build Authorization Token Root
-
配置 NodeJS
4.1 通過jenkins自動安裝
4.2 通過官網下載安裝包
三登馒、構建后端自動打包部署項目
-
創(chuàng)建maven構建項目
- 配置當前項目參數
2.1 配置git倉庫地址
2.2 配置目標服務器,通過 Publish Over SSH 將jar包發(fā)送到目標服務器
nohup啟動后 bash會進行阻塞卡住咆槽,jenkins認為認為一直沒完成
shell的日志輸出
nohup java -jar /home/test/test-0.0.1-SNAPSHOT.jar >/home/test/nohup.log 2>&1 &
數據流重定向
數據流重定向就是將某個命令執(zhí)行后應該要出現在屏幕上的數據傳輸到其他地方
標準輸入(stdin):代碼為0陈轿,使用<或<<;
標準輸出(stdout):代碼為1,使用>或>>;
標準錯誤輸出(stderr):代碼為2秦忿,使用2>或2>>
> 覆蓋寫
>> 追加寫
2.3 配置jar啟動前麦射,清理目標服務器占用端口及歷史jar包文件
注意:需要在目標服務器上編寫清理腳本
#!/bin/bash
# 判斷如果沒有傳遞參數 則不再往下執(zhí)行
# 將要操作的jar包 通過命令行傳遞進來
appWorkSpace=$1
#獲取傳入的參數
if [ -z $appWorkSpace ];
then
echo "當前傳遞參數【appWorkSapce:$appWorkSpace】為空"
exit 1
fi
# 獲取當前jar包執(zhí)行所占用的端口號
appPort=$2
if [ -z $appPort ];
then
echo "當前傳遞參數【appPort:$appPort】 為空"
exit 1
fi
# 刪除原始文件
# rm -rf /home/test/test-0.0.1-SNAPSHOT.jar
# 刪除歷史文件
# rm -rf /home/test/test-0.0.1-SNAPSHOT.jar-*
# 將原始文件進行備份刪除
# 獲取當前時間戳
time=$(date "+%Y%m%d%H%M%S")
echo $time
# 備份歷史文件
mv $appWorkSpace $appWorkSpace'-'${time}
# 獲取當前正在運行的端口服務
pid=`netstat -tunpl | grep $appPort | awk '{printf $7}' | awk '{split($1, arr, "/"); print arr[1]}'`
echo "pid:$pid"
#如果pid為空,提示一下灯谣,否則潜秋,執(zhí)行kill命令
if [ -z $pid ];
#使用-z 做空值判斷
then
echo "當前pid為空"
echo "$appWorkSpace not started"
else
kill -9 $pid
echo "當前不為空"
echo "$appWorkSpace stoping...."
fi
echo "12312312312312"
# 再次判斷一下當前的pid是否還存在
oldPid=`netstat -tunpl | grep $appPort | grep $pid | grep java`
echo "oldPid:$oldPid"
if [ -z $oldPid ];
then
echo "$appWorkSapce pid:$pid is stop..................";
else
echo "$appWorkSapce stop failed"
fi
echo $pid
2.4 配置jenkins觸發(fā)器,通過gitlab調用jenkins構建項目胎许,使用Build Authorization Token Root插件進行調用(去掉不同瀏覽器需要登錄驗證)
http://${IP}:${PORT}/buildByToken/build?job=${NAME}&token=${SECRET}
2.5 配置gitlab 項目中 webhooks調用鉤子調用jenkins觸發(fā)項目構建
四峻呛、構建vue項目自動打包部署
-
創(chuàng)建構建項目
-
全局配置node環(huán)境
-
配置git倉庫地址
-
配置構建環(huán)境
-
通過命令引入依賴并打包,并打成壓縮包
-
通過命令發(fā)送到目標服務器辜窑,并執(zhí)行腳本解壓部署到指定文件夾中
-
編寫腳本钩述,自動清理目標服務器文件
#!/bin/bash
# 獲取傳入的參數 指定文件夾名
appWorkSpace=$1
if [ -z $appWorkSpace ];
then
echo "當前傳遞參數【appWorkSpace:$appWorkSpace 】為空"
exit 1
fi
# 刪除/備份歷史前端打包文件
# 刪除
# rm -rf $appWorkSpace'/html/dist'
# 備份
time=$(date "+%Y%m%d%H%M%S")
echo $time
mv $appWorkSpace'/html/dist' $appWorkSpace'/html/dist-'$time
# 將當前文件拷貝到指定容器文件夾中
cp -r $appWorkSpace'/dist' $appWorkSpace'/html'
# 刪除當前壓縮文件及文件夾
rm -rf $appWorkSpace'/dist'
rm -rf $appWorkSpace'/dist.tar.gz'
-
執(zhí)行清理當前jenkins工作空間腳本,清除dist和dist.tar.gz壓縮包