自动部署过程:jenkins从svn拉取代码+maven去打war包+ansible去部署+重启tomcat。

前情回顾:在前面的文章我的环境已经有Jenkins+ansible ,在加上我们公司有自己的SVN,我只要在本地安装个Tomcat就ok啦。

     其实也有Tomcat的,但我喜欢自己玩自己的,谁让我是菜鸟了呢,这其中的坑真的不少,希望能帮到初学者。

一. 什么是Maven(简单说一种打包的工具)?

   Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

你也许会问为什么是Maven,不是Ant。我们公司的java项目用的是pom文件。如果你的是built文件,那就能用ANT,为什么用POM,不是我这个小运维人员说的算的,你需要去找开发老大。

  1)官网下载Maven(jenkins的插件里面有maven,我觉得自己安装的可控性更高一些)

   root@debian :~# wget   http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz

  2)解压下载的包

    root@debian :~# tar -xf apache-maven-3.5.0-bin.tar.gz  -C /usr/local/  

   3)简单验证一下

    root@debian :~#  mvn --version
    Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
    Maven home: /usr/local/apache-maven-3.5.0
    Java version: 1.7.0_71, vendor: Oracle Corporation
    Java home: /usr/local/jdk1.7.0_71/jre
    Default locale: zh_CN, platform encoding: UTF-8
    OS name: "linux", version: "3.16.0-4-amd64", arch: "amd64", family: "unix"

   4)接下来在jenkins里面配置一些环境(登录你的jenkins界面)

    

    标记的非常明显,点击系统管理。

    

    接下来点击Global Tool Configuration ,主要配置有下面几项

    

    提示: (1)这里的最好指一下setting文件,这个文件需要更改的,比如本地仓库放在那,打包过程用没用到nexus(私服),如果你不知道怎么改,问你们研发部门,他们都是行家。

          (2)在前面的文章里面我说过为什么jdk换成了7(其实是在setting文件里面定义的),为了和这个自动化上线的项目保持环境的一致行,其实8也兼容7,具体行不行我没有试验过呢。

      (3)如果你已经指定了本地的插件路径,就不要勾选自动安装那个选项。

    

    如果你的路径和我的不一样,需要修改成相对应的路径就ok啦。

二.Jenkins的插件下载

  1)步骤和上面几乎差不多,点插件管理

    

  2)这里我就列出几个,你可以根据提示缺少那个插件你就安装那个

   

    因为我要用到playbook,所以要安装ansible插件。

     

    maven的本地仓库,不懂的话多去问问研发,少走点弯路。

    

   这个是svn的插件,因为总有一个版本控制,你是git,就去下载git的插件。

   

    这个插件有必要说一下,一开始我打算用这种tomcat热部署,后来查了查,这种部署方式有天然的缺陷,部署的次数多了以后会造成java的内存泄漏,再加上我们上线的所有环境不是都打在war包里面的,后来就放弃了,作为运维来说,个人觉得多一事不如少一事。

三.项目的配置过程(只说对我有用的部分)

  1)在你的jenkins登录页面,点击新建

    

  2)构建一个maven项目(名字你随便起,建议最好有一点标识性)

    

  3)最后点击OK,来到下面的界面

    

    描述信息你可以随便写,甚至空着也可以的。

  4)SVN这里需要你有一个帐号,简单说就是能拉取代码

    

  5)构建触发器

    

    触发器的作用应该是自动化构建,它也可以像定时任务那样,每隔多长时间自动构建一次

  6)剩下直接上图

    

    说明:如果你不明白的话,多去查一查,具体什么意思,我也只是知道怎么用。

四.Tomcat的安装

  1)官方下载Tomcat7(最新的版本应该是9,这里我下载的是7)

  root@debian1:~# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.77/bin/apache-tomcat-7.0.77.tar.gz

 说明: 如果你用debian自带的源安装tomcat,也可以。但你的目录结构和你解压二进制包的目录结构是不一样的,这是坑。用过debian的应该都知道,它把配置文件分的太细啦,当然信不信你说的算。

  2)解压Tomcat并启动Tomcat

  root@debian1:~# tar -xf  apache-tomcat-7.0.77.tar.gz  -C /usr/local/

  root@debian1:~# /usr/local/apache-tomcat-7.0.77/bin/startup.sh

    提示:因为我的jenkins占用着8080端口,在本机想启动Tomcat的话需要更改一下配置文件server.xml

  3)简单验证一下

  root@debian1:~# netstat -antlp |grep 8082
  tcp6       0      0 :::8082                 :::*                    LISTEN      11981/java

五.Playbook的书写,代码奉上(水平较次,您将就着看)

  1. - hosts: local
  2. tasks:
  3. - name: "create the tmp directory!"
  4. command: mkdir /usr/local/tmp
  5. - name: "delivery the war to the remote_host!"
  6. copy:
  7. src=/var/lib/jenkins/workspace/maven_test/target/oa.war
  8. dest=/usr/local/tmp/
  9. - name: "unzip the war!"
  10. command: unzip -qo /usr/local/tmp/oa.war -d /usr/local/apache-tomcat-7.0.77/webapps/ROOT/
  11. - name: "delete the tmp"
  12. command: rm -rf /usr/local/tmp
  13. - name: "stop the tomcat"
  14. shell: "ps -ef |grep tomcat |grep /usr/local/apache-tomcat-7.0.77 | grep -v grep |awk ‘{print $2}‘ |xargs kill -9"
  15. - name: "start the tomcat"
  16. shell: chdir=/usr/local/apache-tomcat-7.0.77/bin nohup ./catalina.sh start &

  说明: (1)在上面的文件里面用startup.sh 启动tomcat起不来,用catalina.sh start &   就可以启动起来,具体什么原因我也不是很清楚,因为我觉得两种方式是一样的。

     (2)注意一下yaml(yml)文件的书写合适,还有就是jenkins自动构建的war包在workspace下有一个和你项目名称一样的文件夹,但war包的名字是由POM文件里面定义的,与jenkins是无关的。

    (3)在这里我是本地用ansible的copy模块,当然你也可以远程copy,但注意hosts文件定义该主机,免密钥登录等等,还有就是权限问题,需要特别注意,jenkins这个工具是一直在用jenkins这个普通用户在运行。

六.构建Project

  1)构建你的项目

    

  2)可以查看过程的输出

    

  3)看到success 就大功告成啦(需要烧香拜佛的哟)

    

    其实还有很多功能,例如构建成功发邮件通知,sonar对java代码进行静态检查等等我只记录了一些我用到的。

  建议: (1) 如果没有成功,看相应的报错,有问题去解决问题,这么个流程我研究了两周,我老大说我进度慢,没办法,都是自己研究,我把过程记录就是希望和我一样的少踩点坑,欢迎来喷。

      (2)有句名言叫外事不懂问GOOGLE,内事不懂问度娘。

    

Jenkins + Maven + Ansible + Tomcat 实现JAVA代码自动部署的更多相关文章

  1. Java代码自动部署

    注:本文来源于<it小熊> [ ①Java代码自动部署-总结简介] 代码部署是每一个软件开发项目组都会有的一个流程,也是从开发环节到发布功能必不可少的环节.对于Java开发者来说,Java ...

  2. Jenkins去GitLab拉取Java代码自动打包

    jenkins的部署 一.部署git 1)先检查系统是否已经自带了git,如果有,就卸载 $ rpm -qa | grep git && rpm -e git --nodeps 2)开 ...

  3. Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

    一.环境需求 本帖针对的是Linux环境,Windows或其他系统也可借鉴.具体只讲述Jenkins配置以及整个流程的实现. 1.JDK(或JRE)及Java环境变量配置,我用的是JDK1.8.0_1 ...

  4. Jenkins+Maven+Github+Springboot实现可持续自动部署(非常详细)

    目前公司开发的项目已经部署到服务器上,部署项目的测试环境和生产环境,加上每个项目n个服务,于是我就 , 骚就是骚,但是就是太累了,于是花点时间研究了一下Jenkins. Jenkins的作用和它的lo ...

  5. 开发环境,eclipse编辑器java代码自动提示

    Eclipse+ADT+Android SDK 搭建安卓开发环境 eclipse编辑器java代码自动提示 window-->Preferences-->JAva-->Content ...

  6. 做了一个简易的git 代码自动部署脚本

    做了一个简易的git 代码自动部署脚本 http://my.oschina.net/caomenglong/blog/472665 发表于2个月前(2015-06-30 21:08)   阅读(200 ...

  7. jenkins+maven+git+tomcat+salt自动构建

    jenkins 安装步骤 环境: centos7,jdk1.8.0,jenkins2.165,maven3.5.2 一. 安装配置java环境   JDK1.8下载地址:http://www.orac ...

  8. [ jenkins ] git+jenkins+maven + ansible 部署java程序

    1. 工具介绍 git:版本控制,一般都是托管到代码仓库的.如 github.coding.gitlab (本文以 coding 为例) jenkins:持续集成工具之一,也是最常用的工具,主要工作就 ...

  9. Jenkins自动构建gitlab项目(jenkins+maven+giltlab+tomcat)

    环境准备: System:CentOS 7.3 (最小化安装) JDK: 8u161 (1.8_161) tomcat: 8.5.29 Jenkins: Jenkins 2.107.1 Gitlab: ...

随机推荐

  1. angular element()

    使用angular.element()获取一个dom的方法. 1.可以使用jquery的选择器 2.可以使用javascript的原生的的查找元素的方法 下面是angular.element()提供的 ...

  2. 当git上文件大小写重命名的修改时(git大小写敏感/默认不敏感),如何提交

    git默认是大小写不敏感!!! 加了感叹号是什么意思呢,意思就是这本身就是一个坑,本人使用的IDE是idea(网上说Eclipse可以避开问题),这个IDE本身就集成了git,但是如果要在termin ...

  3. jquery-scrollstop

    $(window) .on("scrollstart", function() { // Paint the world yellow when scrolling starts. ...

  4. 关于 Python generator(生成器)的类比

    Python 的生成器运用仿佛是最完美的 xing爱,生成器本身和循环代表男女,结束代表同时达到高潮,不是很精准,但很有趣啊!哈哈哈,一下记住了

  5. dubbo的简单实现

    一 是什么 一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多,dubbo使前后端分离,完成负载均衡. dubbo架构图 节点角色说明: Provider: 暴露服务的服务提供方 ...

  6. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  7. 【Egret】在WebStorm里使用Egret Engine 的注意点

    1.开启代码提示 2.修改egret code后,自动编译新egret code 按照下图进行设置: ①打开"File-settings" ② ③ (PS:webstorm打开目录 ...

  8. 老李分享:Eclipse中开发性能测试loadrunner脚本

    老李分享:Eclipse中开发性能测试loadrunner脚本 前篇我分享了如何用loadrunner搭建javauser的性能测试脚本环境,本次我来告诉大家如何在eclipse开发loadrunne ...

  9. java调试技能之dubbo调试 ---telnet

    dubbo作为一个远程调用框架,虽与同类型的框架,不知道谁优谁劣,但是就公司层面使用来说,还是很棒的.这里简单的写一下怎么使用和调试技巧,就算是作个使用总结吧,供快速使用和问题解决! dubbo是基于 ...

  10. Android安全开发之启动私有组件漏洞浅谈

    0x00 私有组件浅谈 android应用中,如果某个组件对外导出,那么这个组件就是一个攻击面.很有可能就存在很多问题,因为攻击者可以以各种方式对该组件进行测试攻击.但是开发者不一定所有的安全问题都能 ...