Jenkins+Gitlab+Maven+Tomcat 持續集成,自動部署項目

持續集成:Continuous Integration,簡稱CI,意思是,在一個項目中,任何人對代碼庫的任何改動,都會觸發CI服務器自動對項目進行構建,自動運行測試,甚至自動部署到測試環境。這樣作的好處就是,隨時發現問題,隨時修復。由於修復問題的成本隨着時間的推移而增加,越早發現,修復成本越低。當你想要更新你的項目,只要動手提交代碼到你的代碼倉庫,剩餘的更新部署操做就只管交由CI服務器來完成就好,此次使用的CI工具是JenKins。java

Jenkins

  • 搭建Jenkins持續集成服務器能夠分爲兩大步驟,一是在服務器安裝好所需的軟件,二是配置咱們的持續集成項目 linux

    Jenkins拉取代碼編譯部署示意圖

  • 安裝所需的各類軟件

    • 安裝啓動 Jenkins

      執行命令 rpm -ivh xxx.rpm  安裝Jenkins
      
      //啓動JenKins
      /etc/init.d/jenkins start 
      
      瀏覽器輸入 http://xxx服務器地址:8080/
      
      //默認端口號是8080
      複製代碼

      JenKins啓動1
      JenKins啓動

    • JenKins默認端口號是8080,這與Tomcat默認端口號衝突,全部咱們能夠把Jenkins的端口號改爲咱們本身定義的端口號 9090git

      • 修改端口號的文件爲 /etc/sysconfig/jenkins,字段爲JENKINS_PORTgithub

        執行命令進行修改,若是碰到沒法啓動Jnekins, 沒法啓動(如遇此Starting Jenkins bash: /usr/bin/java: No such file or directory錯誤 )修改 /etc/init.d/jenkins 加入 /opt/jdk1.8.0_181/bin/java緣由
        是Java的環境變量沒有找到,通常使用centos服務默認安裝openjdk,若是本身卸載openJdk並從新安裝sun的JDK,則也須要在該文件中加入路徑,如圖所示
        
        vim /etc/sysconfig/jenkins 
        
        //添加Java地址
        
        vim /etc/init.d/jenkins
        
        複製代碼

        修改Jenkins端口
        添加Java地址

    • 修改端口沒法啓動的狀況,有多是服務器防火牆沒有添加端口的監聽,致使沒法訪問web

      vim /etc/sysconfig/iptables
      
      查看是否監聽端口(若是配置了本身定義的端口,須要先訪問該端口一次才能看到監聽)
      
      netstat -ntlp
      
      //重啓防火牆配置(不重啓端口仍是沒法生效)
      service iptables restart
      複製代碼

      添加新監聽的端口

    • 關閉Jenkinsspring

      • 只須要在訪問jenkins服務器的網址url地址後加上exit。例如我jenkins的地址http://localhost:8080/,那麼我只須要在瀏覽器地址欄上輸入http://xxx:9090/exit 網址就能關閉jenkins服務.
    • 重啓Jenkiesapache

      //xxx:8080 是搭建Jenkins服務器地址
      http://xxx:8080/restart
      
      複製代碼
    • 從新加載配置信息vim

    http://localhost:8080/reload
    複製代碼
    • 安裝jdk

    查看Java相關的包信息: 
     rpm -qa|grep java (或rpm -qa|grep jdk,rpm安裝後,包名裏沒有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

      • 官網下載 Tomcat8.5centos

      • 直接解壓到服務器(注意這裏指的服務器是項目部署的服務器,應該是和部署JenKins的服務器不一樣)api

      • 強制關閉 tomcat 命令

        //強制關閉
        ps -ef|grep tomcat
        
        //殺掉沒法關閉進程
        kill -9 XXXX
        
        複製代碼
    • 安裝 git (安裝在部署JenKins服務器上)

      安裝依賴
      yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
      
      yum install  gcc perl-ExtUtils-MakeMaker
      
      若是已經安裝了git,可是版本太老,能夠先卸載
      yum remove git 
      
      下載git包解壓
      tar -vxf git-2.15.1.tar.gz -C /opt
      
      進入git 目錄
      cd /opt/git-2.18.0/
      
      執行如下命令
      
      make prefix=/usr/local/git all
      
      make prefix=/usr/local/git install
      
      echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile  //配置環境變量
      
      source /etc/profile //跟新配置文件
      
      git --version 查看git版本
      
      複製代碼

      安裝git版本

      • 安裝 maven(安裝在部署JenKins服務器上)

        • 後臺項目爲spring-boot搭建,須要安裝maven
        • 下載 maven 3.5.4
      執行如下命令
      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這個文件
        source /etc/profile 
      複製代碼

      maven安裝成功

      • GitLab服務器配置

        • 因爲公司已經搭建好Gitlab服務器,因此我也沒有配置過Gitlab,不過Gitlab配置網上已經有不少資料,能夠自行百度。
    • Jenkins配置新建項目配置

      • Jenkins配置

        • 第一次進入Jnekins,首先根據提示找到安裝服務器的密碼

        • 若是服務器能夠聯網,則選擇他推薦的插件直接安裝,若是服務器沒法鏈接外網,只是在公司內網環境,則能夠離線下載插件再上傳到咱們服務器的Jenkin中,離線插件下載地址,這種方式須要耐心,由於須要安裝的插件可不止一兩個,若是你的服務器不能上網,我這有一份下載好的插件,能夠自行去下載(下載地址

        • 在Jenkins系統管理模塊的系統配置中配置咱們的Gitlab,須要登陸到Gitlab中獲取APIToken

          系統配置GitLab
          獲取API Token
          GitLab API Token配置

        • 生成ssh key(在部署Jenkins服務器上生成)

          • 配置SSH KEY ,用於後續項目能夠經過Jenkins部署到應用服務器

            輸入命令,一路回車
            ssh-keygen -t rsa 
            
            如今你的私鑰被放在了~/.ssh/id_rsa 這個文件裏,而公鑰被放在了 ~/.ssh/id_rsa.pub 這個文件裏
            
            能夠將私鑰配置到JneKins的系統設置中,配置框選項是須要Jenkins安裝SSH插件的,以下圖所示
            
            公鑰則配置到各個應用服務器的這個目錄下/root/.ssh/authorized_keys,沒有authorized_keys則建立這個文件,以下圖所示
            
            最後測試應用服務器是否都能成功鏈接,以下圖所示
            
             
            複製代碼

            ssh私鑰配置
            公鑰複製到應用服務器authorized_keys
            測試配置公鑰的應用服務器是否鏈接成功

          • 接下來仍是系統管理模塊中的全局工具配置 Jenkins的 JDK、git和maven。前面咱們已經把這些工具都給安裝了,如今配置到Jenkins中,以下圖所示

            配置Jenkins jdk git
            配置Jenkins maven

      • 新建項目配置

        • 新建一個maven項目(沒有maven項目選項則須要下載對應插件)

          新建maven項目

        • 首先配置源碼管理,如圖

          新建項目源碼管理配置

        • 配置項目構建觸發器

          配置項目構建觸發器

        • 配置maven項目編譯

          配置maven項目編譯

        • 項目構建成功後部署應用服務器的配置

          項目構建成功後部署應用服務器的配置

        • Tomcat重啓腳本(應當放在與Tomcat目錄同路徑下)

          #! /bin/sh
          echo '####################開始自動部署####################'
          export JAVA_HOME=/usr/local/jdk1.8.0_181
          path=`pwd` #當前路徑
          tomcatPath=/data/XXXX/tomcat_gxxmt_8080 #指定tomcat文件目錄名稱
          cd ../$tomcatPath/bin #進入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服務
          fi
          cd ../webapps #進入tomcat的webapps目錄
          rm -rf XXXX-api #刪除之前部署的項目
          echo '####################刪除完成####################'
          cd ../bin
          ./startup.sh #啓動tomcat服務
          echo '####################部署結束####################'
          複製代碼
        • 項目構建成功併發布到了對應服務器執行對應腳本,這裏就能夠看到JenKins的靈活性,能夠配置多臺發佈的應用服務器的多個Tomcat,靈活自動部署應用服務器配置

        • 項目構建編譯部署成功

          項目構建編譯部署成功

  • 集成部署遇到的問題

    • ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000 ms](執行腳本沒有正常退出,致使部署超時)

      錯誤1

    • 解決:腳本執行加入忽略輸入(nohup ....)

      nohup sh /data/gxxmt-api/restart.sh
      //當咱們使用nohup命令的的時候,日誌會被打印到nohup.out文件中去。
      //若是咱們不作任何處理,會隨着每次的從新啓動,nohup.out會愈來愈大
      //。因此我在我執行的腳本中添加了
      cp /dev/null nohup.out
      複製代碼

      在jenkins項目配置SSH Publishers勾選了Exec in pty,表示執行完腳本當即退出

      錯誤1解決勾選Exec in pty

    • jenkins主目錄遷移,jenkins默認主目錄通常都是安裝在系統盤,運行一段時間後項目部署的歷史版本,日誌文件,工做控件都會佔用大量的系統空間,這樣就會引起系統盤磁盤空間不足,首先咱們能夠修改jenkins主目錄

      //更改主目錄
      vim /etc/sysconfig/jenkins
      JENKINS_HOME="/data/jenkins"
      
      複製 /var/lib/jenkins/ 目錄到 /data目錄下
      
      修改目錄用戶權限
      
      chown -R jenkins:jenkins /data/jenkins
      
      重啓 /etc/sysconfig/jenkins restart
      複製代碼

      主目錄修改爲功

      其次咱們還能夠在項目配置中設置丟棄歷史構建

      設置丟棄歷史構建

    • Url is blocked: Requests to the local network are not allowed Gitlab 設置Jenkins的webhook地址沒法設置

      WebHook地址沒法設置

      升級新版Gitlab,要容許WebHook,須要在在Gitlab的Admin帳戶中,在settings標籤下面,找到OutBound Request,勾選上Allow requests to the local network from hooks and services ,保存更改便可解決問題(以下圖所示)

      Gitlab 容許WebHook

    • Gradle 編譯Android 項目 /lib64/libc.so.6: version `GLIBC_2.14’ not found,系統是CentOS 6.9,最高支持glibc的版本爲2.12,而研發程序要2.14版本,因此須要升級。

      glibc_2.14庫沒法找到

    //查看系統版本
    cat /etc/redhat-release
    //查看glibc庫版本
    strings /lib64/libc.so.6 |grep GLIBC_
    //下載glibc庫 並安裝
    #下載
    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
    #建立相關目錄
    mv glibc-ports-2.14 glibc-2.14/ports
    mkdir glibc-build-2.14
    cd glibc-build-2.14/ 
    
    #生成C編譯的環境
    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庫版本
    strings /lib64/libc.so.6 |grep GLIBC_
    複製代碼

最後

相關文章
相關標籤/搜索