CICDAndroid 知识JAVA

持续集成工具: Jenkins学习

2018-10-05  本文已影响1180人  不加糖的开水

持续集成工具: Jenkins学习

-- 部分内容收集自网络,如有侵权,请联系作者删除

一. 概念

  1. 持续部署


    1530005183252.png
    • 装修厨房
      • 全部装好之后发现灯不亮,电路有问题,冷热水装反了,管路有问题。这些问题要解决就必须把地砖、墙砖拆掉,一个环节有问题,其他环节跟着返工。
      • 解决方案:
        • 任何安装完成后及时进行测试,确保其可以正常工作。
    • 项目开发
      • 开发过程中,本地进行测试能够通过,但是部署到服务器上运行出现问题
      • 解决方案:
        • 仅仅单元测试还不够,各个模块都必须能够在服务器上运行
    • 关注点
      • 持续部署的关注点在于项目功能部署至服务器后可以运行,为下一步测试环节或最终用户正式使用做好准备
  2. 持续集成


    1530005162855.png
    • 装修厨房
      • 装修厨房时我们需要铺地砖,如果把所有地砖都切好再拿去铺就会发现:每一块地砖单独看都是好的,但是实际铺的时候,把所有地砖整合起来,发现和厨房 地面总体尺寸不匹配,边边角角的地砖需要重新切,时间和物料成本陡然升高。
      • 解决方案:
        • 切一块铺一块,根据需要的尺寸来切,尽早发现尺寸变化,避免返工。
    • 项目开发
      • 各个小组分别负责各个具体模块开发,本模块独立测试虽然能够通过,但是上线前夕将所有模块整合到一起集成测试却发现很多问题,想要解决就需要把很多代码返工重写而且仍然有可能有问题,但现在时间很可能不够了。
      • 解决方案:
        • 经常性、频繁的把所有模块集成在一起进行测试,有问题尽早发现,这就是持 续集成。
    • 关注点
      • 持续集成的关注点在于尽早发现项目整体运行问题,尽早解决。
  3. 持续交付


    1530005211213.png
    • 装修厨房
      • 全部装修好之后房屋主人来验收,各项功能都正常,但是水龙头的样式主人不 喜欢,灶台的位置主人不满意,要求返工。
      • 解决方案:
        • 房屋主人随时查看装修进度,施工团队及时调整。
    • 项目开发
      • 项目的各个升级版本之间间隔时间太长,对用户反馈感知迟钝,无法精确改善 用户体验,用户流失严重。
      • 解决方案:
        • 用小版本不断进行快速迭代,不断收集用户反馈信息,用最快的速度改进优化。
    • 关注点
      • 持续交付的关注点在于研发团队的最新代码能够尽快让最终用户体验到

二. 持续集成工具

1.1 持续集成工具

1.2 技术组合

三. 部署方式的对比

1530020348129.png

四. 环境搭建

4.1 JDK的安装

  1. 上传JDK安装包到服务器登录用户的home目录下
1530023524258.png
  1. 解压JDK到/usr/local/java

    1530023759049.png
    执行命令
    #查看本机上安装的java
    rpm -qa | grep java
        tzdata-java-2015g-1.el7.noarch
        javapackages-tools-3.4.1-11.el7.noarch
        java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
        java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
        python-javapackages-3.4.1-11.el7.noarch
    #卸载所有相关的java软件
    rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64
    rpm -e --nodeps java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
    #创建java目录
    mkdir /usr/local/java
    #解压jdk压缩包文件到java目录当中
    tar -zvxf jdk-8u161-linux-x64.tar.gz -C /usr/local/java
    
  2. 配置环境变量

    vim /etc/profile
    
        #set java environment
        JAVA_HOME=/usr/local/java/jdk1.8.0_161
        CLASSPATH=.:$JAVA_HOME/lib.tools.jar
        PATH=$JAVA_HOME/bin:$PATH
        export JAVA_HOME CLASSPATH PATH
    
    #重新加载配置文件:
    source /etc/profile
    
  3. 测试安装是否成功

    java -version
    
1530024218219.png

* 显示以上信息表示安装JDK成功

4.2 Tomcat的安装

  1. 上传tomcat的安装文件
1530024604426.png
  1. 创建tomcat的安装路径并解压

    #创建tomcat目录,由于一台机器上往后可能需要多个服务器,所以分开存放tomcat,避免冲突
    mkdir -p /usr/local/tomcat/jenkins
    #解压tomcat压缩包文件到/usr/local/tomcat/jenkins目录当中
    tar -zvxf apache-tomcat-8.0.51.tar.gz -C /usr/local/tomcat/jenkins
    
  2. 配置tomcat

    • 通过查看tomca的catalina.sh文件中我们可以看到,tomca建议我们对tomcat的个性化配置通过在bin目录下新建一个setenv.sh进行参数上的配置

      1530026334596.png
    vim setenv.sh
    #########setenv.sh文件信息###############
        #!/bin/sh
        CATALINA_HOME=/usr/local/tomcat/jenkins/apache-tomcat-8.0.51
        JAVA_HOME=/usr/local/java/jdk1.8.0_161
    ########################################
    chmod 744 setenv.sh
    
    • 配置/usr/local/tomcat/jenkins/apache-tomcat-8.0.51/conf目录下的server.xml配置文件

      • 一共修改以下三处的端口
      <Server port="1313" shutdown="SHUTDOWN">
          
       <Connector port="1314" protocol="HTTP/1.1"
                     connectionTimeout="20000"
                     redirectPort="8443" />
          
      <Connector port="1315" protocol="AJP/1.3" redirectPort="8443" />
      
  3. 设置防火墙

    #配置防火墙,开放1314的端口
    /sbin/iptables -I INPUT -p tcp --dport 1314 -j ACCEPT
    
  4. 启动tomcat

    #进入到
    cd /usr/local/tomcat/jenkins/apache-tomcat-8.0.51/bin
    #执行启动脚本
    ./startup.sh
    
    1530027265046.png
    • 访问地址成功表示安装完成

4.3 maven的安装

  1. 上传安装包到服务器

    1530030405670.png
  2. 创建安装目录并且解压到指定的目录下

    mkdir /usr/local/maven
    tar -zvxf apache-maven-3.5.4-bin.tar.gz -C /usr/local/maven/
    
  3. 配置环境变量

    vim /etc/profile
        MAVEN_HOME=/usr/local/maven/apache-maven-3.5.4
        PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
    source /etc/profile
    
  4. 测试安装结果

    mvn -v
    
    1530067631723.png

4.4 gradle的安装

  1. 上传安装包到服务端


    1530067656417.png
  2. 创建目录并且解压到指定的目录下

    mkdir /usr/local/gradle
    unzip gradle-3.5-bin.zip -d /usr/local/gradle/
    
  3. 配置环境变量

    vim /etc/profile
        GRADLE_HOME=/usr/local/gradle/gradle-3.5
        PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$GRADLE_HOME/bin:$PATH
    source /etc/profile
    
  4. 测试安装结果

    gradle -v
    
1530067903139.png

4.5 Jenkins的部署

  1. 下载Jenkins

    • jenkins的官网下载jenkins的安装包

      1530027702182.png
    1530027722669.png
  2. 上传到服务端

    • 将jenkins上传到tomcat的webapps目录下
    1530027828027.png
  1. 配置Jenkins目录

    • Jenkins默认的工作目录位于用户目录下的.jenkins中,在刚刚的启动脚本上配置jenkins的目录,如果需要修改自己指定的工作目录,有以下三种方式

      • 设置JENKINS_HOME环境参数

        #编辑profile文件
        vi /etc/profile
        #在最后加入
        export JENKINS_HOME=xxxx
        #保存,退出后执行.让配置生效
        source  /etc/profile
        
    • 使用Web容器的管理工具设置JENKINS_HOME环境参数.

      #打开tomcat的bin目录,编辑catalina.sh文件。
      # OS specific support.  $var _must_ be set to either true or false.上面添加
      export JENKINS_HOME=xxx
      
    • 更改Jenkins.war(或者在展开的Web容器)内的web.xml配置文件

      <!-- if specified, this value is used as the Hudson home directory -->
      <env-entry>
          <env-entry-name>HUDSON_HOME</env-entry-name>
          <env-entry-type>java.lang.String</env-entry-type>
          <env-entry-value></env-entry-value>
      </env-entry>
      <!-- 在<env-entry-value>节点中填入路径,windows系统建议使用/分隔路径 -->
      
  2. Jenkins初始化

    • 在配置结束后,重启tomcat服务器,查看tomcat的运行日志

      tail -fn 1000 /usr/local/tomcat/jenkins/apache-tomcat-8.0.51/logs/catalina.out
      
      1530028444311.png
    • 访问地址

      http://服务器的ip:1314/jenkins/
      
      1530028998395.png
      • 其中为了确保安全,我们需要到jenkins地址提示的路径下获取密钥填写到网页中

        cat /usr/local/tomcat/jenkins/JENKINS_HOME/secrets/initialAdminPassword
        
      1530029073523.png
      • 将获取到的密码填写入输入框中点击继续
    • 安装插件

    1530029252641.png
    * 在这里,如果没有特殊的需求的话,直接选择安装推荐插件即可,如果有特殊的需要,可以自己自定义选择插件来安装
    * 静等插件安装结束
    1530029548682.png
    * 打×的插件是由于网络传输导致的安装失败,后面再重新安装即可。这个步骤中如果选择了安装插件则 Linux 必须能够联网
    • 创建登录账户,默认为admin

      1530029762950.png
    • 到此,就可以开始使用Jenkins了

      1530029778300.png

五 Jenkins系统初始化配置

六. Jenkins+svn+maven的项目构建

6.1 创建工程

  1. 点击新建任务

    1530069586404.png
  1. 填写任务的相关信息
1530069757985.png
  1. 通用配置

    1530070153500.png
1530070492304.png
  1. 源码管理

    1530070690662.png
1530070821297.png 1530070890052.png 1530071357137.png
Check-out Strategy 第一次build 第n次build(除第一次)
Use 'svn update' as much as possible 将workspace下的所有文件清空,然后从svn上check out一份完整的项目到workspace下 update前不会revert
Always check out a fresh copy 将workspace下的所有文件清空,然后从svn上check out一份完整的项目到workspace下 删除workspace下的所有文件,然后重新check out一份完整的项目到workspace下。
Emulate clean checkout by first deleting unversioned/ignored files, then 'svn update' 将workspace下的所有文件清空,然后从svn上check out一份完整的项目到workspace下 update前先删除unversioned/ignored文件
Use 'svn update' as much as possible, with 'svn revert' before update 将workspace下的所有文件清空,然后从svn上check out一份完整的项目到workspace下 update前先revert
  1. 构建触发器

    1530086317897.png
    • 主要用于配置构建的触发条件
      • 触发远程构建 (例如,使用脚本)

        • 可以通过使用以下URL远程触发构建,远程触发的基本原理是外部给 Jenkins 项目特定的 URL 地址发送请求, 但必须以请求参数的形式携带一个特定值,这个特定值就是这里的“身份验证令牌

          • JENKINS_URL/job/testPorject/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME

          • 可在后面叠加&cause=Cause+Text提供构建参数的原因等信息

            1530087936045.png
      • 其他工程构建后触发 :

        • 在其他项目触发的时候触发,里面有分为三种情况,也就是其他项目构建成功、失败、或者不稳定的时候触发项目
      • 轮询 SCM

        • 定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作
          • */5 * * * * (每5分钟检查一次源码变化)
      • 定时构建

[图片上传中...(1530086939631.png-4c2281-1538705797773-0)]
* 周期进行项目构建(它不关心源码是否发生变化),例如:

            *   在 Schedule 中填写 0 * * * *

                *   第一个参数代表的是分钟 minute,取值 0~59
                *   第二个参数代表的是小时 hour,取值 0~23
                *   第三个参数代表的是天 day,取值 1~31
                *   第四个参数代表的是月 month,取值 1~12
                *   最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天

                所以 0 * * * * 表示的就是每个小时的第 0 分钟执行构建
  1. 构建环境

    1530086939631.png
  1. 构建

    1530087083665.png
    • pre steps

      • 用于构建前的操作,其中可以选择多个先前操作,一般在这里用于执行关闭中间件,以及对当前项目进行库的备份与项目备份等操作
      1530087132088.png
    • Build

      • 在这个步骤中主要是用于项目的构建,通过执行maven命令将项目构建出来
    • post steps

      • 这个步骤与pre steps可选方式一样,都是通过一系列的配置,完成项目构建之后的工作,比如将构建完成的项目部署到服务器中间件,启动项目等操作
      • 服务端相关的自动部署脚本
      #!/bin/bash
      TOMCAT_HOME=/usr/local/tomcat/test/apache-tomcat-8.0.51
      WAR_NAME=employeemanager-0.0.1-SNAPSHOT
      JENKINS_HOME=/usr/local/tomcat/jenkins/JENKINS_HOME/workspace/testPorject/target
      TARGET_WAR_NAME=employeemanager
      BACK_HOME=/back_war
      time=`date +%Y%m%d%s`
      
      #################公用方法#####################
      function kill_tomcat(){
       if [ `ps auxwwww|grep $1|grep -v grep|wc -l` -gt 0 ]  
       then  
           for pid in `ps auxwww|grep $1|grep -v grep|tr -s ' '|cut -d ' ' -f2`  
           do  
               kill -9 $pid 2>&1 > /dev/null  
           done  
           echo "终止tomcat进程:$pid"
       else
           echo "tomcat无进程启动,不需要终止"
       fi 
      }
      function clean(){
       cd $1/webapps
       rm -rf $2
      }
      function back(){
       if [ -d $2 ];then
           mkdir $2
       fi
       [ -f ./$1.war ] && mv $1.war $2/$1.war_$time
      }
      function deploy_tomcat(){
       cd $1
       [ -f ./$2.war ] && cp ./$2.war $3/webapps/$4.war
      }
      function start_tomcat(){
       cd $1/bin
       sudo ./startup.sh
      }
      #################公用方法#####################
      
      echo "1.终止tomcat进程"
      kill_tomcat $TOMCAT_HOME
      echo "2.清理webapps目录"
      clean $TOMCAT_HOME $TARGET_WAR_NAME
      echo "2.备份webapps目录"
      back $TARGET_WAR_NAME $BACK_HOME
      echo "3.部署项目到webapps下"
      deploy_tomcat $JENKINS_HOME $WAR_NAME $TOMCAT_HOME $TARGET_WAR_NAME
      echo "3.启动tomcat"
      start_tomcat $TOMCAT_HOME
      
  1. 构建后的操作
1530087524750.png

6.2 手动构建

上一篇下一篇

猜你喜欢

热点阅读