java git打包iOS_懒人做iOS系列之jenkins+git+fir打包(xCode9)

本文介绍了如何使用Jenkins自动化打包iOS应用,包括安装Jenkins、配置Git、安装Xcode插件、设置构建触发器、构建过程以及上传到FIR的过程。特别提到了在Xcode9中解决打包报错的问题,并分享了参数化构建以提高自动化程度。
摘要由CSDN通过智能技术生成

2017.09.28更新:

关于xcode9 升级后,关于打包报错的修复:

Error Domain=IDEProvisioningErrorDomain Code=9 ""Dandanjia.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="Dandanjia.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}

** EXPORT FAILED **

具体解决在 第四步,新建构建项目  5.构建 中

2017.08.24更新:

有朋友说post build script plugin 链接失效了,贴个网盘吧

链接: https://pan.baidu.com/s/1gfkshSB 密码: pdua

本人处女文章就奉献在这了,我的第一次啊。。。。。。

做人嘛就得懒,只有你想懒的时候才能想出懒人解决问题的方法。最近真是被打包搞烦了,因为本人特别懒,连切个分支打个包这么简单的活都不想干,所以找到了Jenkins这个神器。真是懒人必备神器,妈妈再也不用担心我同时为多人打包了。废话不多说,开始教程。

网上也是先找了一些教程,但多多少少还是遇到了一些坑。所以想把自己整个流程写在这里吧。

第一步,安装Jenkins

两种方法,1.下载安装包,2.命令行

推荐命令行,因为安装包直接运行有可能什么反应都没有,命令行起码还有一些输出信息方便找问题。

方法1:

我的版本是2.60.2

ac1de2cb95fa

1

ac1de2cb95fa

2

ac1de2cb95fa

3

运行Jenkins:open /Applications/Jenkins/Jenkins.war

ps:我本着省事原则一开始用的方法一,但是后来发现缺少java,就先安装了brew,然后又安装了java

安装Java环境:

brew cask install java

方法2:

安装 home-brew(安装指导)

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 Jenkins

$ brew install jenkins

运行 Jenkins

$ jenkins

ps:这里可能提示你先安装java,安装完了java,接着安装jenkins

安装总结:这里因为我是本地有其他服务环境所以占用了8080端口,所以运行jenkins的时候提示我端口占用,解决方法在这里:

java -jar 路径 --httpPort=端口号

我这里用的是方法一安装的路径,没用命令行安装的Jenkins,命令行只是确保安装了Jenkins需要的必要环境。

所以我的命令如下:java -jar /Applications/Jenkins/Jenkins.war --httpPort=8787

具体帖子参考:

第二步,运行并使用Jenkins

1.浏览器输入:http://localhost:8787/(我的是8787,没占用应该是8080)

初始化的图忘截取了。。。反正大概的意思就是输入一个从命令行获取的密码,随时去看一下命令行就对了,然后把这个一长串的密码记在小本本上,以后可能会用。然后就是自定义插件还是系统默认插件,当然选择默认插件,插件后续还能改。然后就进入了下图:

ac1de2cb95fa

1

ps:恭喜恭喜,离成功只剩下一大步了。

第三步,安装插件和配置

系统管理->插件管理

ac1de2cb95fa

1

我们要用到的插件

1.Xcode integration(xcode打包用)

2.Git plugin(git管理,svn类似)

3.Post-Build Script Plug-in(用来构建ipa后执行脚本传到fir或其它平台的)

4.github plugin(这个github的我应该没用到)

多说一句,在某个版本之后Post-Build Script Plug-in这个插件被下架了,我是废了好大劲找到了

贴个地址:(地址无效可以私信我)

这个安装方式比较特殊:系统管理-》插件管理 里面的高级选项卡 下的上传插件,选择hpi即可。

第四步,新建构建项目

前戏刚刚结束,这才是真正的开始,慢慢享受。

构建分6个块:

1.General

这部分主要就是对一些基本信息填写,项目名称,描述基本选择,我这里选项都没选,直接上图,

ac1de2cb95fa

1

2.源码管理

这部分主要是从哪获取代码,SVN或者GIT,这里我是GIT

输入GIT仓库地址,

然后选择一个认证(credentials),

然后选择分支

ac1de2cb95fa

2

这里划重点:(看文字和下图3)

这里重点说一下credentials,这个不是随便建个用户名就行的,是要和当初配置GIT一样,正常应该是SSH的,

下面图里选择SSH Username with privatekey

Username应该不是随便添的,反正我是GIT的账号名字

PrivateKey就是在ssh目录下获取的,目录是~/.ssh/id_rsa,把中间一段复制进来

Passphprase就是当时生成PrivateKey时的密码,如果不填,稍后拉分支代码时会在命令行提示Enter passphrase for key。

ac1de2cb95fa

3

PS:到这里保存完了,构建项目正常应该可以拉到代码了。(保存返回上个页面点击立即构建)

但这里肯能会有个小问题,就是10分钟超时,如果项目过大,10分钟拉不下来就超时失败了,看下错误信息如果timeout,那么可以这么改,在图2,源码管理选项卡中,点击“add”,点击 "Advanced clone behaviours",然后设置Timeout (in minutes) for clone and fetch operation单位分钟。

3.构建触发器

说明:这个可以根据需求来设置或不设置

这里在网上粘了一段关于pull scm时间设置的:This field followsthesyntaxofcron (withminor differences). Specifically,eachlineconsistsof5fields separatedbyTABorwhitespace:

MINUTE HOUR DOM MONTH DOW

MINUTE Minuteswithinthehour (0-59)

HOUR The houroftheday (0-23)

DOM The dayofthemonth (1-31)

MONTH The month (1-12)

DOW The dayoftheweek (0-7) where0and7are Sunday.

To specify multiple valuesforonefield,thefollowing operators are available. Intheorderofprecedence,

*'*'can be usedtospecify all valid values.

*'M-N'can be usedtospecifyarange, suchas"1-5"*'M-N/X'or'*/X'can be usedtospecify skipsofX''svaluethroughtherange, suchas"*/15"intheMINUTE fieldfor"0,15,30,45"and"1-6/2"for"1,3,5"*'A,B,...,Z'can be usedtospecify multiple values, suchas"0,30"or"1,3,5"Emptylinesandlinesthat startwith'#'will be ignoredascomments.

In addition, @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly are supported.

举两个例子:// every minute** ** *

// every 5 mins past the hour5* ** *

ac1de2cb95fa

4

4.构建环境

我没做什么配置。。。

5.构建

如果是xcode9 请看一 否则 请看二

一 :xcode9版本

构建点增加构建步骤,选excute shell

然后增加一段打包脚本:#!/bin/bash -l

SHCEME=xxxxxxx

CONFIGURATION=Debug

WORKSPACE_PATH=${WORKSPACE}/xxxx.xcworkspace

#PROFILE_NAME="xxxx adhoc"

#CODE_SIGN="iPhone Distribution: xxx xxx (xxxxxxxx)"

EXPORT_OPTIONS=${WORKSPACE}/ExportOptions.plist

ArchivePath=${WORKSPACE}/build/xxxxx.xcarchive

PacktName=${WORKSPACE}/build/xxxxx.ipa

#CODE_SIGN_IDENTITY="$CODE_SIGN" PROVISIONING_PROFILE_SPECIFIER="$PROFILE_NAME"

#xcodebuild clean -project xxxxx.xcodeproj -scheme $SHCEME -configuration $CONFIGURATION -alltargets

xcodebuild archive -workspace ${WORKSPACE_PATH} -scheme ${SHCEME} -configuration ${CONFIGURATION} -sdk iphoneos -archivePath ${ArchivePath}

xcodebuild -exportArchive -archivePath ${ArchivePath} -exportPath ${PacktName} -exportOptionsPlist ${EXPORT_OPTIONS}

重点在于ExportOptions.plist是要自己放在指定目录里的,否则就会报错。

这个文件可以自己archive 然后export一个,也可以照着下面图做一个

ac1de2cb95fa

1

二:xcode8.3.3及以下

Target与Xcode项目中Target名字对应

Clean before build 设置为YES

Configuration Release的时候Archive

.ipa filename pattern 随便起个名字不带后缀

Outout directory 为ipa的输出路径,我这里是${WORKSPACE}/build/

这里说下${WORKSPACE}这个环境变量:

我这里代表的是:/Users/用户名/.jenkins/workspace

ac1de2cb95fa

5

ac1de2cb95fa

6

上图的Team ID在下图这里找到

ac1de2cb95fa

7

PS:如果使用了cocoapods,需要配置Advanced Xcode build options

Workspace File(不用加.xcworkspace)

xcode workspace file的路径:

我这里的绝对路径是:/Users/用户名/.jenkins/workspace/build_ipa/test.workspace

build_ipa是上面填写的项目名称,所以我这里填写test就可以了

ac1de2cb95fa

8

以上保存,然后构建正常应该可以生成ipa了。现在还差最后一步,传fir或者做别的事情。

6.构建后操作

上传fir:

1)fir插件

这个我用了,但是一直报错:Can not found mapping or dysm file,谁成功了,说下咋弄的,谢啦。

安装完了,构建后操作会有upload to fir:

ac1de2cb95fa

9

2)执行脚本上传

执行脚本之前需要安装fir上传用的命令:sudo gem install -n /usr/local/bin fir-cli --no-ri --no-rdoc

上面的命令来自 fir.im 的工具 fir-cli,这是他们的官方使用说明官方工具 fir-cli 使用说明

还记得上面装的Post-Build Script Plug-in插件么,这次派上用场了,

点击add generic script,然后content里输入#!/bin/sh

fir p ipa路径 -T fir的token -Q

我这里的ipa路径是./Build/xxx.ipa

ac1de2cb95fa

10

到这里应该就可以完美的构建并上传到fir上了。

参考文章:

2017.09.01更新:

用了一段时间发现,虽然根据教程弄完方便多了,但是因为懒嘛,总想着更自动化,所以发现了参数化构建,让我们变得更懒吧!下面说说参数构建:

ac1de2cb95fa

参数构建1

1.配置工程:

General下选中 参数化构建过程,然后点击下面添加参数,里面有很多选项,我这里选的是String Parameter,更多的等我研究一下,目标是没有copy 和 paste。但有参数构建已经很方便了目前。

这里说个题外话,如果有朋友关心如何通过Develop和Release来控制测试服务器和线上服务器的话,请先参考一篇文章www.jianshu.com/p/51a2bbe877aa

其实就是通过类似ifdef(DEBUG)或者ifdef(RELEASE)来控制的,而Develop和Release和就是环境参数,不懂的在来问我吧。

ac1de2cb95fa

参数构建2

2.使用添加的变量:

就是在要用到的地方写 ${branch}

branch是变量名,定义了什么就用什么

3.用参数构建:

ac1de2cb95fa

参数构建3

ac1de2cb95fa

参数构建4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值