編輯推薦:
本文主要詳細介紹了什麼叫做Jenkins,搭建Jenkins的目的,Jenkins的特點, 産品釋出的流程
希望對您的學習有所幫助。
本文來自于csdn,由火龍果軟體Delores編輯推薦。
利用Git+Jenkins實作自動部署Spring Boot項目
一.什麼叫做Jenkins
二.搭建Jenkins的目的
三.Jenkins的特點
四.産品釋出的流程
六.git搭建
七.maven本地倉庫搭建
八.自動部署demo
一.什麼叫做Jenkins
Jenkins是一個功能強大的應用程式,允許持續內建和持續傳遞項目,無論用的是什麼平台。這是一個免費的源代碼,可以處理任何類型的建構或持續內建。內建Jenkins可以用于一些測試和部署技術。Jenkins是一種允許持續內建的軟體。
二.搭建Jenkins的目的
持續、自動地建構/測試軟體項目。
更好地實作整個CICD流程。
三.Jenkins的特點
開源的java語言開發持續內建工具,支援CI,CD。
易于安裝部署配置:可通過yum安裝,或下載下傳war包以及通過docker容器等快速實作安裝部署,可友善web界面配置管理。
消息通知及測試報告:內建RSS/E-mail通過RSS釋出建構結果或當建構完成時通過e-mail通知,生成JUnit/TestNG測試報告。
分布式建構:支援Jenkins能夠讓多台計算機一起建構/測試。
檔案識别:Jenkins能夠跟蹤哪次建構生成哪些jar,哪次建構使用哪個版本的jar等。
豐富的插件支援:支援擴充插件,你可以開發适合自己團隊使用的工具,如git,svn,maven,docker等。
四.産品釋出的流程
産品設計成型 -> 開發人員開發代碼 -> 測試人員測試功能 -> 運維人員釋出上線
其中,包括很重要的三點:
持續內建 (Continuous integration,簡稱CI)
重點是将各個開發人員的工作集合到一個代碼倉庫中。一般來說,每天都要進行幾次,主要目的是盡早發現內建錯誤。
持續傳遞(Continuous delivery,簡稱CD)
目的是最小化部署或者釋放過程中固有的摩擦。他的實作通常能夠建構部署的每個步驟自動化,以便任何情況下都能安全地完成代碼釋出。
持續部署(continuous deployment)
無論何時對代碼進行更改,都會自動進行建構/部署。
五.Jenkins的搭建(linux)
我在這裡預設已經安裝好了jdk。
所需安裝包:
Jenkins下載下傳位址:https://jenkins.io/,先下載下傳war包;(我使用的是2.190.3版本的war包)
Tomcat下載下傳位址: https://tomcat.apache.org/download-70.cgi(我使用的是7.0.96的tomcat)
2.将下載下傳好的包上傳到linux伺服器上;
建立一個cicd的目錄
mkdir -p /data/cicd
mkdir -p /data/cicd/git
mkdir -p /data/cicd/tomcat
将兩個包上傳到/data/cicd/tomcat目錄下:先對tomcat的包進行解壓,之後将war放到tomcat的webapps目錄下,我這時将tomcat的啟動端口改為8050了,避免預設的8080和别人的沖突了,指令如下:
cd /data/cicd/tomcat
tar -zxvf apache-tomcat-7.0.96
cd apache-tomcat-7.0.96/webapps
cp /data/cicd/tomcat/jenkins.war ./
#這裡去修改conf目錄下的server.xml,
修改端口号為8050即可,就省略不寫了
cd ../bin
sh start.sh
啟動後在本地通路,ip+8050:/jenkins
即可進入頁面:
之後cat上面所寫的目錄,得到密碼,輸入進去:
cat + 頁面上的路徑
輸入密碼即可。
注:可能會出現通路不了的情況,這時候需要通路一下
ip:8050/jenkins/pluginManager/advanced
修改Update Site的url的協定為http即可。(即:去掉s
)或者直接替換成清華大學所提供的位址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
之後安裝插件,選擇“安裝推薦的插件”,之後會自動安裝。
注:這時可能會遇見一個問題:報一個“An error occurred during installation:
No such plugin: cloudbees-folder”的錯誤,意思是安裝插件cloudbees-folder失敗,是因為下載下傳的Jenkins.war裡沒有cloudbees-folder插件。是以得下載下傳一個。
在這個網址檢視
下載下傳結束以後,先shutdown Jenkins服務,cloudbees-folder.hpi放在tomcat目錄下的
/webapps/jenkins/WEB-INF/detached-plugins下即可。然後重新開機tomcat即可。
六.git搭建
下載下傳并安裝git:一般網上比較常見的就是:
yum install
git
預設安裝在/usr/local/git下,如果不知道在哪裡,用
which git
但是這個指令安裝的git一般為1.8.3,但是官網上最新的為2.0以上了。這也是yum一直存在的問題,版本不好控制。
是以為了安裝最新的git,我們先從github上下載下傳最新的源碼,自己進行編譯安裝。
自己安裝制定版本的git:(我這裡自定了2.17.0版本)
①下載下傳安裝包:
wget https://github.com/git/
git/archive/v2.17.0.tar.gz
②壓縮包解壓:
tar -zxvf v2.17.0.tar.gz
③安裝編譯源碼所需依賴(遇見提示輸入y即可)
yum install
curl-devel expat-devel
gettext-devel openssl-devel
zlib-devel gcc perl-ExtUtils-MakeMaker
④如之前安裝了老版本的git,則執行下面語句進行删除:(沒有則跳過)
yum remove git
⑤進入解壓後的檔案夾,并執行編譯:
cd git-2.17.0
make prefix=/data/cicd/git all
⑥安裝git至/data/cicd/git路徑
make prefix=/data/cicd/git
install
⑦打開環境變量配置檔案,并進行git相關環境配置:
vim /etc/profile
将下面語句放入檔案當中
#git
PATH=$PATH:/usr/local/git/bin
export PATH
最後儲存一下:
source /etc/profile
⑧檢視安裝git的版本:
git --version
七.maven本地倉庫搭建
下載下傳maven的jar包并解壓
我下載下傳的是:apache-maven-3.6.1
cd /usr/local
mkdir maven
cd maven
wget http://mirror.bit.edu.cn
/apache/maven/maven-3/3.6.1
/binaries/apache-maven-3.6.1-bin.tar.gz
tar zvxf apache-maven-3.6.1-bin.tar.gz
2.配置環境變量,将下面内容copy到本地環境變量配置檔案中,并儲存:
export MAVEN_HOME=/usr/local
/maven/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH
記得source一下,重新整理環境變量:
source /etc/profile
最後檢查一下版本,看能否正常顯示:
mvn -version
一般來說會将maven配置檔案中的鏡像位址換為阿裡的鏡像倉庫位址:
alimaven
aliyun
maven
http://maven.aliyun.com
/nexus/content/groups/public/
central
八.自動部署demo
前提:Jenkins所在的伺服器,已經配置好了git,maven環境以及下載下傳好了Jenkins上的pipeline插件。
注:Jenkins預設工作目錄:
使用者名/.jenkins
裡面有個jobs檔案夾,所有建的Jenkins job都在裡面。
在Jenkins上建立一個job,名叫:test-maven(因為要建構的是maven項目):
然後開始配置Jenkins,增加git位址,添加建構參數,最後加上maven建構指令(注意在maven指令部分千萬不要加mvn)
來說一下最後的shell指令:
sshpass -f /data/.admuser.pw
ssh -o StrictHostKeyChecking=no admin@$
{server_ip}
"/data/lixin/demo/spring
-boot-run.sh stop
demo-0.0.1-SNAPSHOT"
sshpass -f /data/.admuser.pw scp -r -o StrictHostKeyChecking=no
./target/
demo-0.0.1-SNAPSHOT.jar admin@${server_ip}:/data/lixin/demo/
sshpass -f /data/.admuser.pw ssh -o StrictHostKeyChecking=no
admin@$
{server_ip} "/data/lixin/demo/spring
-boot-run.sh
restart demo-0.0.1-SNAPSHOT"
其中/data/.admuser.pw 為目标伺服器的密碼
spring-boot-run.sh為一個jar包啟動腳本具體如下:
#!/bin/sh
SERVICE_NAME=$2
HOME="/data/lixin/demo"
JAVA_OPTS=""
SERVICE_OPTS=""
PATH_TO_JAR=$HOME/$
{SERVICE_NAME}.jar
PID_PATH_NAME=$HOME/$
{SERVICE_NAME}.pid
source /etc/profile
echo "JAVA_HOME=$JAVA_HOME"
function start(){
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
cd $HOME/
nohup java $JAVA_OPTS -jar
$PATH_TO_JAR $SERVICE_OPTS
>
server.log 2>&1 &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already
running ..."
fi
}
function status(){
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME is running ,
pid is $PID
..."
else
echo "$SERVICE_NAME is not running ..."
fi
}
function stop(){
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
kill -9 $PID;
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
}
function restart(){
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stopping ...";
kill -9 $PID;
echo "$SERVICE_NAME stopped ...";
rm $PID_PATH_NAME
echo "$SERVICE_NAME starting ..."
cd $HOME/
nohup java $JAVA_OPTS -jar $PATH_TO_JAR
$SERVICE_OPTS
>server.log 2>&1 &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME starting ..."
cd $HOME/
nohup java $JAVA_OPTS -jar $PATH_TO_JAR
$SERVICE_OPTS
>server.log 2>&1 &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
fi
}
case $1 in
start)
start
;;
status)
status
;;
stop)
stop
;;
restart)
restart
;;
esac
用一個流程圖來概括一下整個流程: