android studio + nexus(中央仓库 远程仓库) + Jenkins(持续集成)。
总结了一些以前经验和大家分享,有不足之处还往多多指教。
也许这些敏捷部署的东西都是基于android来弄的,但是思想差不多的。
1. nexus 中央仓库(远程仓库)
如果一个团队,团队小组成员没有 库 的思维,这个必须搭建起来,哪怕浪费一点时间,需要长久灌输此方针。
为何费力搭建 Nexus ?
- 解决了 应用 多模块构建,编译等问题。
- 有效的对库进行版本管理以及控制。
- 为 敏捷开发,快速开发打下扎实基础。
我 将 我们小组 部分公用的模块抽取出来 形成 基础库,控件库,组件库,然后 android 项目只需要在 android studio 的 build.gradle 引用 远程仓库的库.
库的建立,依赖方便了,也提高了复用率,出问题,只需要修改一处地方。
当然 库的事情是持续不断维护的。
引用方式:(compile 'com.公司名称.commom:commom:1.0.3')
在 build.gradle 加入
repositories {
... ...
maven {
url `http://ip地址:8081/nexus/content/repositories/仓库名称'
}
}
dependencies {
... ...
compile 'com.公司名称.api:api:1.0.2'
compile 'com.公司名称.settings:systempresenter:1.0.7'
}
这些库是如何通过 android studio 上传到中央仓库的?
apply plugin: 'maven'
//上传基础库的 aar到中央仓库.
def MAVEN_LOCAL_PATH = 'http://IP地址:8081/nexus/content/repositories/XgimiApi'
def ARTIFACT_ID = 'commom' // 一般为别名
def VERSION_NAME = '1.0.3' // 版本号
def GROUP_ID = 'com.公司名称.commom' // 统一使用包名
def ACCOUNT = 'admin'
def PASSWORD = 'admin****'
//脚本: 将Lib打成aar包上传至maven私有库
uploadArchives {
repositories {
mavenDeployer {
repository(url: MAVEN_LOCAL_PATH) {
authentication(userName: ACCOUNT, password: PASSWORD)
}
pom.project {
groupId GROUP_ID
artifactId ARTIFACT_ID
version VERSION_NAME
packaging 'aar'
}
}
}
}
2. Jenkins
由于开发人员水平,经验不同,编写的代码习惯不一致,也是导致代码质量较差,难于维护的原因之一。接手小组第一步,我就统一了 android的代码规范(当然IOS也不能放过),包括android开发环境统一,并且制定与整理了开发小组的 入职,项目分工,等等文档。
代码评审 暂时使用了 人肉 code review,长期应该考虑其它方式,比如 Gerrit... ...
jenkins 是持续集成工具,用于干苦活累活,重复性的工作:
- 钩子调用执行工作,比如git上传了新代码 等等.
- 持续的软件版本发布/测试项目.
为何做持续集成?
- 对代码库随时进行集成,代码集成越早,缺陷被发现越早,修复缺陷的成本越低,大大降低时和成本(开发成本,测试成本等等)。(无论是多人协作还是个人,好处不用多说)
- 将开发过程重复工作自动化,自动进行单元测试和新版本发布等等。
单元测试的好处在于,你的代码 整体的分层,架构 需要做好。(后续会用一个篇章讲讲android的单元测试)
持续集成的自动化不能完成保证质量,还得靠开发人员的代码质量,自测,压力测试等等。
题外话:敏捷开发之原则 五大原则 SRP OCP LSP DIP ISP
3. 文档
敏捷不需要文档,有文档就不叫敏捷,滚一别去。后续来的人如何接手?介于移动开发的开发人员的时间,文档一般会化简,比如只需要列出整体的界面模块,概要,接口等等就好,一般只需要1~2天就能写完。
4. git搭建
可以使用开源中国的,也可以自己使用gitlab搭建,网上也有其它的,文章多的很。
【参考资料】: