Xcode9+Jenkins+蒲公英自动化打包!

前言

Jenkins就不过多介绍了,本人实现Xcode9+Jenkins+蒲公英自动化打包踩过了N多个坑,也构建了N多次才成功!!!!!
因此本文记录一下, 防止以后在入坑😂😂😂
~~好了,不多赘述了,直接进入正题

Jenkins环境下载及其配置

Jenkins运行需要Java环境,Java环境下载

1. Jenkins下载
2. 安装成功后,在浏览器中输入localhost:8080打开jenkins

image.png

3. 进入对于路径获取密码。secrets没有读取权限,需要开启权限,进行获取。
image.png

1:开启管理权限
2:开启对应用户读与写的权限
3:选择【应用到包含的项目...】
4:点击确定

4. 使用推荐安装,进行插件安装。

image.png

5. 如果进入的是离线模式,可以使用手动安装插件的方式。Jenkins插件地址。下载成功后,在【系统管理】-【管理插件】-【高级】进行上传插件。

image.png

如果可选插件里获取不到插件,可以尝试将站点替换成http://mirror.xmission.com/jenkins/updates/current/update-center.json进行尝试,如果还不可行,只能进行自行下载,然后上传的方式了。

6. 在【系统管理】-【管理插件】-【可选插件】安装所需插件"GitLab Plugin","Gitlab Hook Plugin","keychains and Provisioning Profiles Management","Git Parameter Plug-In"

7. 点击新建项目,输入项目名称,选择“构建一个自由风格的软件项目”,最后点击确认。

image.png

8. 在General中,勾选【参数化构建过程】-【添加参数】-【Git Parameter】,这里是在获取代码的前一步,进行代码分支选择。
image.png

Name:branch //参数名称
Description:分支选择 //描述
Parameter Type:Branch or Tag

9. 为本机添加SSH keys,并通过SHH keys进行连接远程仓库。为GitLab帐号添加SSH keys并连接GitLab

image.png

Repository URL    :填写远程仓库的SSH地址
Credentials       :点击右侧Add,如下图所示,填写SSH信息,然后点击保存。
                   (注:这里添加的SSH keys为私钥,并且将私钥内容全部复制过来)
Branches to build :填写第8步中的参数名称,我这里为branch
image.png

最后点击add。如果正常的配置正确的话,会出现红色的警告,就说明Jenkins还没有连通GitLab或者SVN,那就请再检查SSH Key是否配置正确。

10. 证书描述文件配置。
在Xcode中不要选择Automatically manage signing,需要手动配置描述文件,如下图所示。

image.png

image.png

注意:需要打包上传到蒲公英,需要打的是Adhoc的包,所有需要Adhoc的描述文件,这需要到苹果开发者中心进行生成下载。
这里只使用的Jenkins打包上传蒲公英,如果需要Jenkins自动打包上传AppStore,还需要生成App Store的描述文件。我这里两种Distribution都生成了,以免不时之需。

image.png

11. 配置keychains and Provisioning Profiles Management。
保存当前步骤,进入到Jenkins的系统管理,进入到keychains and Provisioning Profiles Management

image.png

进入到/Users/管理员用户名/Library/keychains文件目录下,将login.keychain文件拷贝到桌面,如果为macOS 10.13以上的系统,只有login.keychain-db文件,需要将login.keychain-db文件拷贝到桌面,将login.keychain-db文件重命名为login.keychain文件。点击【选择文件】,选择桌面的login.keychain文件,点击Upload,如下图所示。

image.png

接着上传描述文件。


image.png

Provisioning Profiles Directory Path

/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles // 如此填写即可。

点击Save进行保存。接下来回到项目的配置,在【构建环境】中勾选Keychains and Code Signing Identities与Mobile Provisioning Profiles,如图所示。


image.png

如果红框内容没有自动显示,点击【保存】,再重新进入到配置,就会自动显示了。

12.添加ExportOptions.plist问价。我们都知道,Xcode9之后,打出来的包不光ipa文件,还顺便生成配置文件,log等。所有我们想要用Xcode9通过xcodebuild生成ipa包,ExportOptions.plist文件必不可少,我将ExportOptions.plist放到了工程了同级目录下。ExportOptions.plist文件,我们可以通过Xcode打个ipa包出来,直接用生成的ExportOptions.plist就可以。
将ExportOptions.plist文件放到项目的根目录下。

image.png

image.png

13.在【构建】处,添加【增加构建步骤】选择【Execute shell】,然后进行编写脚本。

#!/bin/bash

#设置超时
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=300

#计时
SECONDS=0

#工程绝对路径  
project_path=$(cd `dirname $0`; pwd)  
  
#工程名  
project_name= XXX  
  
#scheme名 
scheme_name= XXX  

#包类型
configuration="Adhoc"
  
#打包模式 Debug/Release  
development_mode=Release  
  
#build文件夹路径  
build_path=${project_path}/build  
  
#plist文件所在路径  
exportOptionsPlistPath=${project_path}/ExportOptions.plist  
  
#导出.ipa文件所在路径  
exportIpaPath=${project_path}/IPADir/${development_mode}  

echo ''
echo '///-----------'  
echo '/// 正在清理工程'  
echo '///-----------'  
xcodebuild clean -configuration ${development_mode} -quiet  || exit 
echo ''
  
echo ''
echo '///--------'  
echo '/// 清理完成'  
echo '///--------'  
echo ''  

echo ''
echo '///-----------'  
echo '/// 正在编译工程:'${development_mode}  
echo '///-----------'  
xcodebuild archive -workspace ${project_path}/${project_name}.xcworkspace -scheme ${scheme_name} -configuration ${development_mode} -archivePath ${build_path}/${project_name}.xcarchive -quiet  || exit 
echo ''

echo ''
echo '///--------'  
echo '/// 编译完成'  
echo '///--------'  
echo ''  

echo ''
echo '///----------'  
echo '/// 开始ipa打包'  
echo '///----------'  

xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive -exportPath ${exportIpaPath}  -exportOptionsPlist ${exportOptionsPlistPath}   -allowProvisioningUpdates
echo ''
  
if [ -e $exportIpaPath/$scheme_name.ipa ];  
    then  
    echo '///----------'  
    echo '/// ipa包已导出'  
    echo '///----------'  
    open $exportIpaPath  
    else  
    echo '///-------------'  
    echo '/// ipa包导出失败 '  
    echo '///-------------'  
fi  

echo ''
echo '///------------'  
echo '/// 打包ipa完成  '  
echo '///-----------='  
echo ''  

echo ''
echo "++++++++++ipa文件所在路径: ${exportIpaPath}"
echo ''

echo ''
echo "开始上传到蒲公英"   
#蒲公英apiKey  
MY_PGY_API_K=XXX  
#蒲公英uKey  
MY_PGY_UK=XXX
  
curl -F "file=@${exportIpaPath}/${scheme_name}.ipa" -F "uKey=${MY_PGY_UK}" -F "_api_key=${MY_PGY_API_K}" https://qiniu-storage.pgyer.com/apiv1/app/upload

#输出总用时
echo ''
echo "===Finished. Total time: ${SECONDS}s==="

这里给出了我现在使用的shell脚本,包含了【ipa包生成】【上传蒲公英】。
其中的XXX为需要替换的地方。
蒲公英的ApiKey与UserKey在蒲公英的【账户设置】-【API信息即可查看】。

这里建议将shell脚本放到工程的根目录下,修改脚本直接提交代码就好,就不需要重新配置Jenkins了。

14.接下来进行构建项目。如图所示,构建成功。

image.png

15.新版本上传成功,【邮件通知】【手机短信通知】【微信信息通知】。这里使用的蒲公英的更新通知功能,前两项通知需要收费的,只有5次免费的机会。所以我们使用了【微信消息通知】。

【邮件通知】【手机短信通知】文档
【微信信息通知】文档

常见问题

问题1:

No profiles for 'com.xxxxxxx.xxxxx' were found:  Xcode couldn't find a 
provisioning profile matching 'com.xxxxxxx.xxxxx'.
Code signing is required for product type 'Application' in SDK 'iOS 10.3'

将 /Users/管理员用户名/Library 的 MobileDevice 文件夹拷贝到 /Users/Shared/Jenkins/Library 下面

问题2:

No iOS profile matching 'xxxxxxxxxxxxxxxxxxxDistribution' found:  Xcode couldn't find a profile 
matching 'xxxxxxxxxxxxxxxxxxxDistribution'. Install the profile (by dragging and dropping it onto 
Xcode's dock item) or select a different one in the General tab of the target editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.3'

1.用 Xcode 打开 iOS 项目,在 【TARGETS】 - 【General】 中不勾选Automatically manage signing
2.如图配置开发证书:


1498160-f0488c72ec472bba.png

1498160-f3348400e102cb77.png

3.配置完证书之后,需提交代码到 Git 远程仓库,确保 Jenkins 构建时能获取最新的证书配置
4.还要确保已经将 /Users/管理员用户名/Library 的 MobileDevice 文件夹拷贝到了 /Users/Shared/Jenkins/Library 下面

问题3:
报errSecInternalComponent错误, 如图所示

1511525251160_.pic_hd.jpg

这个问题困扰了我很长的时间,在网上搜索造成此问题的原因是
The error comes from a mismatch in the provisioning profile setup and the certificates and the bundle id. Make sure that your PP, bundle id, and certificates are setup correctly in the and assigned correctly in itunes connect and in app.
按照解决办法,重启电脑,但是我并没有解决该问题。
最终,我将Jenkins全部删除,重新配置了一遍,此问题解决了。

2018-6-26号更新:
重新搭建Jenkins又遇到了此问题, 经过调研发现,根本原因是Jenkins,ssh方式到slave机上,默认是没有账户的,但是访问钥匙串要求必须有用户身份,所以添加一步输入密码解锁钥匙串,可以给Jenkins一个用户身份。
build步骤前添加一步解锁钥匙串。

security unlock-keychain -p "管理员密码" "login.keychain-db的路径"

如图所示:

image.png

最后, 问题解决~~~

~
~
~

下一文中,会讲述App配置多环境变量,结合Jenkins自动化打包,测试妹子想打什么环境的包就打什么环境的包。

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

推荐阅读更多精彩内容