实施背景

    我们是做产品研发的,产品研发的迭代周期短,发布频繁。大多数公司都采用了持续集成的方式。然而创业型公司起步阶段根本就没有时间去做这些事情。只有后面再去补这些坑,我现在就是补坑的。

    项目组以前代码管理比较混乱,几个环境都是开发在部署,而且每次都是手动增量部署,费时费力还容易出问题,要么没部署完,要么部署错误,要么少部署了一台机器或少重启了一个服务,效率相当低下。为了实现我们公司的自动化部署我先规范了公司的代码管理,梳理了各个项目的主干和分支,制定了一些约定,分离出各种环境下代码的存储方式和提交方式。

    基础工作完成以后呢我先要搭建自动化构建和发布的环境,然后在测试环境试运行(公司测试比较初级,只会功能测试和业务测试基本不懂技术,所有发布的事情都得开发来干)。

    1、安装配置jekins,maven,jdk,svn。

    安装和配置参考jenkins+tomcat+maven+svn实现自动化构建部署,这篇是windows的安装方式,linux安装流程差不多,请自行解决(我也是百度解决的,安装jekins的时候可能大家会遇到和windows启动后界面不一样,没有启动页直接进入到登陆页让你登陆了,此时的默认用户名是admin,密码是从jenkins的文件里面查找的,和windows目录结构类似)

   在jenkins+tomcat+maven+svn实现自动化构建部署中我是直接采用maven编译以后发布到tomcat容器,需要对tomcat进行配置。编译后的war包是借助tomcat提供的文件上传服务来上传war包的,上传后放到了webapp下,tomcat自动重新加载应用,多次发布后可能会引起tomcat内存溢出(如果你的tomcat内存是默认配置没有优化很容易溢出)。那种方式就不适合现在的生产环境,测试环境能勉强满足。因为生产环境是只有一份发布文件,多个tomcat指向同一个文件目录。

    所以我们必须借助其他插件将编译后的文件发布到服务器上,大家用得最多的是publish over ssh。所以我们也用这个。

    2、在jekins中安装publish over ssh插件(参考jenkins+tomcat+maven+svn实现自动化构建部署)中安装插件方式

    3、配置ssh

    进入系统管理--系统设置找到Publish over SSH

152454_zxil_1791512.png

参数说明:

  • 公共配置 
    Passphrase:密码(key的密码。如果有设置--下方username对应的密码) 
    Path to key:key文件(私钥)的路径 
    Key:将私钥复制到这个框中 
    Disable exec:禁止运行命令 
    注意:一般来说,我们会采用同每一个SSH Server单独配置的方式,因此公共配置部分一般不进行设置

  • 私有配置 
    SSH Server Name:标识的名字,可随便取 
    HostName:需要连接ssh的主机名或IP地址 
    Username:SSH连接所使用的用户名 
    Remote Directory:用SSH连接后的远程根目录,这个目录是必须存在的,Jenkins不会自动创建目录。Jenkins会将文件远程复制到该目录。(注意:SSH连接的用户需要有权限才可以创建、删除、移动文件及文件夹) 
    Use password authentication, or use a different key:使用密码认证或密钥认证

  • 私有配置的高级 
    Port:SSH连接端口号(默认为22) 
    Timeout (ms):连接超时的时间,单位以毫秒计算 
    Disable exec:禁止exec执行命令 
    Test Configuration:测试配置是否成功 

    4、在项目配置中--构建后操作中配置具体的发布内容和执行命令

        153259_4Xo3_1791512.png

    参数说明:

SSH Server Name:选择系统设置中已添加的SSH服务器 
Transfer Set Source files:需要上传到应用服务器的文件(注意:相对于工作空间的路径,可填写多个,默认用逗号分隔) 
Remove prefix:去掉前缀(只能指定Transfer Set Source files中的目录) 
Remote directory:可选的目标文件夹。如果文件夹不存在,会创建文件夹。 
Exec command:在远程服务器将要执行的命令。在远程SSH传输执行后,才执行这里的脚本命令 
高级选项: 
Exclude files:排除的文件(在传输目录的时较有用,使用通配符,例如:/*.log,/*.tmp,*.txt/) 
Pattern separator:分隔符(配置Transfer Set Source files的分隔符) 
No default excludes:禁止默认的排除规则 
Make empty dirs:此选项会更改插件的默认行为。默认行为是匹配该文件是否存在,如果存在则创建目录存放。选中此选项会直接创建一个目录存放文件,即使是空目录。 
Flatten files:只上传文件,不创建目录(除了远程目录) 
Exec timeout (ms):运行脚本的超时时间(毫秒) 
Exec in pty:模拟一个终端执行脚本 
Add Transfer Set:增加一个传输配置 
Remote directory is a date format:远程目录建立带日期的文件夹(需要在Remote directory中配置日期格式),具体格式参考下表:

Remote directoryDirectories created
‘qa-approved/’yyyyMMddHHmmssqa-approved/20101107154555
‘builds/’yyyy/MM/dd/’build-${BUILD_NUMBER}’builds/2010/11/07/build-456 (if the build was number 456)
yyyy_MM/’build’-EEE-d-HHmmss2010_11/build-Sun-7-154555
yyyy-MM-dd_HH-mm-ss2010-11-07_15-45-55

第二种启动步骤:在构建后操作中,选择Send build artifacts over SSH

注:Transfer Set Source files和Exec command可只填写一个

    5、上传完毕后重启所有tomcat服务

    这里的重启可以直接调用服务端的重启脚本

如上图中Exec command 参数中的sh /home/admin/restartAllTomcat.sh执行重启操作即可。这里的命令根据自己的需要进行添加,或是全部写到脚本中也可以。

    可能会遇到的坑:

    1、jenkins安装插件后需要重启,不重启会找不到对应的配置项;

    2、如果你的服务器有严格的权限结构,尤其是生产环境,可以让运维开一个有具有所有操作权限的账号。否则上传后,没有copy或是执行脚本的权限则会失败。

    3、注意ssh的两个配置,用户账号和密码、端口的配置要注意。如果用的是普通账号一定要指向该账号具有权限的目录(我是将所有要操作的目录权限配置赋给一个用户组,然后在该用户组中新加了一个用户)

    可改进的地方

    1、jenkins可配置严格的安全机制,同时管理开发、测试、生产三个环境的所有系统的发布。

    2、代码方面要建立规范的管理制度,主干、分支、标签的合理使用,让测试环境和生产环境直接从svn上check 编译后发布。避免手动发布带来的不必要的问题。

    3、生产环境下的集群中,所有应用统一指向一个发发布目录,避免维护多个相同的发布目录带来的混乱

 

转载于:https://my.oschina.net/u/1791512/blog/1552790

Logo

更多推荐