天天看點

jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署

編輯推薦:

本文主要詳細介紹了什麼叫做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

即可進入頁面:

jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署

之後cat上面所寫的目錄,得到密碼,輸入進去:

cat + 頁面上的路徑

輸入密碼即可。

注:可能會出現通路不了的情況,這時候需要通路一下

ip:8050/jenkins/pluginManager/advanced

jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署

修改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部署流程圖_CICD搭建準備——Jenkins實作自動部署

然後開始配置Jenkins,增加git位址,添加建構參數,最後加上maven建構指令(注意在maven指令部分千萬不要加mvn)

jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署
jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署
jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署
jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署
jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署

來說一下最後的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

用一個流程圖來概括一下整個流程:

jenkins部署流程圖_CICD搭建準備——Jenkins實作自動部署