持续集成及自动化部署工具
持续部署[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 > 取消勾选;