序言
軟件開(kāi)發(fā)中,會(huì)分多個(gè)環(huán)境,開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境,軟件部署如果是純?nèi)斯ひ粋€(gè)個(gè)通過(guò)jar的方式,會(huì)有如下問(wèn)題:
-
服務(wù)器過(guò)多,容易出錯(cuò)
-
修改配置,可能會(huì)存在未修改到位的情況
-
服務(wù)器部署權(quán)限一般只有開(kāi)發(fā)服務(wù)器人才有權(quán)限,涉及到服務(wù)器的安全
今年,我們看看持續(xù)構(gòu)建的一個(gè)工具jenknins,看看他是如何怎么部署的
軟件安裝
jdk
rpm -qa |grep java ###查看是否安裝java
rpm -qa | grep java | xargs rpm -e --nodeps ###卸載java
yum list java-1.8* ####查看是否安裝jdk1.8的包
yum install java-1.8.0-openjdk* -y ###一鍵安裝
java -version ###查看jdk配置
- 新手不建議使用這種方式,建議自己配置環(huán)境變量
maven
- 是為了jenkins打包需要
maven離線下載
tar -zxvf apache-maven-3.9.1-bin.tar.gz
###修改目錄
mv apache-maven-3.9.1 maven
###設(shè)置環(huán)境變量
vim /etc/profile
###設(shè)置maven環(huán)境變量
MAVEN_HOME=/root/maven
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
####查看maven的版本,是否配置成功
mvn -v
- /root/project/maven 是maven的安裝后的路徑,根據(jù)自己的地址配置
配置maven阿里鏡像以及本地庫(kù)位置
###cd到maven下面的conf
cd conf
###打開(kāi)文件
vim settings.xml
###配置本地卡路徑
<localRepository>/root/project/maven-local</localRepository>
####配置阿里云鏡像
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
- 放入到mirros標(biāo)簽里面
git安裝
- 安裝git是為了jenkins拉取代碼
yum install git
git --version
安裝jenkins
使用離線安裝
####下載jenkins
wget https://mirrors.aliyun.com/jenkins/war-stable/2.332.3/jenkins.war
###啟動(dòng)jenkins 9090是jenkins端口
nohup java -jar /usr/local/jenkins/jenkins.war --httpPort=9090 > /var/log/jenkins.log 2>&1 &
####開(kāi)通防火墻9090端口
firewall-cmd --zone=public --add-port=9090/tcp --permanent
####更新防火墻配置
firewall-cmd --reload
- 把密碼放到上圖中
-
下載插件40分鐘左右
插件安裝
- 安裝gitee、maven、ssh等插件
環(huán)境配置
- name隨便寫(xiě)
- maven_home 寫(xiě)maven的安裝路徑
創(chuàng)建項(xiàng)目
- 名字以實(shí)際的項(xiàng)目名為準(zhǔn)
- 保存構(gòu)建的天數(shù),意思就是代碼構(gòu)建版本保留多久
- 構(gòu)建最大個(gè)數(shù)為3,就是構(gòu)建的歷史記錄最大為多少,如下圖
配置gitee
- 輸入gitee地址
- 指定分支的dev,可以改成對(duì)應(yīng)的版本
- Credentials 輸入對(duì)應(yīng)的用戶名
生成gitee WebHook
找到gitee的項(xiàng)目路徑,點(diǎn)擊管理
- 找到webHook密碼復(fù)制到下面
maven打包
- clean package -U -Dmaven.test.skip=true
- maven版本里面的文件可以隨便寫(xiě)
- 執(zhí)行shell里面寫(xiě)一行 echo hello判斷是否打包成功
驗(yàn)證是否打包成功
- 注意第一次構(gòu)建,會(huì)下載很多的依賴包
- 顯示success說(shuō)明打包成功
- /root/.jenkins/workspace/test/target 顯示的說(shuō)明是jar包的存放路徑
- 到這里,萬(wàn)里長(zhǎng)征已經(jīng)只差最后一步咯,jar包已經(jīng)生成,只需要把這個(gè)jar包發(fā)送到遠(yuǎn)程服務(wù)器,備份并啟動(dòng)就行
連接遠(yuǎn)程服務(wù)器并重啟服務(wù)
遠(yuǎn)程連接服務(wù)器
把打包的應(yīng)用發(fā)布到遠(yuǎn)程服務(wù)器
遠(yuǎn)程服務(wù)器生成私鑰
jenkins服務(wù)器和服務(wù)部署的服務(wù)器不在一條服務(wù)器,需要生成ssh秘鑰
ssh-keygen -t rsa -C "xxx@163.com"
查看秘鑰
cat /root/.ssh/id_rsa
- xxx@163.com可以寫(xiě)你的郵箱地址
- 一直按回車(chē)就行
- 把秘鑰復(fù)制下來(lái)
- 去掉第一行和最后一行進(jìn)行復(fù)制
配置ssh
系統(tǒng)設(shè)置-》系統(tǒng)配置 一直向下拉
- 放入遠(yuǎn)程服務(wù)器的私鑰
- name隨便輸入
- Hostname 服務(wù)器的ip
- username 服務(wù)器的賬號(hào)
- Remote Directory ssh的根目錄(操作命令,都是基于該目錄來(lái)的)
- 點(diǎn)擊test,返回success說(shuō)明ssh免登錄成功
項(xiàng)目配置ssh
點(diǎn)擊項(xiàng)目,修改ssh配置
- sourse file是jenkins的jar位置
- Remove prefix是去掉前綴
- Remote Direcotory 這里寫(xiě)的/,表示以配置的ssh根目錄為準(zhǔn),之前社長(zhǎng)配置的是/root/downlod
- exec command是重啟腳本,這里暫時(shí)只打印echo hello這一句話
- 到這里gitee上的代碼,已通過(guò)jenkins下載到j(luò)enkins的workspaces上編程成一個(gè)jar(maven打包)
- 通過(guò)ssh,把對(duì)應(yīng)jar,傳輸?shù)竭h(yuǎn)程服務(wù)器上
- 編寫(xiě)重啟的腳本(1 kill進(jìn)程,把之前的文件備份,再把該文件移動(dòng)過(guò)來(lái),再java -jar啟動(dòng))
腳本
vim test.sh
- 編寫(xiě)test腳本
source /etc/profile
#!/bin/sh
#這里可替換為你自己的執(zhí)行程序,其他代碼無(wú)需更改
APP_NAME=iopace.jar
####ssh根目錄
SSH_PATH=/root/download
###配置項(xiàng)目的路徑
PROJECT_PATH=/root/download/bak
echo " ==備份項(xiàng)目,并移動(dòng)項(xiàng)目---"
####備份jar按bak存放
cp -R $PROJECT_PATH/$APP_NAME $PROJECT_PATH/"$APP_NAME".bak
rm -rf $PROJECT_PATH/$APP_NAME
cp -R $SSH_PATH/$APP_NAME $PROJECT_PATH/$APP_NAME
echo " =====關(guān)閉Java應(yīng)用======"
PROCESS=`ps -ef |grep $APP_NAME |grep -v grep|grep hg-learn.jar|awk '{print $2}'`
for i in $PROCESS
do
echo "Kill the $1 process [ $i ]"
kill -9 $i
done
echo " =====啟動(dòng)Java應(yīng)用======"
nohup java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9091 -Duser.timezone=GMT+08 $PROJECT_PATH/$APP_NAME --spring.profiles.active=dev -Xdebug > /dev/null 2>&1 &
chmod +x test.sh
- 給腳本執(zhí)行權(quán)限
- 注意: source /etc/profile 腳本里面一定要增加這一行,主要是為了解決jenkins使用shell腳本執(zhí)行nohup java -jar包失敗問(wèn)題(2023/06/08發(fā)現(xiàn)的問(wèn)題修正),社長(zhǎng)查了一些資料,發(fā)現(xiàn)大部分的文章都是增加BUILD_ID=dontKillMe,但是我這邊還是啟動(dòng)項(xiàng)目失敗,但是通過(guò)ssh啟動(dòng)腳本是可以啟動(dòng)項(xiàng)目的,懷著問(wèn)題,我查閱了大量的資料,功夫不負(fù)有心人,終于被我找到問(wèn)題所在了,如果jenkins和命令打包的腳本不是同一臺(tái)服務(wù)器的話,需要在shell腳本里面增加source /etc/profile,不然jenkins在讀取環(huán)境變量的時(shí)候,會(huì)出問(wèn)題。
vue項(xiàng)目打包
nodejs安裝
下載
#下載(下載路徑)
wget https://nodejs.org/dist/v16.6.0/node-v16.6.0-linux-x64.tar.gz
#解壓
tar zxvf node-v16.6.0-linux-x64.tar.gz
# 改名
mv node-v16.6.0-linux-x64 node16
#賦權(quán)
chmod 777 node16
配置環(huán)境變量
# 打開(kāi)環(huán)境變量
vim /etc/profile
#set nodejs env(路徑一定要配置對(duì))
export NODE_HOME=/usr/local/software/nodeJs/node16
export PATH=$NODE_HOME/bin:$PATH
# 重新加載環(huán)境變量
source /etc/profile
驗(yàn)證
node -v
npm -v
鏡像加速
- nodeJS可以理解為就是后臺(tái)的maven,在配置maven的時(shí)間我們配置了阿里云鏡像,為什么?就是因?yàn)閙aven默認(rèn)的是國(guó)外鏡像,導(dǎo)致下載很慢,nodejs也是同理,所以我們需要配置國(guó)內(nèi)鏡像
npm install -g cnpm --registry=https://registry.npm.taobao.org
#校驗(yàn)是否成功
cnpm -v
nodeJS插件安裝
- 安裝NodeJS插件
配置nodeJS環(huán)境變量
創(chuàng)建vue項(xiàng)目
- 構(gòu)建的版本保留2天,最多存在3個(gè)構(gòu)建版本
- 輸入項(xiàng)目的git地址
- 指定分支 master可以動(dòng)態(tài)修改成其他的分支
- 點(diǎn)擊生成webHook密碼,記住框起來(lái)的兩個(gè)地址,需要在gitee上配置
- 填入上面記住的兩個(gè)信息
- 點(diǎn)擊測(cè)試,沒(méi)有報(bào)錯(cuò),說(shuō)明連接成功
添加nodeJS信息
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-478411.html
- 如果nodeJS配置沒(méi)有問(wèn)題,下拉可以選擇到我們配置好的nodeJS環(huán)境變量
設(shè)置shell腳本
echo $PATH
node -v
npm -v
#npm install -g cnpm --registry=https://registry.npm.taobao.org
#cnpm install node-sass
#cnpm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
#npm install
#cnpm install vue-awesome-swiper --save
#cnpm install vue-ba --save
npm run build --dev
- 打印當(dāng)前地址,輸入node的版本信息
- npm run build --dev dev就是前端的不同環(huán)境的名稱,可以動(dòng)態(tài)切換
- 實(shí)際上就是在jenkins的工作目錄下生成一個(gè)dist的文件夾
到這里我們已經(jīng)實(shí)現(xiàn)把前臺(tái)項(xiàng)目編譯成文件夾運(yùn)行咯,在實(shí)際部署過(guò)程中,可能存在jenkins和前臺(tái)不是一臺(tái)服務(wù)器的情況,所以我們還需要多操作一步
前臺(tái)代碼部署到另外一臺(tái)服務(wù)器
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-478411.html
- ssh server name是我們?cè)陧?xiàng)目ssh階段已配置好的
- Sources files實(shí)際上就是針對(duì)于jenkins的workspaces來(lái)說(shuō)的,是相對(duì)路徑dist/*的意思就是dist文件夾的內(nèi)容,我都需要
- Remove prefix不需要去掉前綴,因?yàn)槭俏募A,所以不需要配置
- Remote diretory 上傳路徑,這里的/是相對(duì)于ssh配置的路徑來(lái)說(shuō)的(ssh我配置的是/root/download)
- exec command 就是需要執(zhí)行的命令,后臺(tái)打包有講解,可以參考編寫(xiě)
到這里jenkins打包成vue就成功咯
到了這里,關(guān)于【jenkins部署】一文弄懂自動(dòng)打包部署(前后臺(tái))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!