本文同步自我的博客Android Jenkins参数化配置android
在咱们的项目组里,构建Jenkins打包平台的初衷是让测试人员用这个打包平台,开发人员写完提测邮件以后,测试人员自行去打包,而后进行测试,开发就能够继续去开车了。git
本文不打算写手把手安装Jenkins教程,若是你还不了解怎么安装Jenkins,请自行百度,或者查看这里的官网教程: pkg.jenkins.io/redhat/。github
Jenkins参数化配置主要有2个步骤:shell
gradle.properties
中配置须要动态修改的参数,并在build.gradle
中使用。通常咱们须要动态修改的参数有versionName、versionCode,是否测试环境等,同时咱们能够提供一些额外配置,如选择须要构建的分支,打包的渠道号等,以提升打包灵活性。咱们把须要Jenkins修改的参数放到gradle.properties
文件下,如:api
# Jenkins配置
IS_JENKINS=false
VERSION_NAME=3.4
VERSION_CODE=30400002
IS_TEST_ENV=true
复制代码
接下来就是重点了。咱们在新建任务的时候选择“构建一个自由风格的软件项目” 安全
接下来选择“参数化构建过程”添加参数配置:服务器
能够看到在构建分支里咱们使用了上面的BRANCH
参数,这样咱们就能够动态的选择须要构建的分支了。app
** 这里最重要的地方就是标记部分,只有勾选该选项,gradle.properties
的参数才能被Jenkins修改。**curl
若是你在github上下载过Android代码,你会发现通常项目中都会保留gradle wrapper
文件夹,这样作的好处是升级gradle版本的时候不须要更新ci,这里咱们也同样,勾选“Use Gradle Wrapper”,而后添加你须要的tasks,这里须要说明一下的是assemble'${PRODUCT_FLAVORS}''${BUILD_TYPES}'
,若是你平时打包的时候有留意过gradle执行的task的时候你会发现gradle为每一个productFlavors
建立2个task,一个是debug版本的,一个是release版本的。利用这个规则咱们就可使用参数动态改变task了。这里有一个取巧的地方,细心的你会发现PRODUCT_FLAVORS
第一个选项是空的,当选择该选项时,task的名称就变成assemblerelease
或者assembledebug
了,这种状况下就会打全渠道包,注意这里不能把空放在最后一个选项,放在最后的话会变成一个空格,致使task名称错误。测试
到这里Jenkins参数化构建的配置就已经完成了,可是我知道你确定不会只知足于此。
在构建框的底部咱们选择增长构建步骤->Execute shell,使用蒲公英的Api来上传apk。
curl -F "file=@${WORKSPACE}/app/build/outputs/apk/${PRODUCT_FLAVORS}/${BUILD_TYPES}/gg-${BUILD_TYPES}-${PRODUCT_FLAVORS}-${VERSION_NAME}-${VERSION_CODE}.apk" -F "_api_key=${PGYER_API_KEY}" https://www.pgyer.com/apiv2/app/upload -F 'buildInstallType=2' -F "buildPassword=${PGYER_APK_PASSWORD}"
复制代码
注意这里apk的名称的规则须要与项目生成的apk的名称规则一致,不然会找不到apk。另外,当咱们打全渠道包的时候不上传到蒲公英,咱们能够编写简单的shell脚本,判断是否PRODUCT_FLAVORS
是否为空,若是空就是打多渠道包,不上传蒲公英。
if [-n "${PRODUCT_FLAVORS}"]
then
curl -F "file=@${WORKSPACE}/app/build/outputs/apk/${PRODUCT_FLAVORS}/${BUILD_TYPES}/gg-${BUILD_TYPES}-${PRODUCT_FLAVORS}-${VERSION_NAME}-${VERSION_CODE}.apk" -F "_api_key=${PGYER_API_KEY}" https://www.pgyer.com/apiv2/app/upload -F 'buildInstallType=2' -F "buildPassword=${PGYER_APK_PASSWORD}"
fi
复制代码
WORKSPACE
是Jenkins内置的环境变量,想查看更多内置环境变量可查看:wiki.jenkins.io/display/JEN…
在构建项目的左下角,Jenkins会为咱们列出构建历史,默认以#${BUILD_NUMBER}
的形式展现的,因此咱们会看到#1,#2,#3这样的名称,为了疯狂暗示,咱们能够修改这个构建名称,咱们须要先下载build-name-setter
插件,而后选择增长构建步骤->Update build name进行配置。
构建完成后的效果以下:
BUILD_NUMBER
是Jenkins内置的环境变量,想查看更多内置环境变量可查看:wiki.jenkins.io/display/JEN…
在构建项目的首页会列出咱们构建后的成果(apk),可是这须要咱们配置一下成果的路径。
选择增长构建后操做步骤->Archive the artifacts来进行配置:
若是你没有多渠道包的须要,建议你使用完整的路径:
app/build/outputs/apk/${PRODUCT_FLAVORS}/${BUILD_TYPES}/*.apk
复制代码
为了收集全渠道包因此这里直接使用**/*.apk
来匹配/apk
文件夹下的全部.apk
文件。
Jenkins默认会保留全部构建,能够在构建历史里查看,当咱们构建次数多了以后,硬盘就会慢慢被塞满,这时候咱们能够删除一些比较旧的构建,构建的目录在/var/lib/jenkins/jobs/构建项目名称/builds/构建序号
,你能够手动进行删除,也可使用插件。接下来咱们就说下如何使用插件来自动删除旧的构建。这里咱们须要借助Discard Old Build
插件。安装插件后选择增长构建后操做步骤->Discard Old Builds来进行配置:
这里我选择了保留7天内的构建。详细可查看插件说明:Discard Old Build
如前所述,咱们但愿让测试人员自行打包,可是咱们并不但愿测试人员或者其余对Jenkins不了解的人员有过大的权限,避免误操做,因此咱们限制一下权限,让他们只能进行构建等简单操做。
实现权限管理功能咱们使用Role-based Authorization Strategy
插件,安装完插件后进入系统管理->全局安全配置->受权策略中选择Role-Based Strategy。接下来就能够配置用户权限了。
首先咱们建立2个角色:dev
,test
。dev是分配给开发人员,能够对项目进行配置,test分配给测试人员,只能进行打包等简单操做。咱们能够把鼠标光标移到权限名称上面,会显示权限描述。这里就不说明每一个权限的做用了。
为不一样用户分配不一样的权限。确保该用户存在,若是用户还没建立,能够在系统管理->管理用户进行建立。
切换不一样的用户,你会发现他们能够操做的功能不一样,如测试人员只能进行构建和查看基本的构建信息:
本文截图比较多,感谢你抽空阅读,本文主要记录本身配置Jenkins参数化的过程和一些遇到的问题,但愿对你有所帮助。Jenkins能作的事不少,不只仅是用来打包,如为git服务器添加hook,进行一些规范检查,代码检查等,提高项目质量。但愿你们都能用作工程的想法来作项目。