美文网首页
Jenkins 自动化部署

Jenkins 自动化部署

作者: 孑一二 | 来源:发表于2019-08-28 10:48 被阅读0次

    内容提要

    Jenkins + Git + Maven + tomcat集成环境部署,实现自动构建、部署web应用
    

    环境依赖

    OS:Centos 6.5
    JDK:1.7.x
    Maven:3.1.x
    Git: 1.7.1,自建GitLab平台
    tomcat:7.x
    Host:
        master:194
        slave: 198
       (静态IP统一定义为内网24位子网掩码,配置双机互信,首次验证,需人为操作)
    

    步骤说明

    上述环境依赖宿主机上均需安装

    · JDK安装,安装后之后,请注意配置JAVA_HOME环境变量。

    ·Maven安装:从apache下载tar.gz压缩包,在合适的目录下解压即可。此后配置全局环境变量。

    ·tomcat安装:不做详细阐述

    ·Git:节省实验时间,直接执行“yum install git”

    若贵司GitLab是自建的内网平台,不要忘机在宿主机上添加hosts解析
    
    Jenkins 配置

    · Jenkins jar包下载

    · 将jenkins.war通过tomcat部署

    使用tomcat挂在启动jenkins服务
    这样我们可以非常简单的修改一些配置参数和维护
    启动jenkins服务的方式还可以通过jar方式启动
    

    · 修改context.xml文件,增加jenkins环境变量,由tomcat挂载。

    <Context>
          <Environment name="JENKINS_HOME" value="/home/jenkins_home/" type="java.lang.String"/>  
    </Context>
    

    · 修改tomcat-users.xml,配置jenkins的用户,此后用户可以在jenkins的页面上登录和授权操作

    拓展:
         关于jenkins的用户授权,官方提供了很多方式,比如LDAP、基于数据库等等。本实例基于tomcat user的方式,简单易用。
    
    <tomcat-users> 
          <role rolename="admin"/>  
          <user username="admin" password="admin" roles="admin"/>  
          <user username="developer" password="developer" roles="manager"/>  
    </tomcat-users>
    
    admin可以对系统各项配置进行修改,manager可以管理项目、部署等
    

    · 将jenkins.war放置在webapps目录下

    我希望jenkins作为ROOT项目加载
    所以删除原有的ROOT项目,并将jenkins.war重命名位ROOT.war
    这样在通过http访问jenkins时,不需要加ContextPath了
    

    · 启动jenkins tomcat,并通过web访问。

    ./startup.sh
    
    访问http://*.*.*.194:$PORT,然后使用admin用户登录
    

    · Master 配置

    1、插件管理
    在“可选插件”中,需要几个常用的插件
    主要涉及到:
         SSH
         Git
         GitLab
         Maven
         Deploy插件(我们可以在maven build之后,立即将war发布到web容器中,而不需要手动操作或者写shell脚本来copy文件)
    管理员可按需安装,安装完成之后,重启Jenkins
    
    2、系统配置
    其中重要的2个选项:JDK,Maven
    我们需要告知master它们安装在何处
    
    3、Build与发布
    Deploy插件是通过外部(http)方式“deploy/redeploy”
    所以需要在tomcat上进行用户授权
    编辑tomcat-users.xml,增加如下配置:
    <tomcat-users>  
        <role rolename="manager"/>  
        <role rolename="admin"/>  
        <user username="deployer" password="deployer" roles="standard,manager,admin,manager-script" />  
    </tomcat-users>
    增加一个“deployer”用户,我们可以通过tomcat manager机制来部署war
    
    master需要ssh访问slave机器(部署、启动,发送文件等)
    所以在开始之前,需要在“jenkins”-->“Credentials”-->“Add Credentials”添加一个SSH验证规则
    同时创建一个Global范围的SSH无密码登陆
    此外,我们还需要在GitLab中目标项目中增加“deploy key”
    
    在创建item时,还需要指定,这个item的job运行结果最终保存在哪个“节点”上,即最终发布的位置
    
    指定Git库的地址,并配置master与GitLab通讯的SSH验证机制
    
    当代码从Git下载之后,启动Maven build阶段
    在Maven build时,我们指定“Goals”,这个很重要,否则就没有意义了
    
    值得注意的是:
    在发布之前,需要先删除web应用的tomcat中原有的ROOT.war,才能触发tomcat undeploy操作。
    这或许是“Deploy plugin”的bug,如果ROOT.war已经存在,则无法再次deploy/redeploy
    

    · Slave 配置

    值得注意的一点是:
       jenkins的slave不需要像master一样部署在tomcat上。
       master将会通过ssh将slave.jar文件到slave节点上,并启动slave。
       通过导航:“系统管理”-->“节点管理”-->“新建节点”,来增加slave。
       此后需要部署在slave上的web应用,只需要在创建item时指定“Restrict where project can be run”为slave即可。
    

    Q&A

    Q:为什么两台机器所需要的环境依赖需要完全一致?
    A:因为slave接收master的job调度后,将会使用Git从GitLab上同步代码并使用Maven进行build,这个过程都是在salve的本地进行。
    Q:如果部署的时候报错了,那我有哪些思路可以进行排查?
    A:1)tomcat是否已经启动。
       2)tomcat-users.xml是否配置正确。
       3)tomcat的版本和“Deploy plugin”中container指定的是否一致。
       4)tomcat下是否已经有ROOT项目,如果有,请删除,然后重启tomcat,此后再使用jenkins发布
    

    相关文章

      网友评论

          本文标题:Jenkins 自动化部署

          本文链接:https://www.haomeiwen.com/subject/seauectx.html