持续集成及自动化部署工具

持续部署[CD]

**仅仅单元测试还不够,各个模块必须能够在服务器上运行;**关注点在于项目功能(各个模块)部署至服务器后可以运行,为测试环节或最终用户使用做好准备;

持续集成[CI]

**经常性、频繁的把所有模块集成在一起进行测试[集成测试],有问题尽早发现;**关注点在于尽早发现项目整体运行问题,尽早解决;

持续交付[CD]

**用小版本不断进行快速迭代,不断收集用户反馈信息,用最快的速度改进优化;[大版本/release]**关注点在于研发团队的最新代码能够尽快让最终用户体验到;

总体目标

**好处:    ***1.降低风险;    ***2.减少重复过程[如编译、测试、打包等固定流程] - 自动化流程;    ***3.任何时间、任何地点生成 "可部署的软件";    ***4.增强项目的可见性<1>有效决策;<2>注意到趋势;    ***5.建立团队对开发产品的信心;

Jenkins<open> | Hudson<Oracle>

** 前提知识:Linux基本命令|vim编辑器|Maven项目构建管理|Github|SVN** 可整合Github或Subversion** 人工部署** 自动化部署    *** 搭建持续集成环境:可以把构建、部署自动化,减轻工作量                                                  > deploy web container插件 + >    *** dev > git repository > 钩子程序 > jenkins > [GIT插件]> code >打包> war包>部署>Tomcat server                                                  > [Maven插件] > + >

Jenkins:

### Jenkins + SVN:    ** 要点:        *** 创建虚拟机安装Linux系统:vm1-svn,vm2-jenkins,vm3-application(tomcat);        *** 版本控制子系统(SVN):            - subversion服务器;            - 项目对应版本库;            - 版本库中钩子程序;                -- linux curl命令:-X:指定请求方式;-v:显示响应结果;-u:携带用户名/密码;-H:携带请求消息头信息;        *** 持续集成子系统            - JDK;            - Tomcat;            - Maven;            - Jenkins:                -- 主体程序;                -- svn插件;                -- maven插件;                -- Deploy to Web Container插件;        ***应用发布子系统            - JDK;            - Tomcat;### Jenkins + Github:    **要点:        *** Jenkins需要部署到外网,因Github无法无法访问内网地址;            - 安装Jenkins;        *** Jenkins所在主机需要安装GIT,git从GitHub上clone代码;            - echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc  # >>追加            - source /etc/bashrc    # 使文件生效        *** Jenkins需要指定git程序位置,和指定jdk、maven程序位置类似;            - 配置git;        *** 在GitHub上使用每个repository的webhook方式远程触发Jenkins构建;            - GitHub配置webhook[repository>settings>webhook>add webhook>远程触发的身份验证令牌]        *** 在Jenkins内关闭“防止跨站请求伪造”;            - 全局安全配置 > CSRF Protection > 取消勾选;