Jenkins自动化打包

一、安装Jekins

  1. Download Jenkins
  2. 访问http://localhost:8080/,打开initialAdminPassword文件。获取权限,可以手动更改访问权限(文件-显示简介-访问控制)或者执行命令sudo cat 路径,复制出密码。注册账号。
  3. 安装插件:系统管理->管理插件-可选插件:Xcode integration,Credentials Plugin,
    Keychains and Provisioning Profiles Management,
    Post-Build Script Plug-in

二、Jekins配置

1、文件拷贝

  1. 将/Users/管理员用户名/Library的MobileDevice文件夹拷贝到/Users/Shared/Jenkins/Library下,否则会出现找不到描述文件的错误。
  2. 打开钥匙串程序,找到相对应的证书,选择“允许所有的应用程序访问此项目”,并存储修改。
  3. 将/Users/管理员用户名/Library/Keychains/下的login.keychain及login.keychain-db这两个文件拷贝到/Users/Shared/Jenkins/Library/Keychains文件夹下面
    注意:Mac OS 10.12以下的没有login.keychain-db这个文件,只需要拷login.keychain文件。

2、Keychains and Provisioning Profiles 配置

证书配置

]

1、Keychain和ProvisioningProfiles文件是隐藏文件,所以需要拷出来。
Keychain文件路径:/Users/管理员用户名/Library/Keychains/login.keychain
ProvisioningProfiles文件路径:/Users/管理员用户名/Library/MobileDevice/Provisioning Profiles

2、Keychain和ProvisioningProfiles文件选好后,都需要upload下。

三、创建项目

1、Jenkins+ Xcode + 蒲公英

项目配置
ps1.更新pod的命令
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd /Users/Shared/Jenkins/Home/workspace/Test 
pod install --verbose --no-repo-update

ps2.最后上传蒲公英的命令
#蒲公英上的User Key
uKey="User Key"
#蒲公英上的API Key
apiKey="API Key"

#要上传的ipa文件路径
now=$(date +"%Y.%m.%d")
IPA_PATH="$WORKSPACE/IPA/Test_${now}.ipa"

#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload

ps:有时候会出现Jenkins下的文件夹无法操作的情况,导致打包失败,遇到这种情况可以更改下Jenkins下的操作权限

1. sudo chmod -R 777 /Users/Shared/Jenkins ...
2. 输入密码。

2、Jenkins + xcodebuild命令 + 蒲公英

详解Shell脚本实现iOS自动化编译打包提交

如果不设置证书,默认是选择项目设置的证书打包

项目配置
ps1.上传命令
#"++++++++++++++更新Pod+++++++++++++"
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd /Users/Shared/Jenkins/Home/workspace/TestPack
pod install --verbose --no-repo-update

#"++++++++++++++打包iPA+++++++++++++"
# 工程名
APP_NAME="Test"

# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.plist"

#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

#日期
DATE="$(date +%Y%m%d)"

#ipa名称
IPA_NAME="${APP_NAME}_Debug_V${bundleShortVersion}_${DATE}"

#导出ipa路径
Export_PATH="${WORKSPACE}/Debug-iphoneos"

#Xcode8.3之后脚本打包需要添加配置的plist文件
ExporEt_Options_Plist="${WORKSPACE}/AdHocExportOptions.plist"
echo ${IPA_PATH}
echo "${IPA_PATH}">> ipaPath.txt
#打包生成iPa
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration 'Release' clean
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -archivePath "build/${IPA_NAME}.xcarchive" archive
#不设置证书和描述文件,默认使用项目中选择好的
#xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -archivePath "build/${IPA_NAME}.xcarchive" -configuration "$configuration"  CODE_SIGN_IDENTITY="$codeSignIdentity" PROVISIONING_PROFILE="$provisioningProfile" >> $log_path

xcodebuild  -exportArchive -archivePath "build/${IPA_NAME}.xcarchive" -exportPath "${Export_PATH}/${IPA_NAME}" -exportOptionsPlist "${ExporEt_Options_Plist}" 

#"++++++++++++++上传蒲公英的命令+++++++++++++"
#蒲公英上的User Key
uKey="74f2001d31a2b3538e437f44705f5d7d"
#蒲公英上的API Key
apiKey="082d13c3cad994244c2ff9d468972dd8"

#要上传的ipa文件路径
Upload_PATH="${Export_PATH}/${IPA_NAME}/${APP_NAME}.ipa"
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${Upload_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload

PS:xcodebuild: error: invalid option '-exportFormat'

更新到Xcode 8.3的坑

xcode8.3之后添加 exportOptionsPlistcurl,以前xcrun -sdk iphoneos PackageApplication -v "/XXX/XXX.app" -o "/XXX/XXX"命令过时。

四、上传APPStore和Automator

1、上传APPStore

用altool上传至APPStore

将上传蒲公英的命令换成上传APPStore的命令

//验证ipa
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool  --validate-app -f ${IPA_PATH} -u fangzhoujiaoyukeji@163.com -p 'FangZhou#123' -t ios --output-format xml
//上传itunsConnect
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool --upload-app -f ${IPA_PATH} -u 开发者账号@163.com -p '密码' -t ios --output-format xml

2、使用Automator创建插件

Xcode一键发布到AppStore

五、常见错误

iOS 通过Jenkins 自动构建ipa

Xcode8.2 Jenkins 集成遇到的问题

1、文件拷贝失败

Failed to copy /Users/Shared/Jenkins/Home/kpp_upload/xxx.mobileprovision to /Users/caizhuoyue/Library/MobileDevice/Provisioning Profiles/xxx.mobileprovision

解决方法:开放Library(/Users/管理员用户名/Library)文件夹写入权限

2、找不到描述文件

No profile matching '证书' found:  Xcode couldn't find a profile matching '证书'. 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.0'

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

3、schemes为空

Jenkins xcodebuild There are no schemes in workspace

Manage Schemes,设置schemes共享

4、使用pod命令时,出现pod command not found错误。

解决方法,终端输入echo $PATH,在Jenkins菜单中点击"系统管理"->"系统设置"->"全局属性",填入相应键(PATH)值(终端输出的内容)。

5、**/Frameworks/AFNetworking.framework: unknown error -1=ffffffffffffffff

出现类似这样未知错误,具体原因不知道,我重新设置下 系统管理的PATH就好了

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

推荐阅读更多精彩内容