CI

Android,iOS 双平台搭建CI心得(Jenkins + GitLab + Gradle(android)/Xcode(iOS) + fir.im(分发) )


概述

由于上一篇写到想尽早搭建移动端的CI,这两天便一直折腾。总算有点结果,至于细致下来,还需要一些时间去专门调整后,再移交个QA。 去年写过一篇,关于使用jenkins如何为安卓搭建自动生成分发的平台,左边目录点击就能找到。

自动构建平台:jenkins 版本控制:git 编译工具:Gradle(android)/Xcode(iOS) 分发工具:fir.im - fir-cl

选择jenkins主要考虑到它比较稳定,另外一点是可以兼顾两个平台,别的平台大多数都是偏向android或者iOS中一个。别的不用说,分发工具选择fir,在实践中发觉fir平台很稳定,非常适合做分发平台,而且重要的是,免费

Android

Android自动构建 这篇是我以前写的,是完全可行的。这里做一点改造。 为满足,不同构建生成不同环境的APK包,而减少QA与开发之间沟通,并同时满足后台需要特定环境调试。所以构建平台要能提供相应的项目,释放开发的压力。 具体改造: 1. 为Gradle配置全局变量,然后方便管理启用环境。因为我是使用Gradle进行配置,所以也同样使用Gradle属性赋值直接进行环境的更改。

# 在Gradle文件中,比如在我的项目中是 config.gradle

task serverName {
	println "SEVER IS ${SEVER_CONFIG_CI}"
}

# 配置 SEVER_CONFIG_CI 可以通过Gradle自定义属性,也可以通过JVM配置等,这里使用比较偷懒的方法,直接定义gradle中的属性配置,但要在前面添加ORG_GRADLE_PROJECT_作为前缀
export ORG_GRADLE_PROJECT_SEVER_CONFIG_CI = 2

#这个时候就可以直接在命令行里运行 gradle serverName ,就能看到 结果为SEVER IS 2

配置完后,只需要在编译前,运行一次这个命令,就能提供相应的服务器环境了。 1. 将Gradle配置部署到jenkins上,一个项目对应一个环境,便于管理。具体步奏,在项目的配置中的>构建>增加构建步奏>Execute shell ,输入刚才提到的配置。 2. fir分发,用命令工具替换插件。原先用的插件支持并不友好(对我来说,命令行比较友好),所以这次fir提供了fir-cl工具后,便毅然决然的替换了原来的插件。步骤和2一样,只不过命令变成了

fir publish ${WORKSPACE}/app/build/outputs/apk/app-baidu-debug.apk -T {firToken}

当然,我是直接在构建中使用了,也可以选择构建后。如果选择构建后运操作>增加构建后操作步奏>Excute a set of scripts>Build steps (或者Add a shell 将写好的脚本上传) 最后立即构建,享受吧~~~

iOS

iOS 由于编译软件的限制,所以只能有苹果系统,包含Xcode的机器才能集成这套CI。 对于jenkins的安装这里不重复了,想了解的仍然是点击左边目录,Android自动构建里有。 由于我的项目中有Cocopods,所以具体配置中有些坑要注意。

  1. Git拉去源码时可能会出现。十分钟就断开,导致项目拉去始终失败的可能。这里需要在项目配置中源码管理>Additional Behaviours>Advanced clone behaviours>Timeout for clone and fetch operations 中填入一个较大的值,防止timeout。
  2. 构建中,选择Xcode。具体配置实例如下:
Target: JenkinsCI
Clean before build? YES
Generate Archive? YES
Pack application and build .ipa? YES
.ipa filename pattern: ${VERSION}
Output directory: ${workspace}/Builds/${BUILD_NUMBER}/${BUILD_ID}
Unlock Keychain? YES
Keychain path: ${HOME}/Library/Keychains/login.keychain
Keychain password: your administrator user password
Xcode Schema File: JenkinsCI
Xcode Workspace File: ${WORKSPACE}/JenkinsCI
Xcode Project Directory: ${WORKSPACE}
Xcode Project File: ${WORKSPACE}/JenkinsCI
Build output directory: ${WORKSPACE}/Build
Provide version number and run avgtool? YES
Technical version: ${BUILD_ID}

特别要注意xcode workspace file 。由于pod使用时是通过workspace而不是project,所以不配置这个,构建始终不会成功。 1. fir分发。与android一样,这里我用了上面提到的第二种方法。

未解决的问题

iOS如何构建脚本生成不同环境。


comments powered by Disqus