Jenkins自动化ipa打包

Jenkins是个比较方便持续集成的工具,简单记录一下利用Jenkin拉取SVN的iOS代码,并且打包上传到蒲公英(fir.im类似)的过程。安卓只需要安装对应的插件就可以。可以实现定时打包发布任务,方便自动化管理。考虑到现在代码基本往Git上迁移,在第八步给出快捷迁移SVN代码到Git的方法。

一、安装Jenkins
安装Jenkins.png

下载pkg文件

安装后会自动打开http://localhost:8080
第一次的初始密码在initialAdminPassword文件中
/Users/Shared/Jenkins/Home/secrets/initialAdminPassword

initialAdminPassword.png

也可以使用Homebrew安装
brew install jenkins

image.png

$ brew update && brew outdated jenkins
$ brew cask install java
$ ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
$ sudo cp -fv /usr/local/opt/jenkins/*.plist /Library/LaunchDaemons
$ sudo chown `whoami` /Library/LaunchDaemons/homebrew.mxcl.jenkins.plist

参考installing-jenkins-os-x-homebrew

二、选择安装插件
安装插件.png
2.1 需要安装的插件:
  1. Xcode integration
  2. Keychains and Provisioning Profiles Management

安装完成后我们重启下jenkins,重新加载下插件。可以滑到最底下勾选重启,或者也可以在地址栏输入http://localhost:8080/restart
重启之后应该要输入用户名和密码,把刚刚注册的用户名密码输入进去。还有一个重要的步骤,我们先给Jenkins用户管理员的权限,避免后续的访问问题。系统偏好设置->用户与群组->点开锁,然后在Jenkins用户下勾选“允许用户管理这台电脑”。到这步最好给Jenkins用户设置一个密码,便于后期检查是否Jenkins配置错误或者是检查代码错误。

三、创建一个item
创建Item.png
四、设置基本配置
基本配置.png
五、配置SVN
配置SVN.png
5.1 连接SVN代码库
连接SVN.png
六、设置打包的签名

这里需要打开 Keychains插件
Keychains and Provisioning Profiles Management
上传login.keychain文件,证书和对应的profile文件
login.keychain文件路径:

~/Library/Keychains

其中login.keychain-db可以改成login.keychain,然后上传


image.png

如果是用Pod管理的,需要打开Scheme共享:


image.png

没有打开共享的路径:
$ /Users/developer/Library/Keychains/login.keychain
我这边是用Pod管理的,打开Scheme共享的路径:
$ /Users/Shared/Jenkins/Library/Keychains/login.keychain

login.keychain文件路径.png

在Jenkins的Xcode模板配置如下:
通用路径:
${HOME}/Library/Keychains/login.keychain

image.png

image.png
Keychains.png
构建环境..png
6.1 证书

Keychain password对应的密码可以在钥匙串中查看:

password对应的密码.png
6.2 描述文件Profiles

Provisioning Profiles文件放到Jenkins/Library/MobileDeviece/Provision Profiles文件夹中

Provision Profiles.png

然后配置签名和钥匙串的选项

签名和钥匙串.png
6.3 设置Xcode integration面板
Xcode integration.png
七、上传到蒲公英

脚本代码:

curl -F "file=@${WORKSPACE}/build/ipa/${JOB_NAME}@${VERSION}@${BUILD_DATE}.ipa"
 -F "uKey=uKey" -F "_api_key=_api_key" https://www.pgyer.com/apiv1/app/upload

注:对于Cocoapods项目,需要设置schemesShared,不然可能因为找不到scheme报错

Scheme_Error.png

share.png

注意点

1、Jenkins 安装成功后,会创建一个Jenkins用户,而Jenkins的工作区间默认是在/用户/共享/Jenkins/Home/jobs目录下,可以用Finder-->前往进入。
2、Jenkins目录下的文件夹的读写权限只对Jenkins用户开放,所以后面apple证书等必须在Jenkins用户下安装,项目的ipa导出也得在Jenkins用户下操作。(或者用管理员权限修改该目录针对用户的权限)
3、Jenkins的使用是每一个用户都可以使用,所以有可能导致构建版本的时候报错,还是老老实实在Jenkins用户下操作吧。


常用命令
1)我们先把jenkins停掉,执行:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
3.第三个坑:打包iOS有pod的项目,shell执行pod install时,提示pod command not found,这个需要在shell第一行加上 bin/bash -l 就行了,所以最终是这样:

!/bin/bash -l
export LANG=en_US.UTF-8
pod install --verbose --no-repo-update
  1. 第四个坑:有pod的项目可能提示schema找不到的问题,需要用xcode打开一次.xcworkspace就好了,或者在shell pod install之后下加上 open x.xcworkspace

常见错误

1.Cocoapods打包问题Jenkins:”ResourceRules.plist: cannot read resources” error after Xcode 6.1

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements, 
resource-rules --sign iPhone Distribution: Certificate--resource-rules=/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/ctBXHIqC3V/Payload/ProjectName
.app/ResourceRules.plist --entitlements 

/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/ctBXHIqC3V/entitlements_plistUx80j3Iz 
/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/ctBXHIqC3V/Payload/ProjectName.app failed with error 1.
 Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!
Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!
/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/ctBXHIqC3V/Payload/ProjectName.app/ResourceRules.plist: cannot read resources

解决方法:
Custom xcodebuild arguments处填入:
CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist

ResourceRules.jpg

错误2 :
Code Sign error: No matching provisioning profile found: Your build settings specify a provisioning profile with the UUID “dc5a6f0d-5d0e-4680-9d07-248d78b4d576”, however, no such provisioning profile was found.

Profile_Error.png

解决方法:
检查后发现SVN上的Code Sign配置并没有和本地的一致,确认后,提交SVN后解决

错误3 :Cocoapods打包

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign iPhone Distribution: Certificate--resource-rules=/var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/vDWiCo9Pi6/Payload/ProjectName.app/ResourceRules.plist 
--entitlements /var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/vDWiCo9Pi6/entitlements_plistUcV_4_yn /var/folders/ph/2y4lb27j1zx6lcp3htvhnlbm000087/T/vDWiCo9Pi6/Payload/ProjectName.app failed with error 1. Output: Warning: usage of
 --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!

解决方法:
步骤1
nomadshenzhen

Snip20170120_7.png

步骤2
--resource-rules has been deprecated in mac os x >= 10.10

在Xcode Building Setting的Code Signing Resource Rules Path 中添加
$(SDKROOT)/ResourceRules.plist

ResourceRules.png

错误4: xcodebuild: error: 'APP.xcworkspace' does not exist
Choose Product > Scheme > Manage Schemes.
Share your scheme:

  1. 缺少scheme

xcodebuild: error: The project named “Foo” does not contain a scheme named “Bar”. The “-list” option can be used to find the names of the schemes in the project.

解决办法:
The root cause is that the default behavior of Schemes is to keep schemes ‘private’ until they are specifically marked as shared. In the case of a command-line initiated build, the Xcode UI never runs and the xcoderun tool doesn’t have its own cache of Schemes to work with.
To your schema be visible for command-line build you must mark it as a shared scheme.

Choose Scheme > Manage Schemes (from the Product Menu).
Ensure the ‘Shared’ box is checked for that scheme
A new .xcscheme file has been created in your project at
WorkspaceName.xcworkspace/xcshareddata/xcschemes.
Commit this file to your repository

八、SVN代码迁移到GIt

方法:
使用Git命令,把SVN上的代码和提交记录clone到本地,然后提交到Git上。

主要命令

git svn clone svn://xxxxxxx/${ProjectName}
 --authors-file=user.txt --no-metadata ${ProjectName}
git svn clone svn://xxxxxxx/xxxxxx/xxxxx/trunk/xxxxxx 
--authors-file=user.txt --no-metadata ProjectName
8.1 建立User更换表

格式:
SVN账户名 = Git账户名<Git邮箱名>
最后,在Git建立项目仓库, push代码到Git仓库

九、卸载Jenkins

在终端中执行:

'/Library/Application Support/Jenkins/Uninstall.command'

如果老版本命令无效

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
sudo rm /Library/LaunchDaemons/org.jenkins-ci.plist
sudo rm -rf /Applications/Jenkins "/Library/Application Support/Jenkins" /Library/Documentation/Jenkins

如果需要删除已经编译的任务:

sudo rm -rf /Users/Shared/Jenkins

注意

jenkins是由jar启动的,需要java的最新版本
Mac: 通过系统设置中的java图标启动java面板,查看java的版本,

image.png

需要升级java环境

image.png

———————— 2017-08-07 ——————

今天重新安装Jenkins时,在官网下载的Jenkins2.60,安装后发现一直访问不了默认的http://localhost:8080,后面发现Jenkins2.60需要Java8环境,本地mac还是Java7,但是在jav设置面板升级到8后,貌似制定位置还是7,一直访问不了,后面干脆用Homebrew安装JenkinsJava8,然后制定端口8080
brew cask install java
brew install jenkins
java -jar jenkins.war --httpPort=8080

使用Homebrew安装Jenkins

在终端输入jenkins restart就可以启动jenkins访问8080了。

参考

  1. 手把手教你利用Jenkins持续集成iOS项目
  2. Mac下Jenkins+SVN+Xcode构建持续导出环境
  3. mac jenkins iOS持续集成中的坑
  4. nomadshenzhen
  5. Jenkins:”ResourceRules.plist: cannot read resources” error after Xcode 6.1
  6. --resource-rules has been deprecated in mac os x >= 10.10
  7. installing-jenkins-os-x-homebrew
  8. IOS 自动化部署 - 最新Jenkins + git +cocoapods + fir - 简书
  9. macos - How to uninstall Jenkins? - Stack Overflow
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容