Jenkins+Gitlab+Maven+Tomcat 持續(xù)集成,自動(dòng)部署項(xiàng)目

持續(xù)集成:Continuous Integration,簡(jiǎn)稱CI,意思是,在一個(gè)項(xiàng)目中,任何人對(duì)代碼庫(kù)的任何改動(dòng),都會(huì)觸發(fā)CI服務(wù)器自動(dòng)對(duì)項(xiàng)目進(jìn)行構(gòu)建,自動(dòng)運(yùn)行測(cè)試,甚至自動(dòng)部署到測(cè)試環(huán)境。這樣做的好處就是,隨時(shí)發(fā)現(xiàn)問(wèn)題,隨時(shí)修復(fù)。因?yàn)樾迯?fù)問(wèn)題的成本隨著時(shí)間的推移而增長(zhǎng),越早發(fā)現(xiàn),修復(fù)成本越低。當(dāng)你想要更新你的項(xiàng)目,只要?jiǎng)邮痔峤淮a到你的代碼倉(cāng)庫(kù),剩余的更新部署操作就只管交由CI服務(wù)器來(lái)完成就好,這次使用的CI工具是JenKins。

Jenkins.jpg
  • 搭建Jenkins持續(xù)集成服務(wù)器可以分為兩大步驟,一是在服務(wù)器安裝好所需的軟件,二是配置我們的持續(xù)集成項(xiàng)目
Jenkins拉取代碼編譯部署示意圖.png
  • 安裝所需的各種軟件

    • 安裝啟動(dòng) Jenkins

      執(zhí)行命令 rpm -ivh xxx.rpm  安裝Jenkins
      
      //啟動(dòng)JenKins
      /etc/init.d/jenkins start 
      
      瀏覽器輸入 http://xxx服務(wù)器地址:8080/
      
      //默認(rèn)端口號(hào)是8080
      
    Jenkins啟動(dòng)1.png
    JenKins啟動(dòng).png
    • JenKins默認(rèn)端口號(hào)是8080,這與Tomcat默認(rèn)端口號(hào)沖突,所有我們可以把Jenkins的端口號(hào)改成我們自己定義的端口號(hào) 9090

      • 修改端口號(hào)的文件為 /etc/sysconfig/jenkins,字段為JENKINS_PORT

        執(zhí)行命令進(jìn)行修改,如果碰到無(wú)法啟動(dòng)Jnekins, 無(wú)法啟動(dòng)(如遇此Starting Jenkins bash: /usr/bin/java: No such file or directory錯(cuò)誤 )修改 /etc/init.d/jenkins 加入 /opt/jdk1.8.0_181/bin/java原因
        是Java的環(huán)境變量沒(méi)有找到,一般使用centos服務(wù)默認(rèn)安裝openjdk,如果自己卸載openJdk并重新安裝sun的JDK,則也需要在該文件中加入路徑,如圖所示
        
        vim /etc/sysconfig/jenkins 
        
        //添加Java地址
        
        vim /etc/init.d/jenkins
        
        
      修改Jenkins端口.png
      添加Java地址.png
  • 修改端口無(wú)法啟動(dòng)的情況,有可能是服務(wù)器防火墻沒(méi)有添加端口的監(jiān)聽(tīng),導(dǎo)致無(wú)法訪問(wèn)

    vim /etc/sysconfig/iptables
    
    查看是否監(jiān)聽(tīng)端口(如果配置了自己定義的端口,需要先訪問(wèn)該端口一次才能看到監(jiān)聽(tīng))
    
    netstat -ntlp
    
    //重啟防火墻配置(不重啟端口還是無(wú)法生效)
    service iptables restart
    
添加新監(jiān)聽(tīng)的端口.png
  • 只需要在訪問(wèn)jenkins服務(wù)器的網(wǎng)址url地址后加上exit。例如我jenkins的地址http://localhost:8080/,那么我只需要在瀏覽器地址欄上輸入http://xxx:9090/exit 網(wǎng)址就能關(guān)閉jenkins服務(wù).

  • 重啟Jenkies

    //xxx:8080 是搭建Jenkins服務(wù)器地址
    http://xxx:8080/restart
    
    
  • 重新加載配置信息

 ```
 http://localhost:8080/reload
 ```
  • 安裝jdk

```
查看Java相關(guān)的包信息: 
 rpm -qa|grep java (或rpm -qa|grep jdk,rpm安裝后,包名里沒(méi)有Java)
卸載 
yum -y remove java [包名] 
例如 
yum –y remove java java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64 

jdk 卸載方法 https://blog.csdn.net/xyj0808xyj/article/details/52444694

//解壓到指定目錄
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /opt/

//編輯配置文件
vim /etc/profile

export JAVA_HOME=/opt/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH 
  
//更新配置文件
source /etc/profile

```
  • 安裝Tomcat

    • 官網(wǎng)下載 Tomcat8.5

    • 直接解壓到服務(wù)器(注意這里指的服務(wù)器是項(xiàng)目部署的服務(wù)器,應(yīng)該是和部署JenKins的服務(wù)器不同)

    • 強(qiáng)制關(guān)閉 tomcat 命令

      //強(qiáng)制關(guān)閉
      ps -ef|grep tomcat
      
      //殺掉無(wú)法關(guān)閉進(jìn)程
      kill -9 XXXX
      
      
  • 安裝 git (安裝在部署JenKins服務(wù)器上)

    安裝依賴
    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
    
    yum install  gcc perl-ExtUtils-MakeMaker
    
    如果已經(jīng)安裝了git,但是版本太老,可以先卸載
    yum remove git 
    
    下載git包解壓
    tar -vxf git-2.15.1.tar.gz -C /opt
    
    進(jìn)入git 目錄
    cd /opt/git-2.18.0/
    
    執(zhí)行以下命令
    
    make prefix=/usr/local/git all
    
    make prefix=/usr/local/git install
    
    echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile  //配置環(huán)境變量
    
    source /etc/profile //跟新配置文件
    
    git --version 查看git版本
    
    
安裝git版本.png
- 安裝 maven(安裝在部署JenKins服務(wù)器上)
  -
  - 后臺(tái)項(xiàng)目為spring-boot搭建,需要安裝maven
  - 下載 [maven 3.5.4](http://maven.apache.org/download.cgi)
```
執(zhí)行以下命令
tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /opt

在/etc/profile文件末尾增加以下配置
M2_HOME=/opt/tyrone/maven (注意這里是maven的安裝路徑)
 export PATH=${M2_HOME}/bin:${PATH}
 
重載/etc/profile這個(gè)文件
  source /etc/profile 
```
[圖片上傳失敗...(image-ae6fb0-1535116185320)]

- GitLab服務(wù)器配置
  -
  - 由于公司已經(jīng)搭建好Gitlab服務(wù)器,所以我也沒(méi)有配置過(guò)Gitlab,不過(guò)Gitlab配置網(wǎng)上已經(jīng)有很多資料,可以自行百度。
  • Jenkins配置新建項(xiàng)目配置

    • Jenkins配置

      • 第一次進(jìn)入Jnekins,首先根據(jù)提示找到安裝服務(wù)器的密碼

      • 如果服務(wù)器可以聯(lián)網(wǎng),則選擇他推薦的插件直接安裝,如果服務(wù)器無(wú)法連接外網(wǎng),只是在公司內(nèi)網(wǎng)環(huán)境,則可以離線下載插件再上傳到我們服務(wù)器的Jenkin中,離線插件下載地址,這種方式需要耐心,因?yàn)樾枰惭b的插件可不止一兩個(gè),如果你的服務(wù)器不能上網(wǎng),我這有一份下載好的插件,可以自行去下載(下載地址

      • 在Jenkins系統(tǒng)管理模塊的系統(tǒng)配置中配置我們的Gitlab,需要登錄到Gitlab中獲取APIToken

        系統(tǒng)配置GitLab.png
        獲取API Token.png
        GitLab API Token配置 .png
      • 生成ssh key(在部署Jenkins服務(wù)器上生成)

        • 配置SSH KEY ,用于后續(xù)項(xiàng)目可以通過(guò)Jenkins部署到應(yīng)用服務(wù)器

          輸入命令,一路回車
          ssh-keygen -t rsa 
          
          現(xiàn)在你的私鑰被放在了~/.ssh/id_rsa 這個(gè)文件里,而公鑰被放在了 ~/.ssh/id_rsa.pub 這個(gè)文件里
          
          可以將私鑰配置到JneKins的系統(tǒng)設(shè)置中,配置框選項(xiàng)是需要Jenkins安裝SSH插件的,如下圖所示
          
          公鑰則配置到各個(gè)應(yīng)用服務(wù)器的這個(gè)目錄下/root/.ssh/authorized_keys,沒(méi)有authorized_keys則創(chuàng)建這個(gè)文件,如下圖所示
          
          最后測(cè)試應(yīng)用服務(wù)器是否都能成功連接,如下圖所示
          
           
          
        ssh私鑰配置.png
        公鑰復(fù)制到應(yīng)用服務(wù)器authorized_keys.png
        測(cè)試配置公鑰的應(yīng)用服務(wù)器是否連接成功.png
        • 接下來(lái)還是系統(tǒng)管理模塊中的全局工具配置 Jenkins的 JDK、git和maven。前面我們已經(jīng)把這些工具都給安裝了,現(xiàn)在配置到Jenkins中,如下圖所示

          配置Jenkins jdk git.png
          配置Jenkins maven.png
    • 新建項(xiàng)目配置

      • 新建一個(gè)maven項(xiàng)目(沒(méi)有maven項(xiàng)目選項(xiàng)則需要下載對(duì)應(yīng)插件)
      新建maven項(xiàng)目.png
      • 首先配置源碼管理,如圖

        新建項(xiàng)目源碼管理配置.png
      • 配置項(xiàng)目構(gòu)建觸發(fā)器

        配置項(xiàng)目構(gòu)建觸發(fā)器.png
      • 配置maven項(xiàng)目編譯

        配置maven項(xiàng)目編譯.png
      • 項(xiàng)目構(gòu)建成功后部署應(yīng)用服務(wù)器的配置

      項(xiàng)目構(gòu)建成功后部署應(yīng)用服務(wù)器的配置.png
      • Tomcat重啟腳本(應(yīng)當(dāng)放在與Tomcat目錄同路徑下)

        #! /bin/sh
        echo '####################開(kāi)始自動(dòng)部署####################'
        export JAVA_HOME=/usr/local/jdk1.8.0_181
        path=`pwd` #當(dāng)前路徑
        tomcatPath=/data/XXXX/tomcat_gxxmt_8080 #指定tomcat文件目錄名稱
        cd ../$tomcatPath/bin #進(jìn)入tomcat的bin目錄
        PID=$(ps -fu `whoami`|grep tomcat|grep -v grep|awk '{print $2}')
        if [ -z "$PID" ];then
         echo "no tomcat process"
        else
        ./shutdown.sh #停止tomcat服務(wù)
        fi
        cd ../webapps #進(jìn)入tomcat的webapps目錄
        rm -rf XXXX-api
        echo '####################刪除完成####################'
        #rm -fr gxxmt-api.war #刪除test文件目錄
        #mv gxxmt-api.war gxxmt-api.war.$(date +%Y%m%d) #備份webapps下的test16 cp $path/test.war ./ #復(fù)制test.war到webapps路徑下
        #cd /var/lib/jenkins/workspace/gxxmt-api/gxxmt-api/target/
        #cp gxxmt-api.war /data/gxxmt/tomcat_gxxmt_8080/webapps/
        cd ../bin
        ./startup.sh #啟動(dòng)tomcat服務(wù)
        echo '####################部署結(jié)束####################'
        
      • 項(xiàng)目構(gòu)建成功并發(fā)布到了對(duì)應(yīng)服務(wù)器執(zhí)行對(duì)應(yīng)腳本,這里就可以看到JenKins的靈活性,可以配置多臺(tái)發(fā)布的應(yīng)用服務(wù)器的多個(gè)Tomcat,靈活自動(dòng)部署應(yīng)用服務(wù)器配置

      • 項(xiàng)目構(gòu)建編譯部署成功

        項(xiàng)目構(gòu)建編譯部署成功.png
  • 集成部署遇到的問(wèn)題

    • ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000 ms](執(zhí)行腳本沒(méi)有正常退出,導(dǎo)致部署超時(shí))


      錯(cuò)誤1.png
 ```
 nohup sh /data/gxxmt-api/restart.sh
 //當(dāng)我們使用nohup命令的的時(shí)候,日志會(huì)被打印到nohup.out文件中去。
 //如果我們不做任何處理,會(huì)隨著每次的重新啟動(dòng),nohup.out會(huì)越來(lái)越大
 //。所以我在我執(zhí)行的腳本中添加了
 cp /dev/null nohup.out
 ```
  • 在jenkins項(xiàng)目配置SSH Publishers勾選了Exec in pty,表示執(zhí)行完腳本立即退出


    錯(cuò)誤1解決勾選Exec in pty.png
  • jenkins主目錄遷移,jenkins默認(rèn)主目錄一般都是安裝在系統(tǒng)盤,運(yùn)行一段時(shí)間后項(xiàng)目部署的歷史版本,日志文件,工作控件都會(huì)占用大量的系統(tǒng)空間,這樣就會(huì)引發(fā)系統(tǒng)盤磁盤空間不足,首先我們可以修改jenkins主目錄
    //更改主目錄
    vim /etc/sysconfig/jenkins
    JENKINS_HOME="/data/jenkins"
    
    復(fù)制 /var/lib/jenkins/ 目錄到 /data目錄下
    
    修改目錄用戶權(quán)限
    
    chown -R jenkins:jenkins /data/jenkins
    
    重啟 /etc/sysconfig/jenkins restart
    
    主目錄修改成功.png
  • 其次我們還可以在項(xiàng)目配置中設(shè)置丟棄歷史構(gòu)建


    設(shè)置丟棄歷史構(gòu)建.png
  • 錯(cuò)誤信息:Url is blocked: Requests to the local network are not allowed,意思為Gitlab 設(shè)置Jenkins的webhook地址無(wú)法設(shè)置


    WebHook地址無(wú)法設(shè)置.png
  • 升級(jí)新版Gitlab,要允許WebHook,需要在在Gitlab的Admin賬戶中,在settings標(biāo)簽下面,找到OutBound Request,勾選上Allow requests to the local network from hooks and services ,保存更改即可解決問(wèn)題(如下圖所示)

    Gitlab 允許WebHook.png
  • Gradle 編譯Android 項(xiàng)目 /lib64/libc.so.6: version `GLIBC_2.14’ not found,系統(tǒng)是CentOS 6.9,最高支持glibc的版本為2.12,而研發(fā)程序要2.14版本,所以需要升級(jí)。

glibc_2.14庫(kù)無(wú)法找到.png
```
//查看系統(tǒng)版本
cat /etc/redhat-release
//查看glibc庫(kù)版本
strings /lib64/libc.so.6 |grep GLIBC_
//下載glibc庫(kù) 并安裝
#下載
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz 
wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz 
#解壓
tar -xvf  glibc-2.14.tar.gz 
tar -xvf  glibc-ports-2.14.tar.gz
#創(chuàng)建相關(guān)目錄
mv glibc-ports-2.14 glibc-2.14/ports
mkdir glibc-build-2.14
cd glibc-build-2.14/ 

#生成C編譯的環(huán)境
yum -y install gcc

#編譯C
../glibc-2.14/configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make

# 安裝剛才編譯好的 libc.so
makeinstall 

# 查看glibc庫(kù)版本
strings /lib64/libc.so.6 |grep GLIBC_
```

最后

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 176,505評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 63,017評(píng)論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,786評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,219評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,438評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,796評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,995評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,230評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,918評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,697評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

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