成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Jenkins一鍵打包部署SpringBoot應(yīng)用步驟詳解

開(kāi)發(fā) 前端
關(guān)于JDK的選擇,自1.8版本收費(fèi)之后,我們大多數(shù)選擇openjdk作為生產(chǎn)環(huán)境的運(yùn)行時(shí)環(huán)境,和大多數(shù)軟件安裝包一樣,在CentOS服務(wù)器上,我們可以選擇yum方式和下載壓縮包的方式進(jìn)行安裝。

本文介紹使用Jenkins一鍵將SpringBoot應(yīng)用打包并上傳到生產(chǎn)環(huán)境服務(wù)器運(yùn)行,這里使用的是直接在服務(wù)器上運(yùn)行FagJar的方式,首先確保服務(wù)器環(huán)境配置好,安裝必須的JDK運(yùn)行時(shí)環(huán)境,運(yùn)行目錄,日志存放目錄等。

一、服務(wù)器環(huán)境配置

??關(guān)于JDK的選擇,自1.8版本收費(fèi)之后,我們大多數(shù)選擇openjdk作為生產(chǎn)環(huán)境的運(yùn)行時(shí)環(huán)境,和大多數(shù)軟件安裝包一樣,在CentOS服務(wù)器上,我們可以選擇yum方式和下載壓縮包的方式進(jìn)行安裝。大多數(shù)情況下使用yum方式比較簡(jiǎn)單方便。也有特殊情況,一些安全要求高單位或系統(tǒng),只允許在局域網(wǎng)內(nèi)運(yùn)行,此時(shí)就需要選擇壓縮包的方式進(jìn)行安裝了。

1. yum方式安裝openjdk

  • 查詢當(dāng)前CentOS系統(tǒng)可以安裝的openjdk版本,我們只需要運(yùn)行時(shí)環(huán)境,所以java-11-openjdk.x86_64是我們需要安裝的包,實(shí)際相當(dāng)于jre運(yùn)行時(shí);里面還有一個(gè)包java-11-openjdk-devel.x86_64,這個(gè)包是傳統(tǒng)意義的jdk就是包含開(kāi)發(fā)和打包工具,在生產(chǎn)環(huán)境,沒(méi)有需要我們可以不安裝。
yum search java | grep -i --color openjdk
[root@localhost ~]# yum search java | grep -i --color openjdk
openjdk-asmtools-javadoc.noarch : Javadoc for openjdk-asmtools
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-headless.x86_64 : The OpenJDK runtime environment without
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk.i686 : OpenJDK Runtime Environment 8
java-1.8.0-openjdk.x86_64 : OpenJDK 8 Runtime Environment
java-1.8.0-openjdk-accessibility.i686 : OpenJDK accessibility connector
java-1.8.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
java-1.8.0-openjdk-demo.i686 : OpenJDK Demos 8
java-1.8.0-openjdk-demo.x86_64 : OpenJDK 8 Demos
java-1.8.0-openjdk-devel.i686 : OpenJDK Development Environment 8
java-1.8.0-openjdk-devel.x86_64 : OpenJDK 8 Development Environment
java-1.8.0-openjdk-headless.i686 : OpenJDK Headless Runtime Environment 8
java-1.8.0-openjdk-headless.x86_64 : OpenJDK 8 Headless Runtime Environment
java-1.8.0-openjdk-javadoc.noarch : OpenJDK 8 API documentation
java-1.8.0-openjdk-javadoc-zip.noarch : OpenJDK 8 API documentation compressed
java-1.8.0-openjdk-src.i686 : OpenJDK Source Bundle 8
java-1.8.0-openjdk-src.x86_64 : OpenJDK 8 Source Bundle
java-11-openjdk.i686 : OpenJDK Runtime Environment 11
java-11-openjdk.x86_64 : OpenJDK 11 Runtime Environment
java-11-openjdk-demo.i686 : OpenJDK Demos 11
java-11-openjdk-demo.x86_64 : OpenJDK 11 Demos
java-11-openjdk-devel.i686 : OpenJDK Development Environment 11
java-11-openjdk-devel.x86_64 : OpenJDK 11 Development Environment
java-11-openjdk-headless.i686 : OpenJDK Headless Runtime Environment 11
java-11-openjdk-headless.x86_64 : OpenJDK 11 Headless Runtime Environment
java-11-openjdk-javadoc.i686 : OpenJDK 11 API documentation
java-11-openjdk-javadoc.x86_64 : OpenJDK 11 API documentation
java-11-openjdk-javadoc-zip.i686 : OpenJDK 11 API documentation compressed in a
java-11-openjdk-javadoc-zip.x86_64 : OpenJDK 11 API documentation compressed in
java-11-openjdk-jmods.i686 : JMods for OpenJDK 11
java-11-openjdk-jmods.x86_64 : JMods for OpenJDK 11
java-11-openjdk-src.i686 : OpenJDK Source Bundle 11
java-11-openjdk-src.x86_64 : OpenJDK 11 Source Bundle
java-11-openjdk-static-libs.i686 : OpenJDK libraries for static linking 11
java-11-openjdk-static-libs.x86_64 : OpenJDK 11 libraries for static linking
openjdk-asmtools.noarch : To develop tools create proper & improper Java
openprops.noarch : An improved java.util.Properties from OpenJDK
  • 選擇openjdk11,執(zhí)行安裝命令
sudo yum install java-11-openjdk.x86_64 -y
  • 此時(shí)執(zhí)行java -version可以看到已安裝版本,使用which java可以看到j(luò)ava執(zhí)行路徑為/usr/bin/java,但這里不是openjdk的真實(shí)安裝路徑,需要通過(guò)命令dirname查看真實(shí)路徑。
[root@localhost /]# java -version
openjdk version "11.0.20" 2023-07-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.20.0.8-1.el7_9) (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.20.0.8-1.el7_9) (build 11.0.20+8-LTS, mixed mode, sharing)
[root@localhost /]# which java
/usr/bin/java
  • 查看openjdk真實(shí)安裝路徑,用此路徑配置JAVA_HOME
[root@localhost /]# dirname $(readlink $(readlink $(which java)))
/usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64/bin
  • 使用vi /etc/profile編輯profile文件,按i編輯,在文件底部加入一下配置,按:wq!保存退出。
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME
  • 執(zhí)行source /etc/profile命令, 讓profile文件立即生效。
[root@localhost /]# source /etc/profile
[root@localhost /]# echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64

??執(zhí)行完以上操作之后,Java運(yùn)行時(shí)環(huán)境就安裝配置好了,但是一定要注意:PATH在配置的時(shí)候,一定要把$JAVA_HOME/bin放在前面,不然系統(tǒng)中安裝有多個(gè)版本的JDK,那么在使用java命令時(shí),系統(tǒng)會(huì)找到其他版本的Java。還有以前很多教程配置中的CLASSPATH和tools.jar在JDK1.5以后就不需要配置了。

2. 部署及備份目錄準(zhǔn)備

  • 新建 /opt/tmp 目錄,用于Jenkins打包后,通過(guò) Publish Over SSH插件將包傳輸?shù)椒?wù)器的臨時(shí)目錄。
  • 新建 /opt/bak 目錄,用于存儲(chǔ)所有部署過(guò)的包備份,方便后續(xù)版本回滾。此目錄可能會(huì)占用很大空間,所以需要選擇一個(gè)磁盤(pán)空間大的掛載目錄。
  • 新建 /opt/script 目錄,用于Jenkins將包傳輸完成之后,執(zhí)行安裝、備份操作的相關(guān)命令腳本。
  • 新建 /data/container/server,作為服務(wù)的運(yùn)行目錄,服務(wù)FatJar也會(huì)部署到此目錄。
mkdir -p /opt/tmp /opt/bak /opt/script /data/container/server
chmod -R 777 /opt/tmp /opt/bak /opt/script /data/container/server

3. 部署腳本編寫(xiě)說(shuō)明

  • 定義入?yún)?,可以通過(guò)Jenkins任務(wù)將參數(shù)傳入腳本中,我們定義了下面3個(gè)參數(shù):
    project_name=gitegg-server : 服務(wù)名稱server_port=8080 : 服務(wù)端口號(hào)server_path=“/data/container/server” : 服務(wù)運(yùn)行路徑
  • 對(duì)參數(shù)進(jìn)行檢查,是否未傳入?yún)?shù),這里根據(jù)自己的實(shí)際情況判斷,比如必須傳入哪些參數(shù),就設(shè)置參數(shù)的個(gè)數(shù)不能小于幾。
echo "param validate"
if [ $# -lt 1 ]; then  
  echo "you must use like this : ./publish_gitegg_server.sh [projectname] [server port] [server home dir]"  
  exit  
fi
  • 入?yún)①x值,如果有參數(shù)傳入,則取服務(wù)參數(shù),如果沒(méi)有參數(shù)傳入則取默認(rèn)值
if [ "$1" != "" ]; then
   project_name="$1"
fi
if [ "$2" != "" ]; then
   server_port="$2"
fi
if [ "$3" != "" ]; then
   server_path="$3"
fi
  • Jenkins調(diào)用sh命令時(shí),可能會(huì)找不到JAVA_HOME,導(dǎo)致服務(wù)無(wú)法運(yùn)行,所以在次數(shù)在配置一下
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64
  • 停止服務(wù)
#check server process
server_pid=`/usr/sbin/lsof -n -P -t -i :$server_port`
echo "current :" $server_pid
#shutdown server
kill -9 $server_pid
echo "server shutting down"
while [ -n "$server_pid" ]
do
 sleep 5
 server_pid=`/usr/sbin/lsof -n -P -t -i :$server_port`
 echo "scan server pid :" $server_pid
done
echo "server shutt down"
  • 部署服務(wù)運(yùn)行的FatJar
#publish project
echo "scan no server pid,$project_name publishing"
rm -rf "$server_path"/$project_name*.jar
cp /opt/tmp/$project_name*.jar "$server_path"/$project_name.jar
  • 備份本次發(fā)布的FatJar
#bak project
BAK_DIR=/opt/bak/$project_name/`date +%Y%m%d`
mkdir -p "$BAK_DIR"
cp "$server_path"/$project_name.jar "$BAK_DIR"/"$project_name"_`date +%H%M%S`.jar
#remove tmp
rm -rf /opt/tmp/$project_name*.jar
  • 執(zhí)行運(yùn)行命令
cd "$server_path"
source /etc/profile
nohup java -jar -Xms4096m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m "$project_name".jar --server.port="$server_port" > log.file 2>&1 &
  • 打印執(zhí)行完成的命令
echo "Server is starting,please try to access $container_name conslone url"
  • 完整的安裝部署腳本
project_name=gitegg-server
server_port=8080
server_path="/data/container/server"
#param validate
if [ $# -lt 1 ]; then  
  echo "you must use like this : ./publish_qxq_server.sh [projectname] [server port] [server home dir]"  
  exit  
fi
if [ "$1" != "" ]; then
   project_name="$1"
fi
if [ "$2" != "" ]; then
   server_port="$2"
fi
if [ "$3" != "" ]; then
   server_path="$3"
fi
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64
#check server process
server_pid=`/usr/sbin/lsof -n -P -t -i :$server_port`
echo "current :" $server_pid
#shutdown server
kill -9 $server_pid
echo "server shutting down"
while [ -n "$server_pid" ]
do
 sleep 5
 server_pid=`/usr/sbin/lsof -n -P -t -i :$server_port`
 echo "scan server pid :" $server_pid
done
echo "server shutt down"
#publish project
echo "scan no server pid,$project_name publishing"
rm -rf "$server_path"/$project_name*.jar
cp /opt/tmp/$project_name*.jar "$server_path"/$project_name.jar
#bak project
BAK_DIR=/opt/bak/$project_name/`date +%Y%m%d`
mkdir -p "$BAK_DIR"
cp "$server_path"/$project_name.jar "$BAK_DIR"/"$project_name"_`date +%H%M%S`.jar
#remove tmp
rm -rf /opt/tmp/$project_name*.jar
#start server
cd "$server_path"
source /etc/profile
nohup java -jar -Xms4096m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m "$project_name".jar --server.port="$server_port" > log.file 2>&1 &
echo "Server is starting,please try to access $project_name conslone url"
  • 將部署腳本上傳到服務(wù)器的/opt/script目錄下,并賦予可執(zhí)行權(quán)限
chmod 755 publish_server.sh

二、新建Jenkins配置打包任務(wù),部署SpringBoot應(yīng)用

1. Dashboard > 新建任務(wù),輸入任務(wù)名稱,選擇“構(gòu)建一個(gè)maven項(xiàng)目”,點(diǎn)擊確定。

2. 項(xiàng)目配置,進(jìn)入到任務(wù)配置頁(yè)

  • 丟棄舊的構(gòu)建 :這里在保持構(gòu)建的最大個(gè)數(shù)填寫(xiě)5,當(dāng)然可以根據(jù)自己情況填寫(xiě),否則舊的構(gòu)建包會(huì)一直存在占用磁盤(pán)空間。

  • 源碼管理:配置git代碼地址、用戶名密碼和版本分支,如果是需要用戶名密碼的git庫(kù),那么下面需要選擇訪問(wèn)的用戶名密碼,這里一定要使用用戶名密碼方式,使用token的方式無(wú)法選中。可以在下方add,也可以在Jenkins全局Credentials 中添加,方便其它任務(wù)使用。

  • 構(gòu)建觸發(fā)器:可選可不選,這個(gè)根據(jù)自己的需求選擇,任務(wù)在什么情況下出發(fā)構(gòu)建。

  • 構(gòu)建環(huán)境:這里不需要選擇,在介紹構(gòu)建NodeJS項(xiàng)目時(shí),需要選中NodeJS環(huán)境。

  • Build:這里填寫(xiě)Maven打包命令,可以添加參數(shù)選擇打包環(huán)境test或prod等。

  • Post Steps:將打包后的文件發(fā)送到服務(wù)器,并執(zhí)行設(shè)置好的腳本,這里選擇Run only if build succeeds,當(dāng)構(gòu)建成功時(shí)Post。

  • Exec command:將打好的包發(fā)布到環(huán)境之后,在環(huán)境上執(zhí)行的部署腳本命令。/opt/script/publish_server.sh 是腳本文件、gitegg-application是項(xiàng)目名稱、8182 是項(xiàng)目端口號(hào)、/data/container/server 是jar包存放路徑。
/opt/script/publish_server.sh gitegg-application 8182 /data/container/server

3. 運(yùn)行構(gòu)建任務(wù)

  • 立即構(gòu)建

  • 查看構(gòu)建日志:點(diǎn)擊立即構(gòu)建之后,下方會(huì)出現(xiàn)進(jìn)度條,點(diǎn)擊進(jìn)度條就可以進(jìn)入構(gòu)建日志界面。



4、構(gòu)建成功后,下方會(huì)給出構(gòu)建成功提示,此時(shí)登錄遠(yuǎn)程服務(wù)器查看文件是否部署成功即可。

舉報(bào)

評(píng)論 1

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-09-12 07:06:04

2023-09-14 20:55:52

NodeJSDocker

2023-09-10 07:20:35

2023-06-15 10:00:00

Jenkins任務(wù)操作

2024-04-08 13:59:03

大模型Replicate

2015-02-09 15:25:52

換膚

2019-02-18 20:14:12

AWS區(qū)塊鏈應(yīng)用

2012-07-03 16:03:07

2015-06-09 10:36:13

Cloud FoundAzurePaaS

2011-07-25 23:08:42

投影儀評(píng)測(cè)

2025-04-29 10:13:58

2018-01-09 16:45:31

離線網(wǎng)絡(luò)網(wǎng)絡(luò)安全一鍵式部署

2022-01-09 23:09:08

Windows 10Windows微軟

2020-06-04 17:21:05

印度應(yīng)用移動(dòng)應(yīng)用

2012-04-20 14:33:10

海爾一體機(jī)

2019-08-28 12:02:04

Helm云原生一鍵部署

2025-02-06 09:22:28

2015-07-30 16:18:14

企業(yè)網(wǎng)D1Net

2011-04-25 10:00:08

聯(lián)想7205身份證復(fù)印
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品国产91 | 成人综合久久 | 精品少妇一区二区三区在线播放 | 亚洲欧洲小视频 | 精品视频一区二区 | 91在线一区 | 欧美一级黑人aaaaaaa做受 | 欧美亚洲综合久久 | 国产分类视频 | 国产成人综合亚洲欧美94在线 | 欧美v免费 | 国产精品久久久久久久久久久久冷 | 日韩色视频 | 久久久久亚洲精品 | 国产精品小视频在线观看 | 亚洲综合无码一区二区 | 免费在线成人 | 国产精品一区二区电影 | 欧美日韩视频在线 | 国产视频观看 | 国产日韩精品视频 | 久久精品国产99国产精品 | 国产伦精品一区二区三区在线 | 久久久.com | 精品国产欧美一区二区三区不卡 | 国产在线激情视频 | 羞羞涩涩在线观看 | 日韩av在线中文字幕 | 四虎影院免费在线播放 | 国产专区在线 | 国产熟熟 | 欧美一区免费 | 亚洲成人蜜桃 | 成人国产在线视频 | 色婷婷亚洲国产女人的天堂 | 最新中文字幕在线 | 精品久久久久久久久久久久 | 午夜视频一区二区三区 | 国产不卡一 | 99精品国产在热久久 | 精品国产乱码久久久久久图片 |