随着公司扩大和测试团队的引入,原有的本地打包已经无法满足需求,所以考虑搭建Android持续集成打包平台。因为我司前后端发版是通过Docker+Jenkins,所以就沿用它。
网上对于搭建Jenkins的教程很多,但是基于Docker的很少,同时要考虑服务器上无法访问外国网站,所以自己摸索并填了很多坑,因此记录一下。
实现目标:可以根据参数打不同flavor/不同运行环境的包;收集打包成功后的成果(Artifact);把api上传到fir后,在建构列表展示出下载链接。
思路:先在本地配置Docker+Jenkins,本地测试打包成功后,再把dockerfile上传到服务器。以下配置讲的是在本地(mac)搭建一个Docker+Jenkins的持续集成环境。
因为在docker里下载jenkins速度比较慢,所以建议给docker配置阿里镜像加速,具体可以网搜一下教程,配置完如下图
Dockerfile 是构建一个容器的默认的配置文件,我们编写一个Dockerfile,在这个Docker容器内配置所需要的环境。
3.建构并运行Docker
docker build -t <tagname>
. 将开始执行脚本中的内容,下载安装所需环境docker run -p 8080:8080 -p 50000:50000 <tagname>
这样就会开始运行了安装好所需环境的容器。4.等脚本跑完在浏览器输入http://localhost:8080/ 进入jenkins登录界面
如果是第一次运行jenkins,需要输入密钥,这个在跑docker run -p 8080:8080 -p 50000:50000 时会输出到命令行,注意查看一下。
1.在项目根目录新建 gradle.properties 文件,在这里指定默认的api运行环境
API_URL_TYPE=test1
2.在一个安全的目录下存放storeFile,并新建keystore.properties文件,注意此文件的私密性
storePassword=xxx
keyPassword=xx
keyAlias=xxx
storeFile=file/director/storefile # 这个是key文件相对于module的路径
3.修改module下的build.gradle文件
android{
defaultConfig{
// 自定义配置变量
buildConfigField 'String', 'API_URL', API_URL
}
signingConfigs {
release {
// Load keystore
if(rootProject.file("keystore.properties").exists()){
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file("keystore.properties")
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
}
// 指定release包的签名配置
buildTypes{
release{
signingConfig signingConfigs.release
}
}
(1)收集建构成果,比如apk,mapping文件
(2)上传apk到fir
(3)把上传到fir的短链接展示到建构列表中。
i.你需要安装一个插件:description setter plugin
ii.在建构后操作添加set build description如下。它会通过正则表达式匹配建构的输出,匹配到字符串可以用\n获取。比如下面的\1会获取第一个匹配到的字符串
iii.此时在建构列表里它会显示为如下。我们要去系统管理-全局安全配置-Markup Formatter选择SafeHtml
<a href="http://fir.im/xxx">http://fir.im/xxx</a>
来源:知乎,链接:https://zhuanlan.zhihu.com/p/31858545