12.23 使用 Jenkins 部署 Spring Boot

Jenkins 是 Devops 神器,本篇文章介紹如何安裝和使用 Jenkins 部署 Spring Boot 項目

Jenkins 搭建、部署分為四個步驟;

  • 第一步,Jenkins 安裝
  • 第二步,插件安裝和配置
  • 第三步,Push SSH
  • 第四步,部署項目

第一步 ,Jenkins 安裝

準備環境:

JDK:1.8
Jenkins:2.83 Centos:7.3
maven 3.5

Jdk 默認已經安裝完成

配置 Maven

版本要求 Maven3.5.0

軟件下載

<code>wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
/<code>

安裝

<code>## 解壓
tar vxf apache-maven-3.5.0-bin.tar.gz
## 移動
mv apache-maven-3.5.0 /usr/local/maven3
/<code>

修改環境變量, 在/etc/profile中添加以下幾行

<code>MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
/<code>

記得執行source /etc/profile使環境變量生效。

驗證 最後運行mvn -v驗證maven是否安裝成功

配置防護牆

關閉防護牆

<code>#centos7
systemctl stop firewalld.service
==============================
#以下為:centOS 6.5關閉防火牆步驟
#關閉命令:
service iptables stop
#永久關閉防火牆:
chkconfig iptables off
/<code>

兩個命令同時運行,運行完成後查看防火牆關閉狀態

<code>service iptables status
/<code>

Jenkins 安裝

下載

<code>cd /opt
wget http://mirrors.jenkins.io/war/2.83/jenkins.war
/<code>

啟動服務

<code>java -jar jenkins.war &
/<code>

Jenkins 就啟動成功了!它的war包自帶Jetty服務器

第一次啟動 Jenkins 時,出於安全考慮,Jenkins 會自動生成一個隨機的按照口令。注意控制檯輸出的口令,複製下來,然後在瀏覽器輸入密碼:

<code>INFO: 

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

0cca37389e6540c08ce6e4c96f46da0f

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************
/<code>

訪問 瀏覽器訪問:http://localhost:8080/

使用 Jenkins 部署 Spring Boot

輸入:0cca37389e6540c08ce6e4c96f46da0f

進入用戶自定義插件界面,建議選擇安裝官方推薦插件,因為安裝後自己也得安裝:

使用 Jenkins 部署 Spring Boot

接下來是進入插件安裝進度界面:

使用 Jenkins 部署 Spring Boot

插件一次可能不會完全安裝成功,可以點擊Retry再次安裝。直到全部安裝成功

使用 Jenkins 部署 Spring Boot

等待一段時間之後,插件安裝完成,配置用戶名密碼:

使用 Jenkins 部署 Spring Boot

輸入:admin/admin

系統管理-》全局工具配置 jdk路徑,

使用 Jenkins 部署 Spring Boot

第二步,插件安裝和配置

有很多插件都是選擇的默認的安裝的,所以現在需要我們安裝的插件不多,Git plugin 和 Maven Integration plugin,publish over SSH。

插件安裝:系統管理 > 插件管理 > 可選插件,勾選需要安裝的插件,點擊直接安裝或者下載重啟後安裝

使用 Jenkins 部署 Spring Boot

配置全局變量

系統管理 > 全局工具配置

JDK

配置本地 JDK 的路徑,去掉勾選自動安裝

使用 Jenkins 部署 Spring Boot

Maven

配置本地maven的路徑,去掉勾選自動安裝

使用 Jenkins 部署 Spring Boot

其它內容可以根據自己的情況選擇安裝。

使用密鑰方式登錄目標發佈服務器

ssh 的配置可使用密鑰,也可以使用密碼,這裡我們使用密鑰來配置,在配置之前先配置好jenkins服務器和應用服務器的密鑰認證 Jenkins服務器上生成密鑰對,使用ssh-keygen -t rsa命令

輸入下面命令 一直回車,一個矩形圖形出現就說明成功,在~/.ssh/下會有私鑰id_rsa和公鑰id_rsa.pub

<code>ssh-keygen -t rsa
/<code>

jenkins服務器的公鑰id_rsa.pub中的內容複製到應用服務器 的~/.ssh/下的 authorized_keys文件

<code>ssh-copy-id -i id_rsa.pub 192.168.0.xx
chmod 644 authorized_keys
/<code>

應用服務器上重啟 ssh 服務,service sshd restart現在 Jenkins 服務器可免密碼直接登陸應用服務器

之後在用 ssh B嘗試能否免密登錄 B 服務器,如果還是提示需要輸入密碼,則有以下原因

  • a. 非 root 賬戶可能不支持 ssh 公鑰認證(看服務器是否有限制)
  • b. 傳過來的公鑰文件權限不夠,可以給這個文件授權下 chmod 644 authorized_keys
  • c. 使用 root 賬戶執行 ssh-copy-id -i ~/.ssh/id_rsa.pub 這個指令的時候如果需要輸入密碼則要配置sshd_config
<code>vi /etc/ssh/sshd_config
#內容
PermitRootLogin no
/<code>

修改完後要重啟 sshd 服務

<code>service sshd restart
/<code>

最後,如果可以 SSH IP 免密登錄成功說明 SSH 公鑰認證成功。

上面這種方式比較複雜,其實在 Jenkins 後臺直接添加操作即可,參考下面方式

使用用戶名+密碼方式登錄目標發佈服務器

(1)點擊”高級”展開配置

使用 Jenkins 部署 Spring Boot

(2)配置SSH的登陸密碼

使用 Jenkins 部署 Spring Boot

配置完成後可點擊“Test Configuration”測試到目標主機的連接,出現”success“則成功連接,如果有多臺應用服務器,可以點擊”增加“,配置多個“SSH Servers” 點擊“保存”以保存配置。

第三步,Push SSH

系統管理 > 系統設置

選擇 Publish over SSH

使用 Jenkins 部署 Spring Boot

Passphrase 不用設置 Path to key 寫上生成的ssh路徑:/root/.ssh/id_rsa

下面的 SSH Servers 是重點

  • Name 隨意起名代表這個服務,待會要根據它來選擇
  • Hostname 配置應用服務器的地址
  • Username 配置 linux 登陸用戶名
  • Remote Directory 不填

點擊下方增加可以添加多個應用服務器的地址

第四步,部署項目

首頁點擊新建:輸入項目名稱

使用 Jenkins 部署 Spring Boot

下方選擇構建一個 Maven 項目,點擊確定。

勾選丟棄舊的構建,選擇是否備份被替換的舊包。我這裡選擇備份最近的10個

使用 Jenkins 部署 Spring Boot

源碼管理,選擇 SVN,配置 SVN 相關信息,點擊 add 可以輸入 SVN 的賬戶和密碼

使用 Jenkins 部署 Spring Boot

SVN 地址:http://192.168.0.xx/svn/xxx@HEAD,@HEAD意思取最新版本

構建環境中勾選“Add timestamps to the Console Output”,代碼構建的過程中會將日誌打印出來

使用 Jenkins 部署 Spring Boot

在 Build 中輸入打包前的 mvn 命令,如:

<code>clean install -Dmaven.test.skip=true -Ptest
/<code>

意思是:排除測試的包內容,使用後綴為 test 的配置文件。

使用 Jenkins 部署 Spring Boot

Post Steps 選擇 Run only if build succeeds

使用 Jenkins 部署 Spring Boot

點擊Add post-build step,選擇 Send files or execute commands over SSH

使用 Jenkins 部署 Spring Boot

Name 選擇上面配置的 Push SSH

使用 Jenkins 部署 Spring Boot

Source files配置:target/xxx-0.0.1-SNAPSHOT.jar 項目jar包名 Remove prefix:target/ Remote directory:Jenkins-in/ 代碼應用服務器的目錄地址, Exec command:Jenkins-in/xxx.sh 應用服務器對應的腳本。

需要在應用服務器創建文件夾:Jenkins-in,在文件夾中複製一下腳本內容:xxx.sh

<code>DATE=$(date +%Y%m%d)
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/usr/java/jdk1.8.0_131
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
DIR=/root/xxx
JARFILE=xxx-0.0.1-SNAPSHOT.jar

if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR

ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9
mv $JARFILE backup/$JARFILE$DATE
mv -f /root/Jenkins-in/$JARFILE .

java -jar $JARFILE > out.log &
if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi

cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
/<code>

這段腳本的意思,就是 kill 舊項目,刪除舊項目,啟動新項目,備份老項目。

全文完。


分享到:


相關文章: