gitlab+jenkins自动化打包IOS-jenkins配置
实现的效果如图:
- 构建界面:
- 完成效果:
功能说明:
- 根据选择的代码分支,执行构建打包
- 构建成功后根据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
,
Tips:
最好是把jenkins.war包放在tomcat中运行,这样比较方便配置开机自启动,
如果使用java命令启动jenkins,每次开机都要使用命令去启动会很麻烦
2.jenkins创建测试job
3.配置与gitlab连接,别忘记在jenkins宿主机配置gitlab的host
在Repository URL处:输入仓库地址,这里选择http方式:
添加用户名,密码
点击【保存】,执行构建,查看日志可以看到commit message,说明git已经与jenkins连接成功了
> git fetch --tags --force --progress http://git.xxxx.com/kaifa/testcase.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=
Checking out Revision 724dd42afc5ecd9b92842681cd85c2da6992ddda (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=
> git checkout -f 724dd42afc5ecd9b92842681cd85c2da6992ddda
Commit message: "aa"
First time build. Skipping changelog.
Finished: SUCCESS
另外要注意:
在Jenkins的默认配置中,clone
代码时会拉取所有历史版本的代码,而且默认的超时时限只有10分钟。这就造成在某些项目中,由于代码量本身就比较大,历史版本也比较多,再加上网络环境不是特别好,Jenkins根本没法在10分钟之内拉取完所有代码,超时后任务就会被自动终止了(错误状态码143)。
这种问题的解决方式也很简单,无非就是两种思路,要么少拉取点代码(不获取历史版本),要么提高超时时限。对应的配置在Advanced clone behaviours
中:
Shallow clone
:勾选后不获取历史版本;Timeout (in minutes) for clone and fetch operation
:配置后覆盖默认的超时时限。
4.构建-打包脚本
## !/bin/sh
## 项目名
TARGET_NAME="XXXXAPP"
## xcworkspace文件所在目录
TARGET_PATH="XXXXWorkspace/XXXXAPP"
## Scheme名
SCHEME="XXXXAPP"
##=======================
## 编译类型
BUILD_TYPE=${ENV}
## 当前目录
SORCEPATH=${WORKSPACE}
## workspace名
SPACE=${WORKSPACE}/${TARGET_PATH}/${TARGET_NAME}.xcworkspace
##xcarchive文件的存放路径
ARCHIVEPATH=$SORCEPATH/build/$SCHEME.xcarchive
## ipa文件的存放路径
EXPORTPATH=$SORCEPATH/build/$SCHEME
## ExportOptions.plist文件的存放路径
EXPORTOPTIONSPLIST=$SORCEPATH/build/ExportOptions.plist
## 导出后的ipa路径
EXPORTPATHIPA=$SORCEPATH/build/$SCHEME/$SCHEME.ipa echo -e "============First Build Clean============"
## 清理缓存
xcodebuild clean -workspace $SPACE -scheme ${SCHEME} -configuration ${BUILD_TYPE} echo -e "============Build Clean============"
## 输出关键信息
echo -e " TARGET_NAME : ${TARGET_NAME}"
echo -e " BUILD_TYPE : ${BUILD_TYPE}"
echo -e " SORCEPATH : ${SORCEPATH}"
echo -e " ARCHIVEPATH : ${ARCHIVEPATH}"
echo -e " EXPORTPATH : ${EXPORTPATH}"
echo -e " EXPORTOPTIONSPLIST : ${EXPORTOPTIONSPLIST}" echo -e "============Build Archive============" ## 导出archive包
xcodebuild archive -workspace ${SPACE} -scheme ${SCHEME} -archivePath ${ARCHIVEPATH} -configuration ${BUILD_TYPE} echo -e "============Build Archive Success============" echo -e "============Export IPA============" ## 导出IPA包
xcodebuild -exportArchive -archivePath ${ARCHIVEPATH} -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST} echo -e "============Export IPA SUCCESS============" ## 编译完成时间 20181030_0931
BUILD_DATE="$(date +'%Y%m%d_%H%M')" ## info.plist路径
PROJECT_INFOPLIST_PATH="${SORCEPATH}/${TARGET_PATH}/${TARGET_NAME}/Info.plist"
## 取版本号
BUNDLESHORTVERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${PROJECT_INFOPLIST_PATH}")
## 取build值
VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${PROJECT_INFOPLIST_PATH}")
## ipa更名规则 项目名V版本_年月日_时分
IPANAME="${TARGET_NAME}V${BUNDLESHORTVERSION}_${BUILD_DATE}.ipa"
## 更名后ipa路径
EXPORTPATHNEWIPA=$EXPORTPATH/$IPANAME echo -e "============Export end :${BUILD_DATE}============"
echo -e "============IPA Old Name: ${EXPORTPATHIPA}============"
echo -e "============IPA New Name: ${EXPORTPATHNEWIPA}============" ## IPA更名
cp $EXPORTPATHIPA $EXPORTPATHNEWIPA echo -e "============Create New Name Success============" ## 删除老IPA
##rm $EXPORTPATHIPA ##echo -e "============Delete Old Name Success============"
执行脚本,如果在执行pod update 时报错 pod: command not found
/Library/Tomcat8/temp/jenkins1548742361760571620.sh: line : pod: command not found
Build step 'Execute shell' marked build as failure
解决办法看这里:https://www.jianshu.com/p/3ef37b9538bf
解决办法是:
出现这个问题可能是因为你没有设置pod的运行路径,解决方法如下
第一步:打开Jenkins,然后在Jenkins左侧的菜单中找到 系统管理--->系统设置--->全局属性,然后找到Environment variables(中文:环境变量)并且勾选。
第二步:打开你的终端,在终端中输入echo $PATH
,终端会打印出一串字符串,几个路径,复制该路径,返回到Jenkins中
第三步:会让填写一个键值对,键默认填写PATH
,值填写你从终端复制的那个字符串,点击保存,完成,构建该项目。
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名称中包含更多的信息,例如包含当次构建的SCHEME
和CONFIGURATION
,这时我们就可以通过修改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配置的更多相关文章
- jenkins自动化构建iOS应用配置过程中遇到的问题
最近配置jenkins来自动构建iOS应用,期间遇上不少问题.在这里分享给大家,也给自己留个底,方便下次解决问题. 首先说明下基本情况,我们因为部署jenkins的机器不是Mac,所以不能安装Xcod ...
- gitlab+jenkins自动化打包APK
前置条件: 环境搭建,jenkins需要的插件看这里: gitlab+jenkins自动化打包IOS 配置思路: step1: 搭建sdk,gradle运行环境,参照: CentOS7下安装安装and ...
- Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置
最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑,特意记录下来方便有需要的人. 进入正题: 一.安装Jenkins 1.Mac上安装Jenkins 遇到到坑 因为 Jenk ...
- iOS Jenkins 自动化打包构建
前言 在测试app项目过程中,通常都是需要开发打测试包给到测试,但是无论是iOS还是Android的打包过程都是相当漫长的,频繁的回归测试需要频繁的打包,对于开发同学影响还是蛮大的.因此在这种情况下, ...
- Jenkins自动化打包(Gitlab)并上传蒲公英
整个过程详见:https://www.jianshu.com/p/91e8f571fc2b 以下是遇到的问题及解决过程 一.安装homebrew(网速很慢很慢……被墙了) /usr/bin/ruby ...
- Android Jenkins 自动化打包构建
前言 在测试app项目过程中,通常都是需要开发打测试包给到测试,但是无论是iOS还是Android的打包过程都是相当漫长的,频繁的回归测试需要频繁的打包,对于开发同学影响还是蛮大的.因此在这种情况下, ...
- iOS自动化探索(九)使用Jenkins自动化打包并发布iOS App
继前一篇: Mac环境下安装Jenkins Jenkins安装好后, 我们试着创建一个iOS自动打包并发布的任务 iOS App构建必须在MAC上面使用xcode进行,所以我们要安装下xcode集成插 ...
- Jenkins自动化打包配置
具体流程不细讲,教程很多 * 环境配置: * xmapp安装 * Jenkins.war丢到Tomcat目录中,配置Jenkins * 宿主机安装jdk,gradle,配置环境变量(在Jenkins的 ...
- 关于自动化打包部署Jenkins的使用和配置
(未写完整,待续...) 名词解释: 1.Jenkins中对svn进行操作,可通过插件和脚本两种方式进行. 插件方式 在插件管理中安装"Subversion Plug-in",即可 ...
随机推荐
- [19/05/19-星期日] CSS_css的声明和选择器
一.引言 HTML的作用是负责数据的格式展示,如果使用它来搞数据的样式,则发现样式书写出来太麻烦,不易于维护: HTML可以有效组织数据的展示,但是不同类型数据在浏览器中的分布没有办法展示. HTML ...
- 一份完整的 MySQL 开发规范,进大厂必看!
作者:听风 https://www.cnblogs.com/huchong/p/10219318.html 一.数据库命令规范 1.所有数据库对象名称必须使用小写字母并用下划线分割 2.所有数据库对象 ...
- 分布式唯一ID生成器
在应用程序中,经常需要全局唯一的ID作为数据库主键.如何生成全局唯一ID? 首先,需要确定全局唯一ID是整型还是字符串?如果是字符串,那么现有的UUID就完全满足需求,不需要额外的工作.缺点是字符串作 ...
- EF6 MySQL错误之“Specified key was too long; max key length is 767 bytes”
由于 MySQL Innodb 引擎表索引字段长度的限制为 767 字节,因此对于多字节字符集的大字段(或者多字段组合索引),创建索引会出现上面的错误. 以 utf8mb4 字符集 字符串类型字段为例 ...
- JavaScript高级笔记
# 今日内容: 1. JavaScript: 1. ECMAScript: 2. BOM: 3. DOM: 1. 事件 ...
- node开发一个接口详细步骤
最近在做后台系统改版,由于目前接口还没出来,就自己用nodejs写了个简单的接口. 我这里用的是nodejs+mysql的 这里不讲nodejs和mysql的安装.这些基础略过. 首先创建文件夹.cd ...
- .NetCore模拟Postman的BasicAuth生成Authrization
一.思路 BasicAuth 是一种简单权限,传输UserName=<userName>,Password=<password> 1.用:连接Username,Password ...
- tf.clip_by_global_norm
首先明白这个事干嘛的,在我们做求导的时候,会遇到一种情况,求导函数突然变得特别陡峭,是不是意味着下一步的进行会远远高于正常值,这个函数的意义在于,在突然变得陡峭的求导函数中,加上一些判定,如果过于陡峭 ...
- 了解Greenplum(1)
了解系列废话: 数据管理系统实现,以Greenplum作为课后实验,这里将实验报告贴出来,纯粹灌水. 1.Greenplum架构 如上图所示,GP的基本结构是单master,多slave节点,客户端连 ...
- md5sum 计算和校验文件的md5值
1. 命令功能 md5算法一般用于检查文件完整性, 2. 语法格式 md5sum [option] [file] 参数 参数说明 -b 以二进制模式读入文件 -t 以文本模式读入文件 -c 用来从 ...