前言


持续集成是敏捷开发中重要的一部分,为保证新功能的开发,又保证旧功能的维护,从一个冲刺到下个冲刺。持续集成工具是我们保证开发和维护并行的护航者,现在流行的集成工具有很多,例如:

1.Jenkins

2.Buildbot

3.Travis CI

经过对比,Jenkins工具搭建相对简单(仅指安装),打包速度也比较快,得到很多朋友的青睐,所以本文是以描述Jenkins搭建环境为主旨。(踩了好多坑啊哈哈哈)

Jenkins 的 好处

在写本文之前,我觉得有必要提一下Jenkins 对一个团队的好处。

最简单粗暴的好处就是降低 开发团队与测试团队的耦合,Jenkins也支持定时自动打包,上传等,省去了“修改配置项--编译---连接设备--运行打包--装ipa--然后交给等待的测试人员”这些简单繁琐的步骤。也避免测试人员测错包之类,把开发已经修改的bug打回来这种问题。

注意:打包ipa包需要有xcode环境,所以要想在公司的服务器配置iOS打包环境,要求服务器必须是Mac OS系统,Linux和Windows只能靠边了。我是在一台Mac mini 下配的环境。

步骤大致可以分为以下几步:

1.搭建Java环境

2.搭建Jenkins环境

3.配置证书和描述文件、钥匙串

4.配置项目

5.配置xcode 环境

1.配置java环境


浏览器打开http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html   选择Mac OS 的安装包下载,JDK安装都很简单,安装过程这里就省略了。

JDK

2.搭建Jenkins环境


浏览器打开 Jenkins官网 点击下载Jenkins,选择Mac OS安装包,我现在装的是2.46.1

选择jenkins安装包

接下来就是傻瓜式的下一步安装,这里就不一一贴图了。

安装完成后浏览器一般会自动打开 http://localhost:8080,如果不自动打开可以手动打开这个链接,然后会提下下列的错误信息

unlock Jenkins

顾名思义,我们要去log路径下取到password,输入才能进入Jenkins。右键 Finder->前往文件夹->输入/Users/Shared/Jenkins/Home 回车后应该看到下面

jenkins psd

看到secrets文件是有个减号的,右键secrets->显示简介->共享与权限->将everyone权限改成 读与写。

secret权限

双击点开secrets之后应该如下所示:

initialAdminPassword

同理,因为我们没有initialAdminPassword的读写权限是无法打开的,右键 initialAdminPassword->显示简介->everyone权限改成读与写

initialAdminPassword权限

然后用文本来打开initialAdminPassword,把里面那串数字复制,把这串数字填到Jenkins启动的那个页面,如果你不小心关了上面那个页面,打开http://localhost:8080即可。

解锁

然后continue,这时会看到以下页面,选择红色框里的 Install suggested plugins(Jenkins建议安装的插件)

customize Jenkins

看到这个页面之后,等待Jenkins把插件下载完

下载插件

这里创建下Admin User,把这些项都填完之后点击save and finish就OK了。注意要记得用户名和密码,以后你登录要用到的,忘记密码就麻烦了。

创建用户名和密码

ready

到这步已经说明Jenkins环境已经搭建好了。点击start using jenkins

进入jenkins页面

这时需要配置一下插件,系统管理->管理插件->可选插件

插件管理第一步

因为项目是配置svn为管理器的,git管理代码的可以参照其他同学的教程自行配置。我们先下载svn插件,在过滤输入框中输入svn,勾选 SVN Publisher plugin。点击直接安装。

插件管理-svn

同理,我们要下载 xcode integration 和keychains and Provisioning Profiles Management 这两个插件。

插件管理-xcode integration

插件管理- keychain and profiles

把这两个搜索出来,勾选然后直接安装。然后等待完成

等待插件安装完成

安装完成后我们重启下jenkins,重新加载下插件。可以滑到最底下勾选重启,或者也可以在地址栏输入http://localhost:8080/restart

完成安装插件重启Jenkins

重启之后应该要输入用户名和密码,把刚刚注册的用户名密码输入进去。

还有一个重要的步骤,我们先给Jenkins用户管理员的权限,避免后续的访问问题。

系统偏好设置->用户与群组->点开锁,然后在Jenkins用户下勾选“允许用户管理这台电脑”。

到这步最好给Jenkins用户设置一个密码,便于后期检查是否Jenkins配置错误或者是检查代码错误。

Jenkins用户权限问题

3.配置证书和描述文件、钥匙串


点击系统管理->keychain and provision Profiles Management

keychain and provision

在这之前,我准备了开发证书.p12 + 描述文件,生产证书.p12 + 描述文件,分别用来上线打包和测试打包。这步并不需要我们上传证书,而是上传需要描述的文件和login.keychain。login.keychain有坑!有坑!有坑!!!!! 之前我是把login.keychian 复制到桌面然后上传的,构建的时候总是报错keychian 权限问题。然后我是按照以下方式来做的。

配置keychain 证书和描述文件

在此之前先普及一下,jenkins其实是自己开了一个用户,用于存储一些配置文件和信息等。我们可以在finder里面找到Jenkins用户的文件夹,点击前往/Users/Shared/Jenkins

jenkins目录

1.Finder->前往文件夹->/Users/“你的mac用户名”/library

2.找到keychains 这个文件夹,拷贝

3.用上面那种方法放到Jenkins->Library文件夹下

拷贝keychain文件

为了避免描述文件也出现类似的找不到的错误,我们也把描述文件拷贝到Jenkins用户->Library。

1.Finder->前往文件夹->/Users/“你的mac用户名”/library(或者还有一个方法,打开xcode->preferences->找到你账号下的描述文件)

2.找到keychains 这个文件夹,拷贝"MobileDevice"整个文件夹

3.用上面那种方法放到Jenkins->Library文件夹下。

拷贝mobileDevice文件

接下来就是上传keychain和描述文件了。

上传keychain和描述文件

这里我们选刚刚拷贝过去的Jenkins文件目录下的keychain和描述文件。点击选取文件->搜索login.keychain,这里要注意下是否为Jenkins目录下的keychain。

上传keychain

上传完之后打开钥匙串,找到我需要上传的两本证书的名字,因为我想上传一个开发证书和一个生产证书,所以上传两个。把这两个证书的名字复制下来

证书名字

然后点击 Add Code Signing Identity,分别把这两个名字粘贴过去。完成了之后大概如下:

keychain

接下来就是描述文件了。这里要注意一点,在Provisioning Profiles填上/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles这个地址。然后按照上传keychain的步骤,把Jenkins用户目录下的描述文件上传上去就行啦

Provisioning Profile地址

完了之后是这样的。

keychain描述文件成功图

4.配置项目

keychain配置好之后,接下来就是新建一个工程了。输入你的项目名称(项目名称会在Jenkins下生成一个文件夹)。构建一个自由风格的软件项目,点击ok

新建项目

1.General

新建完之后点选丢弃旧的构建,配置一下保持构建的天数和最大个数

配置旧的构建

2.源码管理

然后配置源码管理,这是Jenkins拉取代码的路径(尽量精确到项目位置),如果Credentials没有,则点击右边的add,填上自己的svn账号和密码。假如这栏没有报红,基本上地址什么的都是正确的了。

配置svn

3.构建环境

接下来配置构建环境,这里我们勾选Keychains and Code Signing Identities,选择login.keychain,然后选择对应的证书名字。同样勾选Mobile Provisioning Profiles,选择对应的描述文件。

构建环境

4.构建

因为我项目用到cocoapods,所以要先在构建这里选执行脚本,在里面输入

#bin/bsah - l

export LANG=en_US.UTF-8

export LANGUAGE=en_US.UTF-8

export LC_ALL=en_US.UTF-8

cd $WORKSPACE/你的项目名称

/usr/local/bin/pod update --verbose --no-repo-update

注意:没有#bin/bsah - l

export LANG=en_US.UTF-8

export LANGUAGE=en_US.UTF-8

export LC_ALL=en_US.UTF-8   /usr/local/bin/  这几句可能会造成编译器读不懂pod语句。当你构建的时候提示pod语句出错,百分之九十都是这个错误。

创建脚本

输入

接下来添加xcode构建工具

添加xcode构建工具(注意:Xcode9 不需要添加xcode构建工具,而直接添加另外一个Execute shell,下面有解释)

首先配置General,这里又有一个坑!!!!输出路径必须是workspace路径下的,然后会报权限不够等之类的问题

xcode-general配置

之后是Code signing & OS X keychain options

Code signing & OS X keychain options

接下来是配置 Advanced Xcode build options。

tips:jenkins会在它的目录Home->workspace下建一个文件夹,这个文件夹名字就是你的项目名字(比如你的项目名字叫JenkinsProj,那么会存在Jenkins->Home->workspace->JenkinsProj这个文件夹)。${WORKSPACE}一般都会到Jenkins创建的文件夹下。

Build output diretory 还是老实点写在workspace下比较好,因为Jenkins创建的目录我觉得足够清晰了。之前我写在另一个用户下就会报权限问题。

advance配置

一般这样配置完就可以成功打包了,在整个配置过程中,都不能粗心大意或者自以为是的随意配置。可能文章还有写的不够的地方或者错误的地方,欢迎大家指正完善。也希望大家把遇到的问题多多分享一下~

注意:升级 Xcode 9 之后,编译完成之后打包会一直报如下所示的错误:

error: exportArchive: "APPNAME.app" requires a provisioning profile with the Push Notifications feature.

Error Domain=IDEProvisioningErrorDomain Code=9 ""APPNAME.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="APPNAME.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}

** EXPORT FAILED **

Failed to build /Users/Tolecen/.jenkins/workspace/APPNAME/build/APPNAME_release.ipa

Build step 'Xcode' marked build as failure

Finished: FAILURE

因为 Xcode 9 默认不允许访问钥匙串的内容,必须要设置 allowProvisioningUpdates 才会允许,但是由于 Xcode integration 插件封闭,并不能对其进行修改加上这个属性,所以决定使用 Shell 脚本代替插件。

解决方案

将 Jenkins 项目里的 Xcode  构建步骤去掉,使用下面所示的命令:

xcodebuild -archivePath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/Debug-iphoneos/APPNAME.xcarchive" -project APPNAME.xcodeproj -sdk iphoneos -scheme "SCHEMENAME" -configuration "Debug" archive

xcodebuild -exportArchive -archivePath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/Debug-iphoneos/BasketballLeague.xcarchive" -exportPath "/Users/USERNAME/.jenkins/workspace/APPNAME/build/APPNAME_debug" -exportOptionsPlist '/Users/USERNAME/.jenkins/workspace/APPNAME/build/ExportOptions.plist' -allowProvisioningUpdates

如果是 workspace 的项目,那就将上面第一段的命令中 -project APPNAME.xcodeproj 修改为 -workspace APPNAME.xcworkspace 即可。

再着重说明一下 ExportOptions.plist,这个文件如下所示:

 

里面的有 Bundle Id, ProvisioningProfiles 和 teamID 的信息,对应填写上即可,如果不确定,那就先用 Xcode 9 手动打包你的项目,然后导出,导出的文件夹里会有这个文件,直接复制到你持续集成需要的路径中即可。


错误大全


1.钥匙串的错误

类似下面的钥匙串错误,我给大家个tips:

1、钥匙串无非是两个地方设置和用到,分别为系统管理->Keychains and Provisioning Profiles Management 和 项目配置里面->构建环境下的Keychains and Code Signing Identities 这两个地方去找,看有没有不匹配的地方,或者按照上面说到的相应步骤重新来。

钥匙串错误

2.cocoapods错误

类似下面的错误,一般先要检查项目配置里面->构建->Execute shell 有没有写错。

#bin/bsah - l

export LANG=en_US.UTF-8

export LANGUAGE=en_US.UTF-8

export LC_ALL=en_US.UTF-8

cd $WORKSPACE/你的项目文件

/usr/local/bin/pod update --verbose --no-repo-update

如果这样写还不行,mac注销当前用户,进入Jenkins用户,看是否安装了cocoapods,如果没有安装,需要安装一下,并且版本要与当前用户一致(Jenkins用户的密码可以在系统偏好设置->用户与群组设置。)

cocoapods错误

3.Xcode终止打包

遇到Xcode终止打包这时进入Jenkins用户,在Jenkins下编译看有没有问题。如果有问题,这时候就要检查下你svn上的项目是否正确了。

4.scheme错误

打开Xcode->manageSchema,把share勾上

 
5.目前必须把xcode中的自动签名去掉,改成手动管理才能打包成功,如果有朋友能用自动签名打包的麻烦告知下,谢谢!
 
 

最全Jenkins+SVN+iOS+cocoapods环境搭建及其错误汇总的更多相关文章

  1. Jenkins+Maven+Git CI环境搭建手册

    Jenkins+Maven+Git CI环境搭建手册 环境: OS:Linux version 2.6.32-220.23.2.ali878.el6.x86_64 (ads@kbuild) (gcc ...

  2. iOS自动化环境搭建——macaca

    macaca-java for ios 自动化环境搭建 基础原理解析:https://testerhome.com/topics/6608 一.环境搭建 1.安装eclipse; -----Java开 ...

  3. Eclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64位还是32位,安装过程就是next一路到底.安装完成之后当然要配置环境变量了. ————————————————— ...

  4. Eclipse4.6(Neon) + Tomcat8 + MAVEN3.3.9 + SVN项目完整环境搭建

    软件清单 jdk-8u102-windows-x64.exe eclipse-inst-win64.exe (Eclipse4.6 Neon) apache-tomcat-8.5.5-windows- ...

  5. SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 如果你是使用 Eclipse 你需要先安装 MyEclipse,请参考:SSM 框架-02-MyEclipse ...

  6. React Native IOS ---基础环境搭建(前端架构师)

    React Native -IOS 开发环境搭建 web架构(基础) 安装依赖 * 必须安装的依赖有:Node.Watchman 和 React Native 命令行工具以及 Xcode. npm 镜 ...

  7. 超全详解Java开发环境搭建

    摘自:https://www.cnblogs.com/wangjiming/p/11278577.html 超全详解Java开发环境搭建   在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必 ...

  8. [转]OPENCV3.3+CUDA9.0 环境搭建若干错误总结

    编译OpenCV设计启用OpenGL三维可视化支持和启用GPU CUDA并行加速处理的基本知识: 1.从2.4.2版本开始,OpenCV在可视化窗口中支持OpenGL,这就意味着在OpenCV中可以轻 ...

  9. 从头来之【图解针对虚拟机iOS开发环境搭建】

    1.下载Mac OSX10.9. 点击下载 2.下载VMware Workstation 10,点击下载,网页中包含序列号.安装VM. 3.VM10-MacOS补丁.用于创建苹果虚拟机. 安装VM就不 ...

随机推荐

  1. 关于java的自动拆装箱若干细节问题

    一.首先需要了解的几个前提: 1.自动装箱过程是通过调用valueOf方法实现的(如Integer.valueOf(10)),而拆箱过程是通过调用包装器的 xxxValue方法实现的(如Integer ...

  2. 前端要革命?看我在js里写SQL

    在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...

  3. win10 uwp 打包第三方字体到应用

    有时候我们会把一些特殊字体打包到软件,因为如果找不到我们的字体会变为默认,现在很多字体图标我们用得好,有时候我们的应用会用很漂亮的字体,需要我们自己打包,因为用户一般是没有字体. UWP使用第三方字体 ...

  4. Hibernate的一对多查询及去掉重复的对象distinct

    问:sql 中 select * from A left join B on A.id=B.id where A.id=? 如果在Hibernate 中 用HQL 怎么表达呢 ?答:from A le ...

  5. 常用Linux操作命令

    查看物理CPU个数:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个物理CPU中的核数:cat /proc ...

  6. JPA + SpringData 操作数据库 ---- 深入了解 SpringData

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7735616.html ------------------------------------ ...

  7. SpringBoot的几个使用技巧

    SpringBoot的几个使用技巧 首先提供几个SpringBoot开发过程中常用的网站: Spring Boot官方文档:http://docs.spring.io/spring-boot/docs ...

  8. LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)

    Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...

  9. 聊聊Java中的反射(一)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 反射reflection主要为了动态操作Java代码,它的主要功能体现在Java提供的refl ...

  10. 聊聊Java的字节码

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 巴山楚水凄凉地,二十三年弃置身.怀旧空吟闻笛赋,到乡翻似烂柯人.沉舟侧畔千帆过,病树前头万木春 ...