写在前面随着自动化越来越流行,越来越多的公司会自动化发布应用。前后端项目相对较多。我们公司就是这样。移动端目前都没有经过自动化封装。现在团队需要将移动端自动化,以提高效率。以下是整个过程的操作步骤。具体思路是先进行人工测试,然后在此基础上想办法实现自动化。比较简单,实现的功能也比较少。这里做一个总结和整理,也方便有需要的人。安装环境安装JDK下载地址:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html安装:#tarxfjdk-8u291-linux-x64.tar.gz-C/usr/local/#vim/etc/profileexportJAVA_HOME=/usr/local/jdk1.8.0_291exportPATH=$PATH:$JAVA_HOME/bin#source/etc/profile#java-versionjavaversion"1.8.0_291"Java(TM)SERuntimeEnvironment(build1.8.0_291-b10)JavaHotSpot(TM)64-BitServerVM(build25.291-b10,mixedmode)安装AndroidSDK下载地址:https://developer.android.google.cn/studio?hl=zh-cn#downloads安装:#unzipcommandlinetools-linux-7302050_latest.zip-d/usr/local/#vim/etc/profileexportANDROID_HOME=/usr/localexportPATH=$PATH:$JAVA_HOME/bin:$ANDROID_HOME/cmdline-tools/bin#source/etc/profile#sdkmanager--list#安装对应版本的SDK#sdkmanager"platforms;android-29"如果报错:Error:CouldnotdetermineSDKroot.Error:Eitherspecifyitexplicitlywith--sdk_root=ormovethispackageintoitsexpectedlocation:/cmdline-tools/latest/,然后直接在cmdline-tools目录下新建latest目录,然后将bin、lib、source.properties文件和目录移动到latest目录下的latest/├──bin├──lib├──NOTICE.txt└──source.properties并重新配置环境变量如下:#vim/etc/profileexportANDROID_HOME=/usr/localexportPATH=$PATH:$JAVA_HOME/bin:$ANDROID_HOME/cmdline-tools/latest/bin安装Gradle下载地址:https://gradle.org/releases/安装:#unzipgradle-7.1.1-bin.zip-d/usr/local/#vim/etc/profileexportGRADLE_HOME=/usr/local/gradle-7.1.1exportPATH=$PATH:$JAVA_HOME/bin:$ANDROID_HOME/cmdline-tools/latest/bin:$GRADLE_HOME/bin#source/etc/profile#gradle-vWelcometoGradle7.1.1!Herearethehighlightsofthisrelease:-FasterincrementalJavacompilation-EasiersourcesetconfigurationintheKotlinDSL手动打包测试下载代码#gitclonehttp://192.168.100.180/app/android/newcrm1.0.gitBuildpackaging#gradlebuild&gradleassemble#curl-F"file=@/tmp/example.ipa"-F"uKey=aa18132c4d9afedfa9cd2c054213c867"-F"_api_key=bb66fdd1c5a4c247b016e0ab88a54fdd"https://upload.pgyer.com/apiv1/app/upload使用Jenkins打包Jenkins和de在Kubernetes中部署它。打包Android包可以直接使用jenkins-slave完成。整理过程如下:整个过程很简单,基本上只要打包成功,就不会出现问题。制作打包好的Docker镜像这一步主要是制作一个用于打包Android项目的Docker。由于网络原因,Android工具是手动下载并添加到Docker中的。Dockerfile如下(sdk版本需要根据公司情况更改):FROMgradle:5.6.4-jdk8ADDcmdline-tools.tar.gz/usr/localENVANDROID_HOME/usr/localENVPATH${ANDROID_HOME}/cmdline-tools/latest/bin:${PATH}制作镜像:dockerbuild-tregistry.cn-hangzhou.aliyuncs.com/rookieops/android-sdk:v1。进入容器安装AndroidSDK。主要原因是SDK的安装需要交互操作。Dockerfile里面不好做,所以手动安装上去。dockerexec-it--rmregistry.cn-hangzhou.aliyuncs.com/rookieops/android-sdk:v1bash#sdkmanager"platforms;android-29""platform-tools""build-tools;29.0.2"安装完成后,另外打开一个终端,将上面的容器重新commit成一个新的镜像,如下:#获取容器IDdockerps|grepandroid#生成新镜像dockercommite0e0a7387c35registry.cn-hangzhou.aliyuncs.com/rookieops/android-sdk:v2#Pushimagedockerpushregistry.cn-hangzhou.aliyuncs.com/rookieops/android-sdk:v2知道制作Jenkinsfile的流程,Jenkinsfile只需要按照流程走,如下:#!groovy@Library('lotbrick')_//介绍方法defdingmes=neworg.devops.sendDingTalk()pipeline{agent{kubernetes{label"jenkins-slave-${UUID.randomUUID().toString()}"yaml"""apiVersion:v1kind:Podspec:containers:-name:gradleimage:registry.cn-hangzhou.aliyuncs.com/rookieops/android-sdk:v2command:['cat']tty:truevolumeMounts:-name:cachemountPath:/home/gradle/.gradle/caches/volumes:-name:cacheshostPath:小路:"/data/jenkins-job/${JOB_NAME}/gradle/""""}environment{GIT_CREDENTIAL_ID='git-token'UKEY="xxxx"API_KEY="xxx"UPLOAD_URL="https://upload.pgyer.com/apiv1/app/upload"DINGTALKHOOK="https://oapi.dingtalk.com/robot/send?access_token=adab54de4f50ce9ae376e866a89304c38aadfe04982242bbcd105777ba79aaa1"}//配置触发器触发器{GenericTrigger(genericVariables:[[key:'ref',value:'$.ref'],[key:'before$be.,value'],[key:'after',value:'$.after'],[key:'hook_name',value:'$.hook_name']],causeString:'Triggeredon$ref',token:env.JOB_NAME,printContributedVariables:true,printPostContent:true,regexpFilterText:'$ref',regexpFilterExpression:'refs/heads/(pre|master)',)}options{timeout(time:25,unit:'MINUTES')}stages{stage('CheckoutSCM'){steps{checkout(scm)}}//编译stage('Build&Push'){steps{container('gradle'){script{sh"""gradlebuild&gradleassemblelsapp/build/outputs/apk/release/*.apk"""PACKAGE_DIR=sh(脚本:"lsapp/build/outputs/apk/release/*.apk",returnStdout:true).trim()FULL_DIR="${WORKSPACE}/${PACKAGE_DIR}"sh"""curl-F"file=@${FULL_DIR}"-F"uKey=${UKEY}"-F"_api_key=${API_KEY}"${UPLOAD_URL}"""}}}}}//构建后的操作post{success{script{println("success:只有构建成功才会执行")dingmes.SendDingTalk("Thebuildissuccessful?")}}failure{script{println("failure:willonlybeexecutedifthebuildfails")dingmes.SendDingTalk("Buildfailed?")}}}}配置管道因为我是用Kubesphere来管理DevOps项目在这里,所以直接在Kubesphere中配置即可。如果你直接使用Jenkins,你可以配置它。很简单(1)添加项目(2)配置分支和路径。到这里就配置完成了,下面进行打包测试。项目打包后,钉钉会收到如下信息:也可以在DevOps项目中查看具体信息,如下:总结一下本文的主要目的是使用Jenkins发布Android项目。整体过程比较简单,就是把Android项目的Docker安装打包完成sdk后,这些镜像变得非常大,差不多达到1G,是目前为止制作的最大的镜像^_^。本文转载自微信公众号《运维开发故事》,可通过以下二维码关注。转载本文请联系运维开发故事公众号。