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_
    复制代码

最后

相关文章
相关标签/搜索