jenkins编译ios
❶ jenkins ios 自动化打包一定要在mac下吗
首先搭建起jenkins环境,android官方提供了使用ant编译打包的脚本,所以要在jenkins系统配置里面将ant配置好;然后在jenkins里面新建一个项目,这里列出比较重要的几项配置: 1、项目源代码位置,一般就是指定svn吧 2、构建过程添加shell
❷ iOS 的自动构建流程
用来打包做类似事情的工具很多,更主要的是为什么使用自动构建:
• 效率上,解放出开发人员的时间。也更方便其他同事使用。
• 保证打包的标准,避免配置或环境问题,带来的失败。把事情做对,比做快更重要。
• 权限安全上,通过构建系统集中管理,对于使用者来说是一个黑盒。
• 项目流程上,便于有需求时做 Daily Build 或者 自动测试。
对于 如何安装 Jenkins 或者 Jenkins 参数配置 之类的基本配置不做涉及。
网上已经有不少详细的文章进行介绍。比如 手把手教你利用Jenkins持续集成iOS项目 https://www.jianshu.com/p/41ecb06ae95f 。
先介绍整体的构建流程,具体的内容会在下面分步骤介绍.
构建前
• 设置构建名
• 配置 app 图标水印(build号,分支)
• ruby 脚本根据参数,修改工程 bundleID ,宏等
• 安装第三方依赖,pod update
执行构建
• xcodebuild clean
• xcodebuild archive
• xcodebuild exportArchive
构建完成
• 上传分发平台: 蒲公英/fir/appstore(历史版本记录: git tag )
• 符号表处理:上传 bugly
• 归档产物: 上传 FTP 服务器
• 清理: 删除 IPA 等
• 设置构建描述
• 通知: 企业微信 webhook 机器人推送
首先设置我们的构建名称,我这里使用到几个参数:
• BUILD_NUMBER ,Jenkins 自带的参数,代表第几次构建
• BetaPlatform ,设置的选项参数,代表分发平台。我这里的值分别是:fir,pgyer,appstore
• Mode,设置的选项参数,代表 Xcode 构建的环境设置,为 Snapshot 和 Release
• Branch,Jenkins 自带的参数,代表 Git 分支名称
为了打包后进行测试的 APP ,便于定位问题,可以在 App Logo 上打上水印,加入构建使用的 git 分支名,jenkins 构建号,app 版本号 等关键信息。
配置图标水印的流程为:
• 判断此次是否为 appstore 分发平台。如果是 appstore 的话,将旧有的图标目录清理掉,然后将图标复制到使用的目录中。
• 如果不是 appstore ,则为测试平台分发,进行水印处理。
因为要使用替换资源的方式,所以准备两个目录。
一个目录作为 源目录,存放未处理的图片。一个目录作为目标目录,存储 App Logo 使用的图片。
为什么使用两个图片目录存储?假设只用一个,原图为A,当第一次处理,图片为 A1水印图片,当第二次再拿到的图片,已经是被处理过的 A1水印图片了,而不是原图A 。
这里注意 icons_path 为存放原图的地址, icons_dest_path 为要修改使用的目标路径。命名为 AppIcon-Internal。
可以参考 iOS APP图标版本化 https://www.jianshu.com/p/a37e114b7e66
关于 version 的获取, 因为目前版本有改动,使用 ruby 去获取,脚本会在后面提供链接:
还有一个临时存放路径,要提前创建好这个文件夹:
添加水印主要使用到了命令行工具 ImageMagick ,所以要先安装:
具体的脚本如下:
这里使用 ruby 实现参数修改(当然也可使用 python 等各种语言,自己方便就 OK )。
目前做的操作:
• 区分是否 beta 版本 -- 修改定义 beta 宏 的真假值
• 不同分发平台,使用不同 bundleID -- 对 bundleID 进行修改
脚本里依靠 CocoaPods 开源的 Xcodeproj ,对工程的 name.xcodeproj/project.pbxproj 文件进行配置修改。
python 的话,可以使用这个项目 mod-pbxproj
安装/更新第三方库,这里使用到的是 Cocoapods,其它的包管理器可使用其它方式。
在开始之前,我们要做些准备工作,比如设置要使用的变量,常量。
需要提前写好,尽量避免散落。
旧有的方式,是直接通过 info.plist 取:
然而在新的 Xcode 取 版本号 和 bundleID 的方式发生变化,现在 info.plist 里的值是变量名,取版本号为 $(MARKETING_VERSION) , bundleID 为 $(PRODUCT_BUNDLE_IDENTIFIER) .
结局思路是通过脚本到工程配置里去获取,下面使用 ruby 实现了这两个目的。
我们将 App 与 Jenkins 的 build number 设置为同一个,方便需要时,查看构建的参数以及符号表等:
加入 security 解锁操作的原因,是在子节点 ssh 登录上去之后,keychain 没有被解锁.导致打包失败.
解决方案是用 security unlock-keychain 命令将证书解锁。
另外可以通过命令查看描述文件的详细信息 包括UUID等信息
对工程进行构建打包,主要在于使用 Xcodebuild .
分为三个阶段:
• Clean
• Archive
• Export
如果在执行过程中又不喜欢日志输出的,可以在命令行最后加上
每次构建时,对工程进行 clean ,保证没有其它影响的因素。
使用xcodebuild clean [-optionName]...清除编译过程生成文件,使用如下:
非 cocoapods 的工程,将 -workspace "${APP_NAME}.xcworkspace" 换成 -project ${APP_NAME}.xcodeproj 即可。
新版本的 Xcode 有了新的构建系统,使用 -UseModernBuildSystem= 来做新旧区分。
Xcodebuild archive
更新到Xcode9.0后,之前写的自动打包脚本不可用了。
需要添加 -allowProvisioningUpdates,获取访问钥匙串权限的关键所在,设置了这个字段就会在打包过程弹框请求获取钥匙串内容权限。
特别说明的是,exportOptionsPlist 一定要检查,不同的环境和分发平台要选择对。
最简单方式,就是调好需要的环境后,直接手动 archive ,export 出来,使用产物里的 exportOptionsPlist 文件。
检查对应路径是否有 **.ipa 文件:
这里分为 蒲公英,fir,appstore 三个平台,上传 IPA.
下面使用的三个上传命令,最好先提前在机器上实验可以正常用再构建。
上传 bugly
进行完所有操作后,对于产物做一次保存,需要时可以用上。
首先将文件压缩
通过 FTP 插件,把 zip 文件上传到归档的路径下
删除 IPA 等文件,注意的是,当状态为 success 才清理,避免有时上传出问题,可以进行手动上传。
设置构建描述
完成后,企业微信 webhook 机器人推送,效果如下:
这里设置成可选项,避免频繁打扰其它同事。脚本如下:
[1] https://juejin.im/post/6844903843994533896
[2] https://www.cnblogs.com/zhou--fei/p/11371019.html
[3] https://www.jianshu.com/p/4f4d16326152
[4] https://www.jianshu.com/p/f50053d50436
[5] https://dengweijun.com/2018/12/26/Xcode%E8%87%AA%E5%8A%A8%E6%89%93%E5%8C%85%E9%82%A3%E4%BA%9B%E4%BA%8B/
❸ iOS-Jenkins-TestFlight自动打包流程
一、准备一台mac电脑
二、安装jenkins
打开终端运行:
brew install Jenkins
如果没有安装brew,请前往 brew 根据提示安装。
至少需要安装java1.8 ,如果没有安装会有提示, java
java安装完毕,链接 launchd 配置文件
启动jenkins
jenkins
打开Safari输入: http://localhost:8080/
就能看到jenkins已经运行起来了,如果你更换了端口就是你后来设置的端口。
接下来打开Jenkins后会让去一个填写password的页面如下图,存储password的地方就是图片上那行红色字体目录下,使用终端 cat + 红色字体路径就看到了
然后将我们得到的password输入到“Administrator password“中,即可进入如下界面,接着安装一些建议的插件(左边的),请等待,并全部安装成功在进行下一步。
安装完成之后,输入账户密码,登陆。开始jenkins
二、cocoapod环境安装
项目中一般会使用cocoapod管理第三方库。这个时候如果使用jenkins自动打包,就需要安装好cocoapod环境
三、jenkins使用
1、安装插件
Keychains and Provisioning Profiles Management
Xcode integration
在系统管理-> 插件管理中搜索插件
配置Keychains and Provisioning Profiles Management
请先配置好p12和Provisioning Profiles文件
需要上传login.keychain文件,该文件获取方法,在终端中输入
cd ~/Library/Keychains
将login.keychain文件upload之后,会出现下图的界面,根据需要将证书添加进去即可,但是由于macOS10.12以及以后的系统里面没有login.keychain文件,只有login.keychain-db,可以复制出来删除-db,upload就好了。(上传keychain,路径用自己改名后的那个)
然后添加Provisioning Profiles,上传方法和上传login.keychain一样,去选择Provisioning Profiles文件,然后upload,然后结果如下图,蓝色框内的是固定格式的/Users/用户名/Library/MobileDevice/Provisioning Profiles
配置好之后保存即可
3.开始配置任务
创建一个任务,自由风格的任务
General
创建一个自由风格的任务,然后在选择丢弃旧的构建,至于天数和保持的最大个数,按照自己的需求来就好
源码管理
接下来是源码管理,在Repository URL里面添加你的git地址,我这里添加的是http的,如果你的项目是使用的ssh的,那么就将git开头的地址填写上,然后点击Add添加你的git帐号,如果你的事ssh的,将ssh的密匙填写上,具体的自己网络一下就好咯,我就不多写了,结果如图
构建触发器
接下来是构建触发器,也就是什么时候触发自动打包我这里填写的是H 20 * * 这个意思就是H小时然后,后面跟着数字,在后面就是日月年, 代表的我认为是每次都触发,也就是每天每月每年,但是Jenkins的时间不是绝对的,一般都是在随机在半点,也就是设置20点,大概会在20:30分左右会触发,如果需要两个时间,那么格式可以这样H 20,22 * * *结果如图
构建环境
在构建环境里面勾选Keychains and Code Signing Identities和Mobile Provisioning Profiles,Keychains and Code Signing Identities是打包需要的证书,Mobile Provisioning Profiles是打包需要的配置文件,都是可以自己选择的,我的如图
构建环境第一次Code Signing Identity和PP文件可能有些不一样。应用,保存一下就可以了。
添加脚本
执行cocoapod脚本必须要在第一个
执行打包并且上传到TestFlight脚本
关于exportOptionsPlist
请参考 exportOptionsPlist
把exportOptionsPlist添加到infoPlist同一层并push到git
关于
问题的解决。
证书不能使用自动管理,需要手动。
感谢