linux操作集-通過jekins+maven+git+nginx實現(xiàn)自動化部署

需求

多臺服務(wù)器耙册,實現(xiàn)自動化部署,jekins作為部署工具嚼锄,maven做為編譯工具爷辱,git作為代碼管理倉庫晕翠,nginx作為負載前置

開始

安裝環(huán)境
1. 下載jekins
2. 安裝jdk
3. 安裝git
4. 安裝maven私服
5. 安裝nginx
6. 組裝調(diào)試

先說安裝jekins和jdk

  1. 官網(wǎng)https://jenkins.io/download/下載jekins,此處選用war版担映,各系統(tǒng)通用.

2.上傳剛才下載的war包

scp jenkins.war  root@172.16.231.134:/jekins

3 .安裝jdk废士,通過官網(wǎng)https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下載,可以直接下載rpm包如

image.png

下載完成后上傳到服務(wù)器

scp jdk-8u191-linux-x64.rpm  root@172.16.231.134:/jekins

安裝jdk

#當(dāng)然一般情況下yum install java就好
rpm -ivh jdk-8u191-linux-x64.rpm  

查看java安裝目錄和版本號

java -verbose
java -version
  1. 下載tomcat7,暫時jekins支持到此版本,上傳到服務(wù)器蝇完,我是通過vagrant部署的虛擬機官硝,所以實際掛載是同構(gòu)vagrant管理,只需要把文件拖入掛載點即可
  1. 本地虛擬機短蜕,關(guān)閉防火墻
systemctl stop firewalld.service
systemctl disable firewalld.servic
  1. 將jekins.war放到tomcat的wepaaps下氢架,啟動tomcat,進入項目朋魔,此時會讓你輸入密鑰岖研,按其指示的文件就可以找到(如果找不到密碼,可以通過find / -name initialAdminPassword命令找到文件,如54bf32b3a8334a86b5842257b75d8e88)警检,進入后孙援,我選擇標(biāo)準(zhǔn)安裝


    image.png

7.下面繼續(xù)創(chuàng)建賬號,可以先不用就用剛才的admin扇雕,但密碼就是剛才那一長串拓售,然后進入,就可以創(chuàng)建項目了


image.png
  1. jekins安裝完成后镶奉,我們說git服務(wù)器础淤,我git采用阿里云的免費版gitlib崭放,地址
    https://code.aliyun.com,可用淘寶賬號登錄值骇,客戶端采用sourcetree莹菱,

  2. maven 安裝,下面該安裝maven私服了,先安裝maven

#首先安裝maven
wget /apps http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

tar -zxvf apache-maven-3.3.9-bin.tar.gz

#配置maven環(huán)境
vi /etc/profile

#文件中添加
export M2_HOME=/apps/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin

#然后發(fā)布
source /etc/profile

#測試
mvn -version

#修改settings中指定倉庫位置

mkdir /apps/mvn-repo

#在settings中指定倉庫地址吱瘩,添加如下
#<localRepository>/apps/mvn-repo</localRepository>


  1. 下面安裝nexus道伟,http://www.sonatype.org/nexus/archived/ 下載所需要的版本
#下載完后解壓
tar -zxvf nexus-3.7.1-02-unix.tar.gz 
#解壓后有兩個文件夾
#nexus-3.7.1-02 是nexus的核心文件
#sonatype-work maven下載jar存放地址

#修改nexus的默認端口號,我采用的是3.7的版本使碾,配置在etc中蜜徽,老版本在conf下
cd /usr/local/nexus/etc
vi nexus-default.properties  

#記得一定要先配置好M2_HOME路徑,否則容易報錯
#啟動nexus
/apps/nexus-3.7.1-02/bin/nexus start
#查看狀態(tài)
 /apps/nexus-3.7.1-02/bin/nexus status
#先說running表示成功票摇,此時輸入http://127.0.0.1:8081先說nexus頁面表示成功
  1. 安裝nginx
#我一樣采用最簡單的yum安裝
#加入nginx.repo
vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1


#安裝
yum install nginx

#啟動nginx
systemctl start nginx

#查看nginx狀態(tài)
ps -fe|grep Nginx
#顯示root      4641     1  0 07:56 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
#配置文件在/etc/nginx/nginx.conf拘鞋,后續(xù)我們會修改此文件做相關(guān)操作
  1. 組裝調(diào)試

a. 配置jenkins額外的插件


image.png

安裝插件

  • Maven Integration
  • Git plugin

b. 配置全局工具


image.png
image.png

首先配置maven路徑,使用settings改為我們剛才的maven配置文件地址


image.png

c. 新建項目矢门,我選擇自由風(fēng)格盆色,畢竟我通過腳本控制


image.png

配置git管理代碼方式


image.png

新增認證信息

image.png
cd ~/.ssh
#查看服務(wù)器公鑰,拷貝到git服務(wù)器上
cat id_rsa.pub

#查看私鑰祟剔,拷貝到j(luò)enkins中
cat id_rsa 

公鑰拷到對應(yīng)阿里云gitlib上


image.png

配置jenkins憑證


image.png

如上隔躲,拷貝服務(wù)器私鑰到此,點擊添加ok

image.png

點擊Pre Steps


image.png

此處一會放置構(gòu)建腳本使用物延。

下面宣旱,我習(xí)慣性的把jenkins的工作空間改到了我指定的目錄,

vi /root/.jenkins/config.xml 

#找到 <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir> 改成
<workspaceDir>/jenkins/workspace/${ITEM_FULL_NAME}</workspaceDir>

# 創(chuàng)建工作目錄
mkdir /jenkins

然后重啟jenkins

d. 下面配置我們的兩個腳本文件,因為我們模擬的是tomcat和jenkins在一個服務(wù)器上叛薯,所以浑吟,我們的maven先忽略私服的問題,且本地jar包只需install到本地即可耗溜。因此我們有以下兩個腳本
install.sh----本地打包jar使用

#!/bin/sh -

set -x

targetName=${project_name}

export BUILD_ID=deploy_id_${targetName}

workspace=`find /jenkins/   -name  ${JOB_NAME}`
if [ -d ${webName} ]
then
        echo "workspace is exists ${workspace}" > /dev/null
        `cd ${webName}`
        mvn clean install -Dmaven.test.skip=true
        if [ $? -eq 0 ]
        then
                echo "本地打包${targetName}完成" > /dev/null
        else
                echo  "本地打包${targetName}失敗" > /dev/null
                exit 1
        fi
else
        echo "workspace is not exists ${workspace}" > /dev/null
fi
~  

deplay_war.sh 構(gòu)建項目组力,啟動tomcat服務(wù)

#!/bin/sh -

set -x


targetName=${project_name}
targetWar=
base_tomcat=
port=${port}
tomcat_name="tomcat-${project_name}-${port}"
tomcat_target=

export BUILD_ID=tomcat_deploy_id_${tomcat_name}

workspace=`find /jenkins/   -name  ${JOB_NAME}`

echo "$M2_REPO" 

if [ -d ${workspace} ]
then 
    echo "workspace is exists ${workspace} \n" > /dev/null

    cd ${workspace}

    mvn clean install -Dmaven.test.skip=true 
    if [ $? -eq 0 ]
    then
        echo "本地打包${targetName}完成 \n" > /dev/null
    else
        echo  "本地打包${targetName}失敗 \n" > /dev/null
        exit 1
    fi
else 
    echo "workspace is not exists ${workspace} \n" > /dev/null
fi


targetWar=`find  /apps/mvn-space  -name $targetName*.war`


if [ -n "${targetWar}" ]
then 
    echo "echo ${targetWar} build success, start tomcat "
else
    echo "echo ${targetWar} is not exists,部署失敗\n"
    exit 1
fi



# # # 清除空間內(nèi)的basetomcat
rm -rf tomcat-base
#撿出tomcat
git clone git@code.aliyun.com:tlgj704/tomcat-base.git
# #
base_tomcat=`find /jenkins/ -name tomcat-base`

if [ -d "${base_tomcat}" ]
then
    echo "base_tomcat is ${base_tomcat}"
else
    echo "未找到base_tomcat抖拴,部署失敗"
    exist 1
fi
#將war拷貝到base-tomcat中
cp ${targetWar}  ${base_tomcat}/webapps/${targetName}.war

pushd ${base_tomcat}/conf/

#更新tomcat端口
`sed -i "s/8080/${port}/g" server.xml`

pushd 

#查找原有tomcat是否在運行
tomcat_target=`find /apps/ -name ${tomcat_name}`

if [  -d "${tomcat_target}" ]
then 
    #找到舊tomcat忿项,將會先殺4死舊服務(wù)
    echo "${tomcat_name} arealy  exists ,will stop ,and remove \n"

    #查找原有服務(wù)
    oldPid=`lsof -i:${port} | grep java |awk -F " " '{ print $2}' `

    #如果原服務(wù)存在,先殺死原服務(wù)
    if [ -n "${oldPid}" ]
        then
            `kill -9 "${oldPid}"`
        else
            echo "old pid is null\n"
        fi

    rm -rf ${tomcat_target}
    
else
    #沒找到舊tomcat城舞,將會創(chuàng)建新服務(wù)
    echo "${tomcat_name}  not exist,create new tomcat\n"
fi

cp -r ${base_tomcat}  /apps/${tomcat_name}

#啟動服務(wù)
sh /apps/${tomcat_name}/bin/startup.sh 


#刪除臨時tomcat
rm -rf ${base_tomcat}

echo "部署工程${JOB_NAME}完成"

sleep 5

exit 0


將兩個腳本文件我放到了/jenkins/script目錄下,下面配置jenkins使用寞酿。

e . 配置工程
首先家夺,我配置完剛才的父pom工程,記得腳本中的export project_name=wechant-sdk指定當(dāng)前工程jar包名即可

image.png

配置完git后伐弹,如上圖拉馋,配置調(diào)用腳本信息即可,點擊構(gòu)建


image.png

如上,構(gòu)建完成了煌茴,然后我們配置wab服務(wù)的工程job

注:如果此時你的linux報錯No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
可以參考 https://stackoverflow.com/questions/26313902/maven-error-perhaps-you-are-running-on-a-jre-rather-than-a-jdk 內(nèi)容随闺,大意就是maven打包時需要jdk,你的環(huán)境可能只配了jre蔓腐,需要安裝jdk矩乐,我的操作是如下

#不同版本可能不一樣,我是ubuntu的
apt-get install openjdk-8-jdk 

下面說web工程的腳本回论,project_name是war工程名

此時用到的就發(fā)布的腳本散罕,構(gòu)建成功,就表示tomcat啟動完成傀蓉。恭喜我們完成了一大步欧漱。


image.png
  1. 下面我們部署兩個web服務(wù),然后通過nginx進行負載均衡葬燎,實現(xiàn)熱備的方式
    來實現(xiàn)不停機發(fā)布

误甚。。谱净。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窑邦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岳遥,更是在濱河造成了極大的恐慌奕翔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浩蓉,死亡現(xiàn)場離奇詭異派继,居然都是意外死亡,警方通過查閱死者的電腦和手機捻艳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門驾窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人认轨,你說我怎么就攤上這事绅络。” “怎么了嘁字?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵恩急,是天一觀的道長。 經(jīng)常有香客問我纪蜒,道長衷恭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任纯续,我火速辦了婚禮随珠,結(jié)果婚禮上灭袁,老公的妹妹穿的比我還像新娘。我一直安慰自己窗看,他們只是感情好茸歧,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著显沈,像睡著了一般软瞎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上构罗,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天铜涉,我揣著相機與錄音,去河邊找鬼遂唧。 笑死芙代,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盖彭。 我是一名探鬼主播纹烹,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼召边!你這毒婦竟也來了铺呵?” 一聲冷哼從身側(cè)響起调缨,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤删咱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后终吼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贞盯,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡音念,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了躏敢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闷愤。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖件余,靈堂內(nèi)的尸體忽然破棺而出讥脐,到底是詐尸還是另有隱情,我是刑警寧澤啼器,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布旬渠,位于F島的核電站,受9級特大地震影響端壳,放射性物質(zhì)發(fā)生泄漏坟漱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一更哄、第九天 我趴在偏房一處隱蔽的房頂上張望芋齿。 院中可真熱鬧,春花似錦成翩、人聲如沸觅捆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栅炒。三九已至,卻和暖如春术羔,著一層夾襖步出監(jiān)牢的瞬間赢赊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工级历, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留释移,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓寥殖,卻偏偏與公主長得像玩讳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嚼贡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容