Jenkins自动化部署调研文档
一 ,文档概述根据目前公司部署的要求,本文档主要介绍Jenkins通过获得部署war包,实现java项目的自动化部署。
需要告知的一点是:
-
Jenkins常用的情况是,通过集成maven/ant,svn/cvs实现项目的自动下载,自动编译,自动测试,自动打包,自动部署。
-
Jenkins也能能通过ssh执行shell的方式,对其他项目(如c++项目)进行自动化部署。
本次调研介绍的是war包通过Jenkins的ssh插件对java项目进行自动部署。
二 ,本次测试步骤简介
- 使用svn进行源码war包管理
test和test1分别为svn中两个文件夹,放置了名称都为hello.war,代表一个javaee项目的两个版本。
其中test中的hello.war前台jsp页面输出 Hello,world!
Test1中的hello.war前台jsp页面输出 Hello,CCC!
2. Jenkins安装简述
Jenkins使用java开发,所以从官网上下载相应jenkins.war,放置在tomcat的webapps下面,运行
tomcat后访问。访问例子:http://localhost:8080/Jenkins/
3. 安装Jenkins ssh 插件系统管理→管理插件→可选插件→Artifact Uploaders→Publish Over SSH
4. 对Jenkins进行相关的配置(测试使用,没有设置登陆验证相关的内容)
配置jdk,在系统管理-系统配置中,如下图:
配置发送邮件的地址,这里测试,写了自己的,实际中会是一个系统账号
配置smtp邮件配置,用以发送邮件使用
配置Jenkins ssh功能
其中,ssh到ip地址为192.168.100.226,root用户。并把ssh的文件放到/jenkins/data目录下
5. 编写shell服务器端执行脚本
因为测试使用,shell脚本没有经过优化,简单的实现了功能,实现的功能为:
杀掉tomcat的进程,把线上tomcat中项目的war包和文件包删除掉,放入新的war包,并且启动
tomcat.
6. 新建名称为test的job
Jenkins能创建不同类型的构建方式,主要取决于,项目的构建需求,如下图,本次测试的目的是部署
war包,只创建了自由风格的构建方式
7. 配置刚刚创建的自由风格job
配置源码获取方式,这里获取的是svn上的war包
构建方式选择ssh方式,如下图配置
这个地方配置,选择在系统配置中配置的server name,选择从jenkins的workspace为根目录的文件路径
remove profile,要去掉的路径前缀
Exec command:执行在ssh端的sh脚本文件的路径
设置构建出现问题时的接收邮箱地址
8. 创建另一个job,在新建中复制test的job成一个test1的job,这时设置test1的svn地址为
svn://192.168.100.226/test1(test的svn地址为192.168.100.226/test)
这样就创建了一个新的名称为test1的job。
Test和test1两个job的作用分别为:
Test这个job,构建后,tomcat中运行的hello项目页面为Hello,World!
Test1这个job,构建后,tomcat中运行的hello项目页面为Hellp,CCC!
这样就好比一个项目的两个版本,比如当前运行的项目为test1 job构建的hello项目,有一个新的版
本的test1种的hello项目的新war包需要部署,通过test1这个job对新的svn地址为
svn://192.168.100.226/test1种的hello项目进行自动部署,toncat中的项目变成了新的test1的
hello项目
实验如预期一样,在进行各自的自动部署后,出现了相对应的页面输出
9. 怎么样进行部署?
在进行了上述的所有配置之后,以后的项目进行部署时,只需要复制一个job,改变下svn的地址成新版
的war包地址,点击创建,自动完成war包传递,tomcat的关闭和重启,部署结果返回等。如下图:
构建时操作
当构建成功时,前面的小球为蓝色,当部署出现问题时,前面的小球变成红色。
10. Jenkins记录了每次构建的信息,服务器端shell执行中的bug,构建的步骤,同时在构建出现不稳
定的时候,对相关人员进行邮件的通知
并且在每次构建中可以读取控制台的输出,源码文件的变更等信息。
11. Jenkins的回滚和其他
暂时还没有发现jenkins的自动回滚功能(不代表jenkins没有,因为jenkins可以对每次构建的代码进
行tag,这很可能是用来回滚使用的,这还需要测试),因为jenkins是基于svn的最新版本进行构建。
目前考虑可以每个项目有两个job,一个job是前一次构建的job,一个job是新的job,如果新的job出
现的很重要的问题,短期内无法恢复,直接执行上一次执行的job,对项目进行回滚。
Jenkins能对代码自动的完成测试,并且集成很多插件,完成性能分析等。
12. 个人感觉,jenkins啥也不做,只是做了配置管理,所有的工作都由其他的软件或者自己的插件
完成。