通常而言,软件开发模型有常见的瀑布模型、迭代开发模型、以及最近出现的敏捷开发模型等不一样的模型。每种模型有各自应用场景,Git Flow是构建在Git之上的一个组织软件开发活动的模型,Git Flow重点解决的是因为源代码在开发过程当中的各类冲突致使开发活动混乱的问题。在此介绍Git Flow是因为walle依赖它的思想进行持续部署。php
开发过程当中可能出现的git flowhtml
Git Flow模型中定义了主分支和辅助分支两类分支。其中主分支用于组织与软件开发、部署相关的活动;辅助分支组织为了解决特定的问题而进行的各类开发活动。分支的名字是一种共识,更重要的是它承担的责任。java
主分支是全部开发活动的核心分支。全部的开发活动产生的输出物最终都会反映到主分支的代码中。主分支分为master分支和development分支。git
master分支上存放的应该是随时可供在生产环境中部署的代码,它承担的责任就是:仅在发布新的可供部署的代码时才更新到master分支上的代码。当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,最好添加对应的版本号标签(TAG)。github
develop分支是保存当前最新开发成果的分支,它承担的责任就是功能开发完毕等待最后QA的验收,一般这个分支上的代码也是可进行每日夜间发布的代码。当代码已经足够稳定时,就能够将全部的开发成果合并回master分支了。web
辅助分支是用于组织解决特定问题的各类软件开发活动的分支,它的生存周期伴随着它的功能完成而消失。辅助分支包括:bash
当这些分支完成它的使命以后在merge到主分支以后,也将被删除。composer
Git Flow开发模型从源代码管理角度对一般意义上的软件开发活动进行了约束,让小组各个成员之间的开发相互隔离,可以有效避免处于开发状态中的代码相互影响而致使的效率低下和混乱,各自开发团队根据本身的特色和节奏自行剪裁或扩展。svn
Walle 一个web部署系统工具,可能也是个持续发布工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各类web代码发布,静态的HTML、动态PHP、须要编译的JAVA等,用户权限管理,各类自定义高级任务。一键上线、回滚。工具
项目地址:walle-瓦力,上线开源两个月,目前已支持超过十家企业线上部署使用,每周更新一个版本,持续带来新特性。
walle部署在一台宿主机提供一个web UI,方便用户自主更新代码部署到目标机群。Walle是一个跑在LNMP(LAMP)上的PHP服务,宿主机与目标机群创建信任,经过操做bash命令来实现代码同步、自定义高级任务。
宿主机、目标机群、操做用户关系
用户的项目可自定义git/svn代码托管地址、宿主机、目标机群、高级任务等。配置完成后可快速复制当前配置、检测配置是否正常、以及该项目的审核管理员和成员。
walle的持续部署与Git Flow思想一致,在不一样的环境部署不一样的分支。划分三个环境:测试环境、预发布环境、生产环境。测试环境和预发布环境推荐分支部署,生产环境推荐tag部署。固然,这更适合milestone开发方式,若是是天天快速迭代多个版本,打tag成本就有点高了。
开发者选择要上线的项目,选择要上线的分支和版本提交上线单,项目管理员审核经过后,开发者发起上线。
部署是在一台宿主机拉取代码,作编译、配置后,向目标机群分发,执行相关目标机群任务。部署流程拆分为如下6个环节,其中1-5为在宿主机进行,6在目标机群执行。
为保证服务的完整性,先同步代码,后切换服务。部署发布每次都会有版本记录保留,版本上线事故一旦发生,回滚可瞬间完成。可配置线上版本最大保留数,过时的版本被会删除,同时也就不能回滚被删除的版本。对于须要编译、自定义多任务辅助,可配置前置、后置操做自定义任务;同时提供一些预置变量({WORKSPACE}宿主机的当前独立空间、目标机webroot,{VERSION}版本库目录)方便用户操做自定义任务。
上线过程直到目标机群所有完成以前,若有任一环节失败将会回滚,须要从新上线,同时会把错误信息提示用户。