尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
基于jenkins进行定制化开发
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具起源于HudsonHudson是商用的主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写可在Tomcat等流行的Servlet容器中运行也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT构建工具有Maven、Ant、Gradle。目录环境配置创建构建任务生成APK生成二维码集成360加固集成蒲公英、Fir平台插件生成App BundleJenkins动态化参数介绍一键生成加固多渠道包脚本校验APK签名脚本插件1. 环境配置进入jenkins主界面系统管理-全局工具配置 进行配置包括 JDK,Git,Gradle,Maven等如下关于jdk的配置的设置。图1如上图给定一个别名通过下拉框选择相应的Jdk版本也可以通过FTP工具上传已经下载到本地的Jdk包。如下git配置需要指定一个本地已经下载好的路径。这种需要通过Ftp或者脚本提前下载指定版本的git工具。图2Gradle,Maven配置与jdk和git的配置雷同不做介绍。2. 如何创建一个构建任务生成apk需要新建一个构建任务这里构建一个自由风格的软件项目输入任务名称后就会自动创建一个构建项。图 3构建项包括 GeneralgitBucketJobNotifications源码管理构建触发器构建环境构建构建后操作。图4General可以设置一些项目介绍gitBucket未用到JobNotifications使用 UDP、TCP 或 HTTP 协议向定义的端点发送有关作业状态的通知设置同时并发构建数量源码管理配置关联不同的源码仓库gitsvnscms等构建触发器可以hook一些事件进行自动构建比如定时构建提交构建轮询scm构建等构建环境允许在构建之前进行一些操作比如更新lfs清除上一次构建缓存等构建指定构建脚本构建后操作主要配置构建后可以触发的操作如发布单元测试报告发送邮件通知发布工件到蒲公英fir等3. 生成apk基于步骤1步骤2只需要进行简单的配置即可打包apk如图5图5配置tasks clean debugDebug4. 生成二维码为了方便apk的下载安装将apk包的路径生成可直接下载的二维码图片。主要使用一个二维码生成的jar包。主要实现步骤:通过 jq工具解析gradle生成apk时的output-metadata.json获取apk名称进行输出找到输出的apk之后根据条件执行不同的逻辑比如加固。使用cp 命令将apk副本拷贝到指定目录然后通过QRcode.jar对目录中的apk路径生成二维码。在构建后操作 build description 插件指定二维码路径就可以在指定位置显示二维码。可以使用html调整二维码大小output-metadata.json{version:3,artifactType:{type:APK,kind:Directory},applicationId:com.codeview.takumi,variantName:debug,elements:[{type:SINGLE,filters:[],attributes:[],versionCode:1,versionName:1.0.0,outputFile:app-debug.apk}],elementType:File}使用方法需要用到 java -jar 命令java-jar/data/service/tomcat/QRcode.jar urlhttp://apk.android.reworldgame.com/apk/$JOB_NAME.apk image$JOB_NAME.jpg save/data/www/image # 使用二维码生成jar 生成二维码格式 java -jar 二维码生成jar路径 urlapk路径 imagexx.jpg save二维码地址tips 生成二维码的jar在java 8平台编译如果在java11 上不能运行。需要进行调整5. 集成360加固根据安全方面的考虑对在国内应用市场上线的apk上架app市场前做加固处理。选择360加固由于 360加固 助手提供命令行方式加固。#加固apk脚本 [参数1:加固apk 参数2加固apk输出路径 参数3: 海外国内来区分使用的签名文件]if[$jiagu true];then dos2unix/data/360/360jg.sh#忽略空格差异造成无法执行脚本bash-ex/data/360/360jg.sh ${WORKSPACE}/app/build/outputs/apk/${VARIABLE}/*.apk ${WORKSPACE}/app/build/outputs/apk/ china 完整shell脚本#!/bin/bashBASE/data/360/jiagu/jiagu.jar BASE2/data/360/jiagu/#360加固账号NAME360账户 PASSWORD360密码 APK$1DEST$2flavor$3#chinaFlag/apk/china/#根据输出路径判断是国内分支还是海外分支#if[[$APK ~$chinaFlag]]#then#flavorchina#else#flavoroverseas#fi#签名文件根据输入flavor来区分echoflavor $flavorif[$flavorchina];then KEY_PATH#密钥路径KEY_PASSWORD#密钥密码ALIASkey0#别名ALIAS_PASSWORD#别名密码elif[$flavorSouthEastAsia];then KEY_PATH#密钥路径KEY_PASSWORD#密钥密码ALIAS#别名ALIAS_PASSWORD密码#别名密码elseKEY_PATH/data/360/sign/reworldoversea.jks#密钥路径KEY_PASSWORD#密钥密码ALIAS#别名ALIAS_PASSWORD#别名密码fiecho------ 打包签名详情! ------echo使用的签名文件路径 $KEY_PATHechoApk包路径 $APKecho加固包输出路径 $DESTiecho------ running! ------cd$BASE2#java -jar ${BASE} -versionjava-jar ${BASE}-login ${NAME}${PASSWORD}java-jar ${BASE}-importsign ${KEY_PATH}${KEY_PASSWORD}${ALIAS}${ALIAS_PASSWORD}java-jar ${BASE}-showsign#java -jar ${BASE} -importmulpkg ${BASE2}/空渠道.txt #根据自身情况使用#java -jar ${BASE} -importmulpkg ${BASE2}/空渠道.txt #根据自身情况使用java-jar ${BASE}-showmulpkg java-jar ${BASE}-showconfig java-jar ${BASE}-jiagu ${APK}${DEST}-autosign#java -jar ${BASE} -pkgparam ${BASE2}/哈哈.txtecho--------finish------------tips:${WORKSPACE} 占位符方式可以获取jenkins默认本地变量和通过参数化构建设置的自定义变量6. 集成蒲公英fir平台插件发布到蒲公英和fir内测平台通过以上两个平台提供的快速发布插件可快速集成这里提供一种回显蒲公英平台生成二维码到jenkins的方案发布到蒲公英平台之后返回的json串格式如下{code:0,message:,data:{appKey:c2c6568526071a91d8ce0dfb596b894f,userKey:2b50d762a0957feaf481346938eba78e,appType:2,appIsLastest:1,appFileSize:259772621,appName:Reworld,appVersion:1.0.0,appVersionNo:1,appBuildVersion:1,appIdentifier:com.codereview.reworldsea,appIcon:5ff42e3dc70e4deffb8c0f48a3703dc2,appDescription:,appUpdateDescription:,appScreenshots:,appShortcutUrl:DrpS,appCreated:2021-11-25 14:29:00,appUpdated:2021-11-25 14:29:00,appQRCodeURL:https:\/\/www.pgyer.com\/app\/qrcodeHistory\/8273db84803bcb78f617c58c7d60f623ae20a25839d7efe9b90ea4788bba07f7}}shell脚本在将apk发布到蒲公英之后对返回的结果json串中appQRCodeURL的值进行解析。# 脚本文件 pgyUpdate.sh#!/bin/bash#MAIN_MODULE AndroidStudio project directory under the main moduleMAIN_MODULE.#The test address separately#MAIN_MODULE./app# pgy API accountPGYER_USER_KEY蒲公英userkeyPGYER_API_KEY蒲公英api key#APK path#APK_PATH${MAIN_MODULE}/build/outputs/apk#Receive the external transfer apk pathAPK_PATH$1echo#echo current path: pwdechoAPK_PATH${APK_PATH}APK_LISTls-t ${APK_PATH}echo${APK_LIST}#ind the latest apk packageforAPK_FILE in ${APK_LIST};doAPK_NAME${APK_FILE}echoapk file name$APK_NAMEFile$APK_FILEdone#-------------------------------------------------if[-n$APK_NAME];then# Determine whether is emptyechoupload$APK_FILEpgy#upload pgy updateDescription(version descript)RESULT$(curl-Ffile${APK_PATH}/${APK_NAME}-FuKey${PGYER_USER_KEY}-F_api_key${PGYER_API_KEY}https://qiniu-storage.pgyer.com/apiv1/app/upload)echo$RESULT pgy.json#-------------------send mail-------------------------# echo send mail to testqq.com# echo ${RESULT} | mail -s ${APK_NAME} already unload pgy testqq.com# #http://www.pgyer.com/apiv1/app/uploadfi构建块中添加执行发布到分发平台的shell脚本即可#发布到蒲公英if[$pgy true];then cd/data/pgyupdate./pgyUpdate.sh ${WORKSPACE}/app/build/outputs/apk/${VARIABLE}/fifir类似不赘述7. 生成App BundleAAB格式为上架google play需要与生成apk区别点在于构建方式不同。构建之后的处理与apk类似。构建块中添加执行发布到分发平台的shell脚本即可if[bundle$packageType];then cd/data/www/aab/# typeset -l lowerBuildChannel${Build_channel}# typeset -l lowerBuildType${Build_type}lowerBuildChannel${Build_channel,}lowerBuildType${Build_type,,}aabDir${WORKSPACE}/app/build/outputs/bundle/${lowerBuildChannel}${Build_type}aabName${aabDir}/app-${lowerBuildChannel}-${lowerBuildType,}.aabecho$aabNamecp${aabDir}/*.aab/data/www/apk/$JOB_NAME.aab java-jar/data/service/tomcat/QRcode.jar urlhttp://apk.android.reworldgame.com/apk/$JOB_NAME.aab image$JOB_NAME.jpg save/data/www/imageexitfi8. jenkins动态化参数介绍参数构建是实现jenkins动态构建的基础。8.1 字符参数图6如上图在需要用到的地方使用${App_VERSION_CODE}既可以取出来2406值来使用8.2选项参数图78.3布尔参数图88.4动态选择参数图98.5 最终构建任务样式一键生成加固多渠道包脚本脚本逻辑介绍对等待加固的apk使用360加固包提供的脚本jar文件进行加固然后针对生成的加固包执行wallet.jar 多渠道脚本,基于加固包生成多个渠道的apk文件提供给对应渠道进行上架。echooffecho push apk to here ::需要加固的apk路径set/p APK nulsetAPK_VERSION1setAPK_FLAVOR1setremain%APK%setindex0 :loopfor/ftokens1* delims_%%a in(%remain%)do(if%index%1(setAPK_FLAVOR%%a)if%index%2(setAPK_VERSION%%a)set/a indexindex1 rem 将截取剩下的部分赋给变量remain其实这里可以使用延迟变量开关setremain%%b)::如果还有剩余,则继续分割ifdefined remain goto :loopsetAPK_FLAVOR%APK_FLAVOR:~0,7%echo%APK%echoAPK_VERSION%APK_VERSION% APK_FLAVOR%APK_FLAVOR% ::加固配置setSRTC:\360\jiagusetNAME360账户setPASSWORD360账户密码 cd%SRT%echocurrent path %cd%if%APK_FLAVOR%oversea(echo oversea setBASEC:\360\haiwai\jiagu\jiagu.jar ::密钥路径setKEY_PATH./jsk/reworldoversea.jks ::密钥setKEY_PASSWORD密码 ::别名setALIAS别名 ::别名密码setALIAS_PASSWORD别名密码 ::输出加固包路径setDEST./海外/%APK_VERSION%echo本次使用印度签名)elseif%APK_FLAVOR%southEa(echo SouthEastAsia setBASEC:\360\southEastAsia\jiagu\jiagu.jar ::密钥路径setKEY_PATH./jsk/xxx.jks ::密钥密码setKEY_PASSWORD密码 ::别名setALIAS别名 ::别名密码setALIAS_PASSWORD别名密码 ::输出加固包路径setDEST./东南亚/%APK_VERSION%echo本次使用东南亚签名)else(echo china setBASE./jiagu.jar ::密钥路径setKEY_PATH./jsk/test.jks ::密钥密码setKEY_PASSWORD密码 ::别名setALIAS别名 ::别名密码setALIAS_PASSWORD别名密码 ::输出加固包路径setDEST./国内/%APK_VERSION%echo本次使用china签名)echo%BASE% jiagu apk output path :%DEST% md%DEST%echo------ jaigu running! ------java-jar%BASE%-version java-jar%BASE%-login%NAME%%PASSWORD% java-jar%BASE%-importsign%KEY_PATH%%KEY_PASSWORD%%ALIAS%%ALIAS_PASSWORD% java-jar%BASE%-showsign java-jar%BASE%-showmulpkg java-jar%BASE%-showconfig java-jar%BASE%-jiagu%APK%%DEST%-autosignecho------ jaigu finished! ------echo------ start rename ------cd%DEST%echocurrent path %cd%for%%i in(./*.apk)do(echo%%i|findstrjiagunul (echofind jiagu apkecho%%i|findstrsignnul (echofind signed apkcopy%%ireworld.apkgoto loop2))):loop2echo------ end rename ------echo------ start walle ------cd%SRT%echocurrent path %cd%setCHANNEL_PATH%DEST%/%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% java-jar./walle-cli-all.jar batch-f./walle临时渠道.txt%~f1%DEST%/reworld.apk%CHANNEL_PATH% ::统计目录下文件个数 cd%CHANNEL_PATH%echocurrent path %cd%setcount0for%%i in(./*.apk)doset/a count1echo------channel file count:%count%------echo------ end walle ------Pause10. 校验apk签名脚本脚本介绍针对加固之后apk签名与正确签名进行比对避免海外国内市场apk签名错用。echooffecho push apk to here ::需要加固的apk路径set/p APK nulecho apk path is%APK% echo push flavor to here echo1:chinaecho2:overseaecho3:southAsiaset/p APK_FLAVOR_TYPE nulif%APK_FLAVOR_TYPE%1(setAPK_FLAVORchinasetAPK_DEFINE_SHA1bd67d0933ec6a40fb)elseif%APK_FLAVOR_TYPE%2(setAPK_FLAVORoverseasetAPK_DEFINE_SHA15e33c207b8621a5a8bc458eb)elseif%APK_FLAVOR_TYPE%3(setAPK_FLAVORsouthAsiasetAPK_DEFINE_SHA1478550704adff0a1a89)else(setAPK_FLAVORunKnowsetAPK_DEFINE_SHA1unSet)echo choice flavor is%APK_FLAVOR% setSIGNER_INFO_PATHtemp_singer.txtsetLINE_SHA1_FLAGSHA-1 java-jar.\apksigner.jar verify--print-certs%APK% %SIGNER_INFO_PATH% call :read_apk_signer_sha1%SIGNER_INFO_PATH% :read_apk_signer_sha1for/ftokens1,2 delims:%%a IN(%1)do(echo%%a%%becho%%a|findstr%LINE_SHA1_FLAG% nul setAPK_SHA1%%b):del_leftif%APK_SHA1:~0,1% setAPK_SHA1%APK_SHA1:~1%goto del_leftecho%APK_DEFINE_SHA1% echo%APK_SHA1% if%APK_SHA1% equ%APK_DEFINE_SHA1%(echo SHA1 is right )else(echo SHA1 is wrong )pause11. 插件1.jenkins 下载地址2. 动态选择插件
RELATED

相关推荐

【软件】【vs】Visual Studio编译c语言程序

【软件】【vs】Visual Studio编译c语言程序

1、创建新项目2、搜索c,选择“空项目”3、输入项目名称,和项目要存放的位置:4、VisualStudio资源管理器中的源文件右键选择:添加-->新建项-->c文件(.cpp),将文件命名成.c文件即可&#xf…

📅 2026/9/14 5:34:33
DirectShow图像处理实战:从Filter Graph架构到实时边缘检测实现

DirectShow图像处理实战:从Filter Graph架构到实时边缘检测实现

1. 项目概述:为什么DirectShow在图形图像处理中依然值得深挖? 如果你在Windows平台上用Visual C搞过音视频开发,或者处理过摄像头采集、视频播放、格式转换这些活儿,那“DirectShow”这个名字对你来说肯定不陌生。它是一套微软在…

📅 2026/9/17 16:13:23
Akagi雀魂AI助手:实时麻将分析与智能决策的完全指南

Akagi雀魂AI助手:实时麻将分析与智能决策的完全指南

Akagi雀魂AI助手:实时麻将分析与智能决策的完全指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuk…

📅 2026/9/13 20:04:22
MORE NEWS

更多资讯

📰

SWE-Bench Pro 80.3% 的 Fable 5 接进编程工具当主力模型,Base URL 填 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

工业智能体落地现状与趋势:从自动化到自主决策的关键跨越

简介:这份PDF为《2025年工业智能体应用现状与趋势展望报告》,面向制造业从业者、企业决策者及关注AI落地的研究人员,旨在厘清工业智能体的概念、应用与演进方向。报告从工业智能体的定义、特征与类型入手,结合企业部署场景、考虑因…

📰

基于图像识别与BP神经网络的智慧农业灌溉决策系统

简介:一篇题为《基于图像识别和BP神经网络的灌溉模型的研究》的学术论文PDF,面向农业工程、机器学习及智慧灌溉领域的研究者和从业者,针对传统灌溉模型忽视作物生理状态与气象因素的问题,提出将图像识别、CWSI指数和BP神经网络相结…

📰

PL-300备考练习数据怎么选?Power BI实战数据集获取与用法详解

简介:面向微软Power BI PL-300认证考生的官方练习数据包,聚焦数据建模、DAX计算、报表设计与仪表板发布等核心考点,基于AdventureWorks和TailspinToys两种示例业务库展开实操。包体内含94个文件、共56.04MB,既有31个pbix成品报表可…

📰

黄河流域数据集:DEM、水系、界线一次配齐,水文分析不再东拼西凑

简介:一套覆盖黄河流域多要素的地理数据集,面向地理信息系统、水文学及区域规划方向的研究者与从业者,可为流域地形分析、水资源管理和生态保护研究提供基础底图与矢量图层。内容包含数字高程模型(DEM)、干流与主要支流…

📰

GBrain Ingest 技能深度解析:路由式内容摄取管线与大脑写入契约

GBrain Ingest 技能深度解析:路由式内容摄取管线与大脑写入契约 【免费下载链接】gbrain Garrys Opinionated OpenClaw/Hermes Agent Brain 项目地址: https://gitcode.com/gh_mirrors/gb/gbrain 导读 本文围绕 gbrain 仓库中的 ingest 技能 展开&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬