什么是持续集成?
持续集成指的是,频繁地(一天多次)将代码集成到主干,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
为什么要做持续集成?
- 每天都有很多重复性的工作,比如打包,由人工来完成占用开发时间且单调无聊。交给机器来做,把人释放出来,去做更有意义的工作。
- 开发中的代码需要尽早的测试,以发现问题,特别是主流程上的问题。
- 已经发布的版本需要实时监控,发现问题及时通知。
主要工具
- Jenkins
- Jenkins是Java 写的一个持续集成工具,可以持续监控代码变化,并调用外部组件实现相关功能。
- Gitlab插件,为了从gitlab仓库拉取代码,我们使用了Gitlab插件,该插件需要在系统设置中配置好host地址和ssh鉴权用的密钥、帐号等,然后在各个任务中再进行相应配置。
- multipleSCMs插件,适用于多仓库构建。
- Xcodebuild
- Xcodebuild是iOS平台上的构建工具,有单独命令行和Xcode插件两种形式,需要依赖Xcode。类似工具还有xcrun,xctools。
- Gradle
- Gradle是基于JVM的构建工具,可以打包Android的apk,本身不依赖于Android SDK,但我们的gradle脚本中需要用到Android SDK。
- Xcode7/Xcode8
- Xcode7用于UI自动化测试,Xcode8用于自动化编译ipa
- Android Studio
- 对应SDK版本为21(Android5.0)
注意!
- 系统权限
- 由于Jenkins与管理员不在同一个帐号组内,为了避免因权限问题无法操作对应文件,将源代码、测试脚本、打包工具和对应的配置文件都设为了全部用户可读写。
Jenkins仓库配置
- ios仓库配置
- iOS juanpi的代码只有一个工程,只需要配置一个仓库,即xxx.git,分支选择develop(提测时为对应版本的release分支)
- Android仓库配置
- 假如Android 的代码有多个工程,需要配置多个仓库,其中xxxx.git为主工程,依赖于其他几个仓库, 为了保持代码的一致性,我们用了jenkins的multipleSCMs这个插件,注意要设置代码checkout到子目录,否则不同仓库的代码会相互覆盖,比如Local subdirectory for repo : test,则代码会checkout到test这个子目录下。
构建触发器
通过Poll SCM对话框里设置构建触发的定时器,比如”H/30 “,表示每半小时检查一次代码。
Jenkins系统配置参考
Environment variables
- ANDROID_HOME
- /Users/Shared/Jenkins/Library/android-sdk
- CLASSPATH
- .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- JAVA_HOME
- /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home
- NODE_BINARY
- /usr/local/bin/node
- PATH
- $PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
Xcode Builder
- xcodebuild executable path
- /usr/bin/xcodebuild
- agvtool executable path
- /usr/bin/agvtool
- xcrun executable path
- /usr/bin/xcrun
Extended E-mail Notification
- Default Subject
- $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
-
Default Content
-
$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
Check console output at $BUILD_URL to view the results.
-