android 使用jenkins打包 mac 配置记录

说明:本文仅用于个人记录

安装步骤

安装步骤就不说了,这里直接说项目配置,安装步骤参见:https://www.jianshu.com/p/74dd11121fc7

创建项目

  • 点击新建item


    image.png
  • 输入项目名称--选择第一个freestyle projetc--点击确定


    image.png

配置项目

  • 进入自己的项目,点击配置


    image.png

常规配置

  • 描述


    image.png
  • 配置一些扩展参数(给到脚本使用)


    image.png

    这里配置的是一些简单的String 参数(主要用于上传apk包,以及发通知给到企业微信)

源码配置

image.png

构建触发器配置

image.png

这里可以选按时轮训(如图),也可以选择其他方式,比如自动监控git提交并触发(这里有个小坑,好像本地ip直连的gitlab不支持,需要有域名的才行)
更多设置细节参见:https://www.jianshu.com/p/ff31b08dadfe

构建

image.png

这里的gradle直接在jenkins就可以安装了


image.png

最后我们还可以添加一些excute shell 脚本

MSG=${SCM_CHANGELOG}
echo MSG
DISPATCH_APP_KEY="xxxxxx"
IPA_FILE_PATH="/Users/jenkins/.jenkins/workspace/xxx_android/app/build/outputs/apk/daily/release/app-daily-release.apk"
DATE="$(date "+%Y%m%d_%H:%M:%S")"
IPA_UPLOAD_RESPONSE=$(curl -F "file=@${IPA_FILE_PATH}" https://static.xxx.com/upload?scenes=package&output_type=json)
IPA_URL=$(python /Users/jenkins/Desktop/analysis-upload-response.py ${IPA_UPLOAD_RESPONSE})

echo ${IPA_URL}

DISPATCH_REQUEST_URL="https://dispatch.oa.xxx.com/xxx/xxx/xx.json?fappKey=${DISPATCH_APP_KEY}&fappVersion=${DATE}&fappUrl=${IPA_URL}&fsize=40&fversionDesc=Demo"
curl ${DISPATCH_REQUEST_URL}
curl -d "touser=${xxxPushUser}" -d 'agent_id=1000011' -d 'is_textcard_flag=1' -d "description=${xxxDescription}${MSG}" -d "title=${xxxPushTitle}" -d "url=${xxxHref}" http://xxx/weixin/send/msg.json

这里需要注意一些路径,在ios和win可能不太一样,为了省心可以直接配置全路径。

坑点

项目太大,git拉取失败

Receiving objects:  93% (4502/4814), 1012.85 MiB | 3.67 MiB/s   
Receiving objects:  93% (4504/4814), 1015.59 MiB | 3.84 MiB/s   
Receiving objects:  93% (4505/4814), 1021.38 MiB | 3.84 MiB/s   
Receiving objects:  93% (4506/4814), 1.00 GiB | 3.89 MiB/s   
Receiving objects:  93% (4508/4814), 1.00 GiB | 3.94 MiB/s   
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2042)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1761)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$400(CliGitAPIImpl.java:72)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:442)
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:886)
    ... 11 more
ERROR: Error fetching remote repo 'origin'
Finished: FAILURE</pre>

参考链接:https://www.jianshu.com/p/c8e7ab672a67
解决方案:设置超时时间,使用浅克隆
浅克隆功能,只clone少部分历史到本地,这样可以极大的减少clone的仓库大小

image.png

项目报内存溢出

<pre class="console-output" style="box-sizing: inherit; font-size: 0.95em; white-space: pre-wrap; overflow-wrap: break-word; margin: 0px; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">> **Task :app:mergeDailyReleaseNativeLibs**

Expiring Daemon because JVM heap space is exhausted
Expiring Daemon because JVM heap space is exhausted

> **Task :app:compileDailyReleaseJavaWithJavac** FAILED

系统资源不足。
有关详细信息, 请参阅以下堆栈跟踪。
java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.util.EnumSet.noneOf(EnumSet.java:115)
    at com.sun.tools.javac.util.JCDiagnostic$Factory.create(JCDiagnostic.java:223)
    at com.sun.tools.javac.comp.Resolve$AbstractMethodCheck.reportMC(Resolve.java:779)
    at com.sun.tools.javac.comp.Resolve$4$2.report(Resolve.java:882)
    at com.sun.tools.javac.comp.Check.checkType(Check.java:553)
    at com.sun.tools.javac.comp.Attr$ResultInfo.check(Attr.java:482)
    at com.sun.tools.javac.comp.Resolve$MethodResultInfo.check(Resolve.java:1015)
    at com.sun.tools.javac.comp.Resolve$4.checkArg(Resolve.java:835)
    at com.sun.tools.javac.comp.Resolve$AbstractMethodCheck.argumentsAcceptable(Resolve.java:735)
    at com.sun.tools.javac.comp.Resolve$4.argumentsAcceptable(Resolve.java:844)
    at com.sun.tools.javac.comp.Resolve.rawInstantiate(Resolve.java:579)
    at com.sun.tools.javac.comp.Resolve.selectBest(Resolve.java:1446)
    at com.sun.tools.javac.comp.Resolve.findMethodInScope(Resolve.java:1633)
    at com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1704)
    at com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1677)
    at com.sun.tools.javac.comp.Resolve$14.doLookup(Resolve.java:2689)
    at com.sun.tools.javac.comp.Resolve$BasicLookupHelper.lookup(Resolve.java:3097)
    at com.sun.tools.javac.comp.Resolve.lookupMethod(Resolve.java:3348)
    at com.sun.tools.javac.comp.Resolve.resolveOperator(Resolve.java:2685)
    at com.sun.tools.javac.comp.Resolve.resolveBinaryOperator(Resolve.java:2726)
    at com.sun.tools.javac.comp.Attr.visitBinary(Attr.java:3061)
    at com.sun.tools.javac.tree.JCTree$JCBinary.accept(JCTree.java:1785)
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
    at com.sun.tools.javac.comp.Attr.visitParens(Attr.java:2986)
    at com.sun.tools.javac.tree.JCTree$JCParens.accept(JCTree.java:1661)
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
    at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:618)
    at com.sun.tools.javac.comp.Attr.visitIf(Attr.java:1581)
    at com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1269)
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
    at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:645)
    at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:661)

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDailyReleaseJavaWithJavac'.
> Compilation failed; see the compiler error output for details.</pre>

修复方案:按照箭头指示配置即可


image.png

image.png
键:GRADLE_OPTS
值:-Dorg.gradle.jvmargs=-Xms1024M -Xmx8192M -XX:PermSize=512M -XX:MaxPermSize=2048 -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
键:JAVA_OPTS
值:-XX:MaxPermSize=2048M

-jvmargs 代表后面是设置jvm的参数
-Xms 128M JVM设置最小分配的堆内存
-Xmx 512M JVM允许最大分配的堆内存,按需分配
-XX:PermSize=64M JVM设置分配最小的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
参考地址:https://stackoverflow.com/questions/14762162/how-do-i-give-jenkins-more-heap-space-when-its-running-as-a-daemon-on-ubuntu

mac 脚本无访问权限

可以把脚本直接放到当前用户目录即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335