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
軟體下載
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
安裝
## 解壓
tar vxf apache-maven-3.5.0-bin.tar.gz
## 移動
mv apache-maven-3.5.0 /usr/local/maven3
修改環境變數,
在/etc/profile
中新增以下幾行
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
記得執行source /etc/profile
使環境變數生效。
驗證
最後執行mvn -v
驗證maven是否安裝成功
配置防護牆
關閉防護牆
#centos7
systemctl stop firewalld.service
==============================
#以下為:centOS 6.5關閉防火牆步驟
#關閉命令:
service iptables stop
#永久關閉防火牆:
chkconfig iptables off
兩個命令同時執行,執行完成後檢視防火牆關閉狀態
service iptables status
Jenkins 安裝
下載
cd /opt
wget http://mirrors.jenkins.io/war/2.83/jenkins.war
啟動服務
java -jar jenkins.war &
Jenkins 就啟動成功了!它的war包自帶Jetty伺服器
第一次啟動 Jenkins 時,出於安全考慮,Jenkins 會自動生成一個隨機的按照口令。注意控制檯輸出的口令,複製下來,然後在瀏覽器輸入密碼:
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
*************************************************************
*************************************************************
*************************************************************
訪問
瀏覽器訪問:http://localhost:8080/
輸入:0cca37389e6540c08ce6e4c96f46da0f
進入使用者自定義外掛介面,建議選擇安裝官方推薦外掛,因為安裝後自己也得安裝:
接下來是進入外掛安裝進度介面:
外掛一次可能不會完全安裝成功,可以點選Retry再次安裝。直到全部安裝成功
等待一段時間之後,外掛安裝完成,配置使用者名稱密碼:
輸入:admin/admin
系統管理-》全域性工具配置 jdk路徑,
第二步,外掛安裝和配置
有很多外掛都是選擇的預設的安裝的,所以現在需要我們安裝的外掛不多,Git plugin 和 Maven Integration plugin,publish over SSH。
外掛安裝:系統管理 > 外掛管理 > 可選外掛,勾選需要安裝的外掛,點選直接安裝或者下載重啟後安裝
配置全域性變數
系統管理 > 全域性工具配置
JDK
配置本地 JDK 的路徑,去掉勾選自動安裝
Maven
配置本地maven的路徑,去掉勾選自動安裝
其它內容可以根據自己的情況選擇安裝。
使用金鑰方式登入目標釋出伺服器
ssh 的配置可使用金鑰,也可以使用密碼,這裡我們使用金鑰來配置,在配置之前先配置好jenkins伺服器和應用伺服器的金鑰認證
Jenkins伺服器上生成金鑰對,使用ssh-keygen -t rsa
命令
輸入下面命令 一直回車,一個矩形圖形出現就說明成功,在~/.ssh/下會有私鑰id_rsa和公鑰id_rsa.pub
ssh-keygen -t rsa
將jenkins伺服器的公鑰id_rsa.pub
中的內容複製到應用伺服器 的~/.ssh/下的 authorized_keys
檔案
ssh-copy-id -i id_rsa.pub 192.168.0.xx
chmod 644 authorized_keys
在應用伺服器上重啟 ssh 服務,service sshd restart
現在 Jenkins 伺服器可免密碼直接登陸應用伺服器
之後在用 ssh B
- a. 非 root 賬戶可能不支援 ssh 公鑰認證(看伺服器是否有限制)
- b. 傳過來的公鑰檔案許可權不夠,可以給這個檔案授權下 chmod 644 authorized_keys
- c. 使用 root 賬戶執行 ssh-copy-id -i ~/.ssh/id_rsa.pub
這個指令的時候如果需要輸入密碼則要配置sshd_config
vi /etc/ssh/sshd_config
#內容
PermitRootLogin no
修改完後要重啟 sshd 服務
service sshd restart
最後,如果可以 SSH IP 免密登入成功說明 SSH 公鑰認證成功。
上面這種方式比較複雜,其實在 Jenkins 後臺直接新增操作即可,參考下面方式
使用使用者名稱+密碼方式登入目標釋出伺服器
(1)點選"高階"展開配置
(2)配置SSH的登陸密碼
配置完成後可點選“Test Configuration”測試到目標主機的連線,出現”success“則成功連線,如果有多臺應用伺服器,可以點選”增加“,配置多個“SSH Servers” 點選“儲存”以儲存配置。
第三步,Push SSH
系統管理 > 系統設定
選擇 Publish over SSH
Passphrase 不用設定
Path to key 寫上生成的ssh路徑:/root/.ssh/id_rsa
下面的 SSH Servers 是重點
- Name 隨意起名代表這個服務,待會要根據它來選擇
- Hostname 配置應用伺服器的地址
- Username 配置 linux 登陸使用者名稱
- Remote Directory 不填
點選下方增加可以新增多個應用伺服器的地址
第四步,部署專案
首頁點選新建:輸入專案名稱
下方選擇構建一個 Maven 專案,點選確定。
勾選丟棄舊的構建,選擇是否備份被替換的舊包。我這裡選擇備份最近的10個
原始碼管理,選擇 SVN,配置 SVN 相關資訊,點選 add 可以輸入 SVN 的賬戶和密碼
SVN 地址:http://192.168.0.xx/svn/xxx@HEAD,@HEAD
意思取最新版本
構建環境中勾選“Add timestamps to the Console Output”,程式碼構建的過程中會將日誌列印出來
在 Build 中輸入打包前的 mvn 命令,如:
clean install -Dmaven.test.skip=true -Ptest
意思是:排除測試的包內容,使用字尾為 test 的配置檔案。
Post Steps 選擇 Run only if build succeeds
點選Add post-build step,選擇 Send files or execute commands over SSH
Name 選擇上面配置的 Push SSH
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
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
這段指令碼的意思,就是 kill 舊專案,刪除舊專案,啟動新專案,備份老專案。
全文完。
參考:https://blog.csdn.net/LLQ_200/article/details/76921487