自动化打包 Mac JenKins + Xcode + 蒲公英 + Testflight

自动化打包 Mac JenKins + Xcode + 蒲公英 + Testflight

其实这篇博客很早就写好了(其实是某次离职的交接文档的一部分) 最近笔者想重新做回程序员就发上来吧 还是比较详细的

需求:每次开发完毕进入测试的时候,每次修改完bug 或者 测试想回归测试的时候 都要频繁的打包给测试 ,在开发期间打包又卡又浪费时间。

解决后:在每次修改完bug 后 会自动打包上传 还会邮件通知测试 邮件内容里面有 我们 git push 的信息 方便同事查看是修复了那个bug

要求:一台闲置的Mac(服务端没有Mac的服务器 呜呜呜 不然这个可以放在服务器上跑) gitlab Swift

第一步先安装JenKins
JenKins (Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。)
jenkins就是一个任务自动化的工具 也就是你可以写一份文档来 让他一步一步执行 。接下来的操作都是如何配置文档, 所以没什么技术难度,闲暇时间做就好了,后端同学肯定熟悉这个

brew install jenkins 安装
jenkins 启动
http://localhost:8080/ 访问jenkins

Jenkins安装完是用浏览器直接打开 http://localhost:8080,那么应该是如下的显示界面

image.png

获取密码:打开终端输入
把显示的密码复制粘贴至管理员密码中,进入自定义jenkins界面


image.png

我们选择 安装推荐的插件


image.png

安装插件完成后新建管理员用户:


image.png

实例配置这里不做修改直接保存


image.png

image.png

image.png

接下里是安装必要的插件,推荐的插件不够

系统管理 - > 插件管理 - >可选插件 - > 过滤 - >选择插件 -> 直接安装
Xcode integration 必须的 这个是配置Xcode 编译项的Keychains and Provisioning Profiles Management 证书管理Email Ext Recipients Column Plugin 邮件
CocoaPods Jenkins Integration
GitLab
GitLab Authentication

配置Keychains and Provisioning Profiles Management

cd ~/Library/Keychains

macOS10.12以及以后的系统里面没有login.keychain文件,只有login.keychain-db,可以复制出来删除-db,也可以创建一个快捷方式名字叫做login.keychain,upload就好了。(上传keychain,路径用自己改名后的那个)


image.png

然后添加Provisioning Profiles,上传方法和上传login.keychain一样,去选择Provisioning Profiles文件,然后upload,然后结果
Provisioning Profiles Directory Path
的是固定格式的/Users/用户名/Library/MobileDevice/Provisioning\ Profiles/
注 有时候 这个地方 文件夹 会没有权限

系统设置 配置


image.png
image.png
Default Subject 【构建通知】: $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

Default Content

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>  
</head>  
  
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"  
    offset="0">  
    <table width="95%" cellpadding="0" cellspacing="0"  style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">  
        <tr>  
            <td>各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</td>  
        </tr>  
        <tr>  
            <td><br />  
            <b><font color="#0B610B">构建信息</font></b>  
            <hr size="2" width="100%" align="center" /></td>  
        </tr>  
        <tr>  
            <td>  
                <ul>  
                    <li>项目名称 : ${PROJECT_NAME}</li>  
                    <li>构建编号 : 第${BUILD_NUMBER}次构建</li>  
                    <li>触发原因: ${CHANGES}</li>  
                    <li>构建状态: ${BUILD_STATUS}</li>  
                    <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>  
                    <li>构建  Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>  
                    <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>  
                    <li>项目  Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>  
                </ul>  
            </td>  
        </tr>  
    </table>  
</body>  
</html>  

开始配置任务

然后创建一个任务,自由风格的任务 笔者这边因为需要上传蒲公英 和 testTestflight 所以创建了两个任务

image.png

可以选择保留版本 时间 和 个数 这里 其实 选 丢弃旧的构建

Source Code Management

image.png

这里填上git 地址 分支
Build Triggers
image.png

触发构建的方式
其实轮询 就行 检查到有新的 改动 才会打包
image.png

build

image.png

这里可以任意勾选 执行步骤 例如 其实因为个推 bug 和 修改build 号的需求 且 需要pod install 就选了 先执行 shell 脚本 (这个脚本需要按照自己项目来写)


pod install --verbose --no-repo-update

buildMainPlist="/Users/xiexing/.jenkins/workspace/app/MarkDaily/Info.plist"
buildServicePlist="/Users/xiexing/.jenkins/workspace/app/NotificationService/Info.plist"
buildNumber=$(date +"%m%d%H%M")

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$buildMainPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$buildServicePlist"

选择 Xcode 插件


image.png

接下来 就是xcode 的配置 自行选择就可


image.png

Configuration :Release

Xcode Schema :File


image.png

注 $workspace 这里是因为 那个 蒲公英插件(他不能识别文件夹) 才这样 写

Testflight 的 就可以写

image.png

这一项记得勾选


image.png

Build就完成设置了

接下里 就到 上传了


image.png

蒲公英 可以查看

https://www.pgyer.com/doc/view/jenkins_ios 配置

image.png

Testflight 选择shell 脚本上传
最后添加一个shell 脚本就行

ALTOOLPATH=/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool

IPAPATH="/Users/xiexing/.jenkins/workspace/APP-TESTFLIGHT/build/XXXX.ipa"

APPID="XXXX"

APPPASSWORD="XXX"

"${ALTOOLPATH}" --validate-app -f "${IPAPATH}" -u "${APPID}" -p "${APPPASSWORD}" --output-format xml


"${ALTOOLPATH}" --upload-app -f "${IPAPATH}" -u "${APPID}" -p "${APPPASSWORD}" --output-format xml

最后一步 发送邮件


image.png
这里其实 就是采用 我们在设置 上 填好的
Project Recipient List:$DEFAULT_RECIPIENTS $DEFAULT_REPLYTO
Project Reply-To List:$DEFAULT_REPLYTO $DEFAULT_RECIPIENTS
Content Type:Html
Default Subject:$DEFAULT_SUBJECT Testflight
Default Content :$DEFAULT_CONTENT

最后点击 保存
两个任务 只有build 和 上传 不一样 其他统一
可以先手动构建一下 看看成不成功
这个真的是傻瓜教程每一步都有了,快动手试一试吧

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

推荐阅读更多精彩内容