美文网首页jenkins持续集成一起修炼swift打包方式
关于iOS 自动打包的 jenkins +SVN 干货!

关于iOS 自动打包的 jenkins +SVN 干货!

作者: 羽亦 | 来源:发表于2016-08-22 13:46 被阅读1217次

    背景描述


    本文不适合手把手教你集成 Jenkins 的童鞋....本文则是一片问题出现与解决的总结~!

    首先,我要将一下为什么我们要用 Jenkins 这个平台来构建自动打包平台:有人会有疑问,使用脚本在电脑上打包, 效率也是非常快的.为啥还要用这个开源平台呢?   我们的自动打包需求并不是为了方便开发人员, 而是为了减轻测试部门同事的工作量,去掉中间那么多的共同时间,让他们可以在需要的时候去打包测试. 那问题就来了, 要知道iOS 的打包是需要创建证书的那台特定机子去打, 而其他人即使拿到 P12 文件也无法打包成功(相同的脚本,直接运行会各种错误),而 jenkins 就完美得解决可这一问题.

    网上也有很多 jenkins 的使用教程之类的东西, 但是,通过自己做过这一遍,深感那些资料有写不能满足我的需要, 很多资料都是交给你怎么成功得整合, 却没有说明当你在整合时会出现的问题, 或者是出现了怎么解决(特别是在 使用了gitLab的项目).为了给后来者以方便,特写此文.

    集成 Jenkins


    我在这里不会详细的介绍怎么安装和搭建 jenkins 运行环境, 网上有很多, 我只是提想下打算在Mac 上构建Java 环境的开发者, jenkins 的运行不要构建 Java HOME , 直接安装 Java_JDK就可以了,然后到官网下载页面,选择  Mac os X 版本 .在安装时,一定要按默认的安装,不要自定义安装, 网上有的资料是自定义安装,不去创建jenkins用户,这个很坑人,千万不要少装了!!!!

    安装完毕后, 确保你的shared文件下存在jenkins用户。

    当我们第一次进入jenkins 时会让我们安装,等待页面下载完毕,然后注册, 当然要是忘记了密码.是没有找回密码这一按钮的, 你需要去删除在/Users/Shared/Jenkins/Home/config.xml 以下代码

    然后重新启动jenkins  sudo service jenkins restart , 当然,重启电脑也行..哈哈..

    打包项目构建


    进入 jenkins 页面后, 新建一个项目, 如何新建项目,网上自己百度吧..记住一点,自己的项目名称或运行脚本名不要出现空格, 因为空格会被转译.这回在你使用命令在终端中调试时出现很多不必要的麻烦...

    在项目配置中的"源码管理"中选择 Subversion , Repository URL里填写 SVN 地址, 直接拷贝项目 URL粘进去就可以, Credentials 中点击添加, 选择账号 密码连接类型, ID , 描述什么的可以不写.添加账号后回到前一页面Credentials,选择该账号, 没有连接上回报错.

    到这里如果你是使用脚本打包的,那构建过程中的难点就没有了, 如果你是使用 Xcode 构建的话, 还是有一定难度在等你. 当然如果你的本地项目工程使用Workspace来管理的, 那么请按照网上主流的资料进行配置就可以了, 如果你的工程中没有使用Workspace来管理,那么在Xcode Workspace File 输入地址当然会在打包时报错..这时候你会发现在页面中还有几个框, 其中一个是Xcode Project File,这样你将你的项目运行文件. xcodeproj放进去,就可以了...

    配置jenkins的关键


    我们使用jenkins的目的是实现jenkins自动打包svn 或git 托管的最新代码。而不是你电脑本地的工程。所以不管是脚本还是Xcode插件,build的工作区间必须是jenkins目录下的workspace;使用脚本时, 第一次我们不知道我们的目标工程在哪里, 所以当你配置差不多了,可以选择构建一次, 这样jenkins下的workspace文件下就有了你的目标文件。jenkins 首先会自己会检出一份代码, 将脚本也放在该工程文件下, 如果你构建时报“没有权限”的问题, 那就使用命令给jenkins文件全部权限(chmod -R 777 /文件路径)。单单去改变脚本权限是没有用的~!

    要实现jenkins的自动打包,其实就是要jenkins用户下可以正常打包,真机运行。因为你的目标工程是在shared目录下的jenkins下, 所以,首先你需要保证在你自己用户下可以打包,等。然后,切换用户到jenkins下, 通过shared可以找到目标工程, 然后再这里面实现正常打包,运行等。。完成这两部,你就已经离成功不远了~!(在jenkins中如果出现问题, 请往下仔细阅读)。


    打包时的常见问题


    项目配置全部都 OK 了, 这时候我们点击"立即构建"按钮, 第一次一般都会报错,一下是集中常见报错的现象及原因以及解决方法:

    如果你是使用 Xcode 构建:

    1. Jenkins Xcode 证书设置错误 :

    Code Sign error: No matching codesigning identity found: No code signing identities

     或者

    Check dependencies

    Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“qingyunDeveloper”) were found.

    或者报什么 UUID(***************)不匹配

    原因: Xcode 现在的证书选项选择不正确, 或者是 jenkins 的Xcode 证书没有在其证书文件中找到相应证书对应项.jenkins的打包是在jenkins用户下进行的,所以,在本机用户的证书环境要与jenkins用户环境证书一致。

    解决1: 叫你的老大给你把 P12文件传给你,打开.选择好证书类型, 然后再构建, 如果还是不行,找到你用户下的Provisioning Profiles 文件。目录为 /Users/xxx/Library/MobileDevice/Provisioning Profiles  xxx表示你自己的用户名

    把这里面所有的证书复制到/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profile  这个文件。然后再构建..

    2.构建时,输出错误为权限问题..

    原因:因为在安装 jenkins 后, 会系统会自动创建一个 jenkins 的用户, 你现在所使用的是自己的 MAC 用户,所以操作 jenkins 会无权限,.

    解决:你需要做的是找到报错的地址文件, 单击右键,显示简介中找到共享与权限, 全部给读写权限, 并且查看根目录其他文件是否是全部读写权限...或者直接暴力(chmod -R 777 /路径)

    3.Xcode 编译出错 ,代码不支持新的 SDK

    原因:因为 jenkins 构建时,默认是 APPStore 上最新的版本, 有的工程里第三方文件编译时,不支持最新 Xcode 版本, 所以需要更改 Xcode 的编译 SDK.

    解决:运行 xcodebuild -showsdks 命令在终端中查看当前版本, sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer  后面的地址是你需要的 Xcode 版本的地址,如你想更换为9.2的 SDK, 那么该地址则为 Xcode 7.2.1 的报内容.  更改完后构建即可.

    4.如果在jenkins用户下,按第一条问题解决方法操作,还是无法运行,或者找不到想要的描述文件。一直报证书的错。

    原因:上次删除jenkins时不规范, 文件有残留,导致这次安装有问题。

    解决:按照网上删除jenkins的方法去删除(都是命令语言),然后再装, 重新按照步骤来做。

    5.两个用户下各自都能打包,运行。但是回到本机使用jenkins网页上的构建按钮构建,提示:

    原因:提示的意思是jenkins用户没有解锁用户交互。但是,如果你去网上按照那些方法添加“登陆钥匙串”的解锁命令,还是无法完成。其实,这个问题的实质还是证书的问题,但这个问题不是描述文件的事,而是开发或者发布证书没有添加的问题。

    解决:进入jenkins用户下, 如果你直接双击打开证书, 但是,系统会提示你 user interface is not allowed。 所以并不能这么直接添加, 而是要打开钥匙串, 找到“system”---copy全部的证书-----“login”---粘贴  。

    再去构建,OK 完美~!O(∩_∩)O哈哈~

    相关文章

      网友评论

      • Hunter琼:Specified application doesn't exist or isn't a bundle directory : './Release-iphoneos/MobileEhallGuangxiTwo.app' 我用Jenkins 打包 出现这问题 请教下
      • 孤独感爆棚:楼主见过这种情况没,执行构建后一直在执行脚本,也不打印错误,但是我在桌面下执行脚本打包是没有问题的,在Jenkins的目录执行也可以,就是在立即构建执行的时候卡住。。。
        孤独感爆棚:@吃大米的小蚂蚁 是用脚本构建的吗
        吃大米的小蚂蚁:你好,我在使用Jenkins打包的时候遇到了
        error: couldn't create directory /Users/zhaoguangliang/Desktop/Test: Permission denied
        error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't create output file: /Users/zhaoguangliang/Desktop/Test/libMBProgressHUD.a (Permission denied)
        这个问题应该怎么解决呢,我已经把Test文件夹设置为读写权限了,再次构建的话还是会出现这个问题,求解。。。
        羽亦:控制台会输出错误的,不可能什么都不输出啊
      • 疯狂的老中医:不错不错,赞一个!写的真棒。对我很有帮助 :smile:

      本文标题:关于iOS 自动打包的 jenkins +SVN 干货!

      本文链接:https://www.haomeiwen.com/subject/xwktjttx.html