Mac下Jenkins打包IPA上传蒲公英

1.前言

这是一篇通过无数次踩坑后成功进行的总结。。。希望能帮助新手们快速上手。

2.正文

配置JDK环境

安装前确认已经安装好JDK1.8版本下载地址,因为最新的Jenkins最高只支持1.8版本,如果当前安装过高版本的,需要安装完1.8的进行配置。

image.png
image.png

终端执行

$ open ~/.bash_profile

结尾另起一行添加

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk[对应的版本].jdk/Contents/Home

下载Jenkins文件&安装

通过官网下载mac版本的pkg文件,然后进行默认选项的安装。

image.png
image.png

Jenkins配置

安装完成后浏览器会默认打开http://localhost:8080,然后首次会进入输入管理员密码界面

image.png

通过前往文件夹工具无法进入到

/Users/Shared/Jenkins/Home/secrets/initialAdminPassword
image.png

是因为secrets有访问权限,我们可以先进入

/Users/Shared/Jenkins/Home

然后在secrets目录上 右键-》显示简介,后点击右下角的小锁头,输入登录密码后,点击共享与权限一栏的【everyone】右侧的无访问权限,选择【读与写】后,然后点击底部齿轮选择【应用到包含项目】最后关闭锁头。

image.png
image.png
image.png

打开【/Users/Shared/Jenkins/Home/secrets/initialAdminPassword】文件复制密码后在jenkins登录界面粘贴后继续。

解决【该Jenkins实例似乎已离线】

此时界面会提示【该Jenkins实例似乎已离线】,解决方案:

另开启新界面,进入【http://localhost:8080/pluginManager/advanced】界面,将Update Site地址从https改为http后提交,然后点击右下角的Check now,浏览器输入http://localhost:8080/restart 重启jenkins即可解决。

image.png

也可以使用终端命令操作

启动:sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
停止:sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

重启完重新输入http://localhost:8080,按顺序操作即可,进入到【自定义Jenkins
】,点击安装推荐插件后耐心等待即可。

image.png

创建用户

创建后点击保存并完成,实例配置使用默认配置即可,直接点击保存并完成,至此配置完毕,点击开始使用Jenkins,如果界面没反应,可以使用localhost:8080/restart重启jenkins后登录。

image.png

下载打包插件

主界面菜单点击【系统管理】-》【插件管理】

image.png

安装Keychains and Provisioning Profiles Management和Xcode integration

点击【可选插件】-》过滤里输入【keychains】后安装一栏选上【对号】,后点击直接安装,等待安装完毕后,相同方式安装【Xcode integration】,安装完成后重启jenkins。

image.png

配置Keychains and Provisioning Profiles

主界面菜单点击【系统管理】-》【Keychains and Provisioning Profiles Management】(插件安装成功后才有)

前往【/Users/管理员用户名/Library/Keychains/】,将【login.keychain-db】文件复制一份改名为【login.keychain】,前往【/Users/Shared/Jenkins】创建【/Library/Keychains】,将这两个文件拷到下面。

image.png

然后在【Keychains and Provisioning Profiles Management】里面点击【选择文件】,选择之前拷贝的【login.keychain】,上传点击【Upload】后点击【Save】,打开【钥匙串访问】-》【登录】-》【证书】-》【开发者证书】,复制名称到【Code Signing Identity】,点击【Save】。

image.png
image.png
image.png
image.png
image.png

将/Users/管理员用户名/Library的MobileDevice文件夹拷贝到/Users/Shared/Jenkins/Library下。上传需要的Provisioning Profiles文件(位置在/MobileDevice/Provisioning Profiles下)并且输入Provisioning Profiles Directory Path的路径【/Users/用户名/Library/MobileDevice/Provisioning Profiles】后保存。

新建任务

主菜单点击【新建任务】-》输入任务名-》选择构建一个自由风格的-》点击确定。

image.png

配置构建任务

由于第一次进入关联不上Code Sign所以需要保存后在重新配置

点击【构建】-》【Keychains and Code Signing Identities】-》保存

image.png
image.png

【Mobile Provisioning Profiles】的配置一样需要保存后重新配置才能关联出来变量。

image.png

通过立即构建进行测试

test任务菜单点击立即构建进行测试配置是否成功。结果为蓝色即为正确,如果为红色则按照错误日志进行排查,错误日志查看,点击构建结果-》控制台输出即可查看

image.png

shell脚本进行构建配置

现成的打包shell脚本粘贴到脚本位置即可

image.png
#!/bin/bash
#安装器打包文件

#start---------------------------------------》

# 1.设置配置标识
configuration="Debug"

#2.项目的根目录
cur_dir="/Users/jit/My/SVNCodes/TenementPlatform-Branch1.0"
echo $cur_dir

#生成ipa的目录
desk_dir="/Users/jit/Desktop"
echo $desk_dir

#获取当前时间
CURTIME=`date '+%Y%m%d_%H%M%S'`
prefix_path="${desk_dir}/uploadIPA"
upload_path="${prefix_path}/${configuration}/${CURTIME}"
target_path=$cur_dir

echo "upload_path打包路径:$upload_path"
echo "target_path项目路径:$target_path"

#判断如果不存在upload_path创建,存在先删除再创建
if [ -d "$prefix_path" ]; then
if [ -d "$upload_path" ]; then
rmdir "$upload_path"
mkdir -p "$upload_path"
else
mkdir -p "$upload_path"
fi
else
mkdir -p "$prefix_path"
fi

# 项目名称
target_name="TenementPlatform"
workspace_name="${target_name}.xcworkspace"
scheme="$target_name"

echo "configuration配置:$configuration"
echo "target_name项目名称:$target_name"
echo "workspace_name工作空间名称:$workspace_name"
echo "scheme名称:$scheme"

# archive包时使用证书、描述文件UUID;ipa包时使用描述文件(描述文件名称)
codeSignIdentity="iPhone Developer: 宇 张 (6BVMZN44H8)"
provision_UUID="bd87e612-1eb0-4aa8-8508-34e673184b24.mobileprovision"
provisoning_profile="TestAll"

echo "codeSignIdentity开发证书:$codeSignIdentity"
echo "provision_UUID描述文件UUID:$provision_UUID"
echo "provisoning_profile描述文件:$provisoning_profile"

# 指定目录时
cd "$upload_path"
ipa_path="$upload_path"
archive_path="$upload_path/${target_name}.xcarchive"
# 日志路径
log_path="$upload_path/log.txt"
exportOptionsPlist_path="$desk_dir/autoAchive/config.plist"

pwd
echo "ipa_path导出路径:$ipa_path"
echo "archive_path生成路径:$archive_path"
echo "log_path打印路径:$log_path"

# 3 删除旧文件
rm -rf "$log_path"
rm -rf "$archive_path"
rm -rf "$ipa_path"
cd "$target_path"

pwd
# 4 清理构建目录
xcodebuild clean -configuration "$configuration" -alltargets
xcodebuild clean -configuration "$configuration" -alltargets | tee $log_path

echo $scheme
echo $workspace_name
echo $configuration

/usr/bin/security unlock-keychain -p 111111

# 5 归档(其他参数不指定的话,默认用的是.xcworkspace或.xcodeproj文件里的配置)
xcodebuild archive -workspace "$workspace_name" -scheme "$scheme" -configuration "$configuration" -archivePath "$archive_path" CODE_SIGN_IDENTITY="$codeSignIdentity" PROVISIONING_PROFILE="$provision_UUID" | tee $log_path

# 6 导出IPA
xcodebuild -exportArchive -archivePath "$archive_path" -exportPath "$ipa_path" -exportOptionsPlist "$exportOptionsPlist_path" | tee $log_path

# 7 删除项目目录下产生的build文件
rm -rf "$cur_dir/build"

# 8 上传IPA到蒲公英 根据蒲公英官方文档编写
file_path="${upload_path}/${target_name}.ipa"
echo "正在上传文件"
echo $file_path
curl -F "file=@${file_path}" -F "uKey=6c17bf50b844a231703068ce04b166bb" -F "_api_key=7faa7cc51166fed7f8c181003ce118aa" https://qiniu-storage.pgyer.com/apiv1/app/upload

点击立即构建进行测试,如果报错根据错误日志调试。
可以先注释掉 【6 导出IPA】之后的脚本,一点点调试。

主要问题应该是权限问题,例如

You don't have permission to save the file

授权所有用对【/Users/Shared/Jenkins】以及子目录的的读写权限后重新构建,
提示ld: library not found for -lAFNetworking错误。
需要删除【Build Settings】-》【Library Search Paths】下的相关关联。
并且需要给代码文件夹以及子文件授予所有用户的读写权限。

再次构建提示成功,至此打包配置基本完成。

3.结语

Jenkins还可以配置很多种功能,比如代码规范检查,定时打包等等。

还有一种通过Homebrew方式安装Jenkins,能指定Jenkins安装目录和Home路径,可以规避很多权限问题,具体就不在此进行介绍了。

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

推荐阅读更多精彩内容