实现的效果如图: 

  • 构建界面:

  • 完成效果:

功能说明:

  • 根据选择的代码分支,执行构建打包
  • 构建成功后根据ipa/apk生成二维码,并可在历史构建列表中展示各个版本的二维码,通过手机扫描二维码可直接安装对应版本

因为搭建平台写了一系列博文,这里作一个总结与整理

首先jenkins需要的插件:

  • build-name-setter:用于修改Build名称
  • description setter plugin:用于在修改Build描述信息,在描述信息中增加显示QRCode(二维码)
  • Build Name and Description Setter
  • Git Parameter 参数化构建分支

具体的配置:

1.MAC搭建jenkins

  • 注意:直接下载war包, 不要下载Mac OS X,

参照:MAC 安装jenkins

Tips:

最好是把jenkins.war包放在tomcat中运行,这样比较方便配置开机自启动,

如果使用java命令启动jenkins,每次开机都要使用命令去启动会很麻烦

2.jenkins创建测试job

3.配置与gitlab连接,别忘记在jenkins宿主机配置gitlab的host

在Repository URL处:输入仓库地址,这里选择http方式:

添加用户名,密码

点击【保存】,执行构建,查看日志可以看到commit message,说明git已经与jenkins连接成功了

  1. > git fetch --tags --force --progress http://git.xxxx.com/kaifa/testcase.git +refs/heads/*:refs/remotes/origin/*
  2. > git rev-parse refs/remotes/origin/master^{commit} # timeout=
  3. > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=
  4. Checking out Revision 724dd42afc5ecd9b92842681cd85c2da6992ddda (refs/remotes/origin/master)
  5. > git config core.sparsecheckout # timeout=
  6. > git checkout -f 724dd42afc5ecd9b92842681cd85c2da6992ddda
  7. Commit message: "aa"
  8. First time build. Skipping changelog.
  9. Finished: SUCCESS

另外要注意:

  在Jenkins的默认配置中,clone代码时会拉取所有历史版本的代码,而且默认的超时时限只有10分钟。这就造成在某些项目中,由于代码量本身就比较大,历史版本也比较多,再加上网络环境不是特别好,Jenkins根本没法在10分钟之内拉取完所有代码,超时后任务就会被自动终止了(错误状态码143)。

  这种问题的解决方式也很简单,无非就是两种思路,要么少拉取点代码(不获取历史版本),要么提高超时时限。对应的配置在Advanced clone behaviours中:

  • Shallow clone:勾选后不获取历史版本;
  • Timeout (in minutes) for clone and fetch operation:配置后覆盖默认的超时时限。

4.构建-打包脚本 

  1. ## !/bin/sh
  2. ## 项目名
  3. TARGET_NAME="XXXXAPP"
  4. ## xcworkspace文件所在目录
  5. TARGET_PATH="XXXXWorkspace/XXXXAPP"
  6. ## Scheme名
  7. SCHEME="XXXXAPP"
  8. ##=======================
  9. ## 编译类型
  10. BUILD_TYPE=${ENV}
  11. ## 当前目录
  12. SORCEPATH=${WORKSPACE}
  13. ## workspace名
  14. SPACE=${WORKSPACE}/${TARGET_PATH}/${TARGET_NAME}.xcworkspace
  15. ##xcarchive文件的存放路径
  16. ARCHIVEPATH=$SORCEPATH/build/$SCHEME.xcarchive
  17. ## ipa文件的存放路径
  18. EXPORTPATH=$SORCEPATH/build/$SCHEME
  19. ## ExportOptions.plist文件的存放路径
  20. EXPORTOPTIONSPLIST=$SORCEPATH/build/ExportOptions.plist
  21. ## 导出后的ipa路径
  22. EXPORTPATHIPA=$SORCEPATH/build/$SCHEME/$SCHEME.ipa
  23.  
  24. echo -e "============First Build Clean============"
  25. ## 清理缓存
  26. xcodebuild clean -workspace $SPACE -scheme ${SCHEME} -configuration ${BUILD_TYPE}
  27.  
  28. echo -e "============Build Clean============"
  29. ## 输出关键信息
  30. echo -e " TARGET_NAME : ${TARGET_NAME}"
  31. echo -e " BUILD_TYPE : ${BUILD_TYPE}"
  32. echo -e " SORCEPATH : ${SORCEPATH}"
  33. echo -e " ARCHIVEPATH : ${ARCHIVEPATH}"
  34. echo -e " EXPORTPATH : ${EXPORTPATH}"
  35. echo -e " EXPORTOPTIONSPLIST : ${EXPORTOPTIONSPLIST}"
  36.  
  37. echo -e "============Build Archive============"
  38.  
  39. ## 导出archive包
  40. xcodebuild archive -workspace ${SPACE} -scheme ${SCHEME} -archivePath ${ARCHIVEPATH} -configuration ${BUILD_TYPE}
  41.  
  42. echo -e "============Build Archive Success============"
  43.  
  44. echo -e "============Export IPA============"
  45.  
  46. ## 导出IPA包
  47. xcodebuild -exportArchive -archivePath ${ARCHIVEPATH} -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST}
  48.  
  49. echo -e "============Export IPA SUCCESS============"
  50.  
  51. ## 编译完成时间 20181030_0931
  52. BUILD_DATE="$(date +'%Y%m%d_%H%M')"
  53.  
  54. ## info.plist路径
  55. PROJECT_INFOPLIST_PATH="${SORCEPATH}/${TARGET_PATH}/${TARGET_NAME}/Info.plist"
  56. ## 取版本号
  57. BUNDLESHORTVERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${PROJECT_INFOPLIST_PATH}")
  58. ## 取build值
  59. VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${PROJECT_INFOPLIST_PATH}")
  60. ## ipa更名规则 项目名V版本_年月日_时分
  61. IPANAME="${TARGET_NAME}V${BUNDLESHORTVERSION}_${BUILD_DATE}.ipa"
  62. ## 更名后ipa路径
  63. EXPORTPATHNEWIPA=$EXPORTPATH/$IPANAME
  64.  
  65. echo -e "============Export end :${BUILD_DATE}============"
  66. echo -e "============IPA Old Name: ${EXPORTPATHIPA}============"
  67. echo -e "============IPA New Name: ${EXPORTPATHNEWIPA}============"
  68.  
  69. ## IPA更名
  70. cp $EXPORTPATHIPA $EXPORTPATHNEWIPA
  71.  
  72. echo -e "============Create New Name Success============"
  73.  
  74. ## 删除老IPA
  75. ##rm $EXPORTPATHIPA
  76.  
  77. ##echo -e "============Delete Old Name Success============"

执行脚本,如果在执行pod update 时报错 pod: command not found

  1. /Library/Tomcat8/temp/jenkins1548742361760571620.sh: line : pod: command not found
  2. Build step 'Execute shell' marked build as failure

解决办法看这里:https://www.jianshu.com/p/3ef37b9538bf

  1. 解决办法是:

出现这个问题可能是因为你没有设置pod的运行路径,解决方法如下
第一步:打开Jenkins,然后在Jenkins左侧的菜单中找到 系统管理--->系统设置--->全局属性,然后找到Environment variables(中文:环境变量)并且勾选。
第二步:打开你的终端,在终端中输入echo $PATH,终端会打印出一串字符串,几个路径,复制该路径,返回到Jenkins中
第三步:会让填写一个键值对,键默认填写PATH,值填写你从终端复制的那个字符串,点击保存,完成,构建该项目。

  1.  

 5.将ipa文件上传蒲公英

参照:

pytho脚本-上传apk至蒲公英

6.构建成功,在构建历史中展示二维码

jenkins插件set build description使用规则

7.收集编译成功物

每次完成构建后,编译生成的文件较多,但是并不是所有的文件都是我们需要的。

通常情况下,我们可能只需要其中的部分文件,例如.ipa/.app/.plist/.apk等,这时我们可以将这部分文件单独收集起来,并在构建页面中展示出来,以便在需要时进行下载。

要实现这样一个功能,需要在【Post-build Actions】栏目中新增Archive the artifacts,然后在Files to archive中通过正则表达式指定成果物文件的路径。

设置完毕后,每次构建完成后,Jenkins会在Console Output中采用设定的正则表达式进行搜索匹配,如果能成功匹配到文件,则会将文件收集起来。

8.自定义build名字

  在Build History列表中,构建任务的名称默认显示为按照build次数递增的BUILD_NUMBER。有时候我们可能想在build名称中包含更多的信息,例如包含当次构建的SCHEMECONFIGURATION,这时我们就可以通过修改BuildName实现。

  Jenkins默认不支持BuildName设置,但可通过安装build-name-setter插件进行实现。安装build-name-setter插件后,在配置页面的Build Environment栏目下会出现Set Build Name配置项,然后在Build Name中就可以通过环境变量参数来设置build名称。

  例如,要将build名称设置为上面截图中的StoreCI_Release_#130样式,就可以在Build Name中配置为${SCHEME}_${CONFIGURATION}_#${BUILD_NUMBER}

除了在Build Name中传递环境变量参数,build-name-setter还可以实现许多更加强大的自定义功能,大家可自行探索。

如果想在buildName中加入启动构建的用户名,可以参照Jenkins获取运行job的用户名

9.通过git parameter动态选择仓库中的分支进行打包

参照:

jenkins-参数化构建(三)插件:Git Parameter

https://www.cnblogs.com/zhaojingyu/p/9862443.html

遇到的问题及解决办法:

搭建jenkins:

初次打开jenkins页面一片空白的解决办法

其它配置:

JENKINS针对不同项目组对用户进行权限分配

感谢大佬:

提供了很多思路:

https://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/

gitlab+jenkins自动化打包IOS-jenkins配置的更多相关文章

  1. jenkins自动化构建iOS应用配置过程中遇到的问题

    最近配置jenkins来自动构建iOS应用,期间遇上不少问题.在这里分享给大家,也给自己留个底,方便下次解决问题. 首先说明下基本情况,我们因为部署jenkins的机器不是Mac,所以不能安装Xcod ...

  2. gitlab+jenkins自动化打包APK

    前置条件: 环境搭建,jenkins需要的插件看这里: gitlab+jenkins自动化打包IOS 配置思路: step1: 搭建sdk,gradle运行环境,参照: CentOS7下安装安装and ...

  3. Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置

    最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑,特意记录下来方便有需要的人. 进入正题: 一.安装Jenkins 1.Mac上安装Jenkins 遇到到坑 因为 Jenk ...

  4. iOS Jenkins 自动化打包构建

    前言 在测试app项目过程中,通常都是需要开发打测试包给到测试,但是无论是iOS还是Android的打包过程都是相当漫长的,频繁的回归测试需要频繁的打包,对于开发同学影响还是蛮大的.因此在这种情况下, ...

  5. Jenkins自动化打包(Gitlab)并上传蒲公英

    整个过程详见:https://www.jianshu.com/p/91e8f571fc2b 以下是遇到的问题及解决过程 一.安装homebrew(网速很慢很慢……被墙了) /usr/bin/ruby ...

  6. Android Jenkins 自动化打包构建

    前言 在测试app项目过程中,通常都是需要开发打测试包给到测试,但是无论是iOS还是Android的打包过程都是相当漫长的,频繁的回归测试需要频繁的打包,对于开发同学影响还是蛮大的.因此在这种情况下, ...

  7. iOS自动化探索(九)使用Jenkins自动化打包并发布iOS App

    继前一篇: Mac环境下安装Jenkins Jenkins安装好后, 我们试着创建一个iOS自动打包并发布的任务 iOS App构建必须在MAC上面使用xcode进行,所以我们要安装下xcode集成插 ...

  8. Jenkins自动化打包配置

    具体流程不细讲,教程很多 * 环境配置: * xmapp安装 * Jenkins.war丢到Tomcat目录中,配置Jenkins * 宿主机安装jdk,gradle,配置环境变量(在Jenkins的 ...

  9. 关于自动化打包部署Jenkins的使用和配置

    (未写完整,待续...) 名词解释: 1.Jenkins中对svn进行操作,可通过插件和脚本两种方式进行. 插件方式 在插件管理中安装"Subversion Plug-in",即可 ...

随机推荐

  1. SQL server 2008r2 file is corrupt

    下载的SQLManagement studio有问题,重新下载一遍后再安装就好了.安装顺序没问题. 在卸载SQL Server开始——运行:输入regedit 进入注册表编辑器,进入之后执行下列操作: ...

  2. pycharm中的Terminal 中无法使用git的问题

    1.先找到git的安装路径,建议使用Everything工具 2.打开pycharm中的setting > tools > Terminal 3.把git的安装路径加上启动文件 bash. ...

  3. mysql 多表查询 以及 concat 、concat_ws和 group_concat

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返 ...

  4. weight (搜索对象的选取)

    #10249. 「一本通 1.3 例 5」weight [题目描述] 已知原数列 $a_1,a_2,\cdots,a_n$​​ 中的前 1项,前 2 项,前3项, $\cdots$ ,前 n 项的和, ...

  5. ORACLE之字符集修改(10g)

    当从oracle服务器将数据导出成dmp文件后,再导入到本地的oracle数据库时,出现: IMP-00019: 由于 ORACLE 错误 12899 而拒绝行 IMP-00003: 遇到 ORACL ...

  6. redis-Nosql

    Nosql: CAP:C(Consistency):强一致性.A(Availability):可用性.P(Partitio Tolerance):分区容错性 CAP 理论的核心是: 一个分布式系统,不 ...

  7. 点击按钮时,显示不同的div内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. python特殊的类属性

    类C的特殊属性: C.__name__ 类C的名字 C.__doc__ 类C文档字符串 C.__bases__ 类C所有父类的元组 C.__dict__ 类C的属性 C.__module__ 类C所在 ...

  9. 编译安装github上的kafka_exporter项目

    本文介绍的kafka_exporter是prometheus监控系统中针对kafka的一款监控插件,要使用这个监控插件,kafka的版本需要满足 0.10.1.0 及以上. 项目的github地址:h ...

  10. 基于impi zabbix监控r720 测试过程

    1.F2进入服务器bios 修改network  使这台服务器能够被远程访问. 2.在远程的centos 7 服务器上安装  impitool工具包 #ipmitool -I lanplus -H X ...