我个人当电脑环境:
macOS Sierra 10.12
Xcode Version 8.1
java version "1.8.0_111"
1.安装Jenkins
安装Jenkins 有两种方式,一种是下载pkg安装包,一种是下载.war安装包进行安装。当然,无论选哪种方式都需要去官网 下载。
安装步骤请参考以下文章:
手把手教你利用Jenkins持续集成iOS项目 (通过pkg安装)
一步一步构建iOS持续集成:Jenkins+GitLab+蒲公英+FTP (通过war安装)
安装成功后在浏览器中输入 http://localhost:8080 看下是能在浏览器中打开,如果能直接打开,恭喜你安装成功啦!
如果 http://localhost:8080 打开是 404 的话(我就是),一般情况下是JDK版本不支持,需要下载 最新的java运行环境,下载并安装好JDK后刷新 http://localhost:8080 页面就可以了。
404错误,需要更新JDK安装JDK
安装JDK
安装成功后重新打开 http://localhost:8080 的页面一般长这样:
这个时候需要我们需要去到 /Users/Shared/Jenkins/Home/secrets 目录下,打开 initialAdminPassword 文件,把密码复制出来填到网页上去重置密码。
前往/Users/Shared/Jenkins/Home/secrets 目录,提示没有权限如果提示权限不够,需要修改相应的文件权限:
修改everyone权限为只读 修改initialAdminPassword权限密码输进去后就是初始化。最后输入初始管理员的用户名密码等个人信息保存完成。
选择安装默认插件
进去之后页面是这样的
创建一个新任务
总结:
- 安装后无法打开localhost 页面一般情况下是JDK版本不支持,需要更新JDK。
- 无法打开文件时需要修改文件权限。
- 安装Jenkins 成功后,会在/Users/Shared/ 目录下创建一个 Jenkins 用户,其中Jenkins中所有相关文件都存放在该目录 ** /Users/Shared/Jenkins ** 下。
初始状态下该目录结构如下:
- Jenkins
- Home
- temp
2.在Jenkins中配置Xcode工程
先别点“创建一个新任务”,在这之前我们需要下载构建iOS项目的插件:
进去以后选择‘系统管理’ -- ‘管理插件’
管理插件
搜索Xcode,下载安装Xcode integration插件
安装完成以后我们在回到首页点击“创建一个新任务”,输入项目名称,选择“构建一个自由风格的软件项目”
构建一个自由风格的软件项目
构建项目完成后进入项目配置页面:
项目配置页面
可以看到配置步骤主要有:
- General
- 源码管理
- 构建触发器
- 构建环境
- 构建
- 构建后操作
General
- 设置项目名称
- 如果是GitHub 上的项目,可以直接勾选 GitHub project,并输入github上项目的地址
- 丢弃旧的构建
- ...
等等其他设置,目前我的设置如下:
源码管理
可以选择None、git、svn 三种托管方式
我这里用的github上的项目
构建触发器
暂时不管
构建环境
暂时不填
构建(重要)
选择构建步骤-->Xcode (如果没装Xcode插件这里就没法选)
一. General build settings
- Target 填项目Target,我这是:JenkinsDemo
- 展开Settings,勾选上 Clean before build? 和** Allow failing build results?**
- Configuration 中根据情况填 Debug 或 Release
- 勾选上 *Pack application and build .ipa? (是否打包成ipa)
- .ipa filename pattern:表示打包的ipa命名前缀,例如根据版本号命名、根据日期命名
- Output directory: 打包后的ipa存放目录,我这填的是 ${HOME}/build/ 表示:“/Users/Shared/Jenkins/Home/build”路径,其中${HOME} 代表 Jenkins用户下的Home目录(/Users/Shared/Jenkins/Home)
- Manifest Plist URL:暂时不知道做什么的
二. Code signing & OS X keychain options
和签名相关的一些设置
由于Jenkins下没有打包需要用到的证书和描述文件,因此,需要把证书拷贝的Jenkins环境下,有两种方法:
一种是安装 Keychains and Provisioning Profiles Management 插件进行证书的管理
另一种是直接把当前用户的证书( 载在 /Users/xxx/Library/MobileDevice/Provisioning Profiles 目录下)
拖到Jenkins根目录(/Users/Shared/Jenkins/Library)下的MobileDevice/Provisioning Profile目录中
即:把 /Users/xxx/Library/MobileDevice (xxx表示你自己的用户名)目录拷贝到 /Users/Shared/Jenkins/Library 下
勾选 Unlock Keychain?: Keychain path是固定填写${HOME}/Library/Keychains/login.keychain
Keychain password指的是你的授权密码,不是证书密码。
注意:${HOME}目录指的是Jenkins的根目录,也就是/Users/Shared/Jenkins,如果你的jenkins是新装的,你会发现Library目录中压根就没有Keychains目录。你需要去/Users/xxx/Library目录下把Keychains目录复制过来。
复制过来后:/Users/Shared/Jenkins/Library 目录下就有 Keychains 和 MobileDevice 两个目录了
三. Advanced Xcode build options
- Xcode Schema File:填工程的Schema
- SDK: 选择编译使用的SDK,不填则是默认值
- SYMROOT: 编译时SYMROOT文件目录,我这里填的是 ${HOME}/buildSymroot/
- Custom xcodebuild arguments:编译时传入的参数
- Xcode Workspace File: 如果项目使用的是xcworkspace的话这里就需要填对应的工程名,不需要加 ".xcworkspace" 后缀
- Xcode Project Directory:可不填
- Xcode Project File : 可不填
- Build output directory:编译时生成的文件存放目录,这里我填的是 ${HOME}/build/
注意:
如果项目中使用了cocoapods进行依赖管理,在构建时会报错:
Xcodebuild fails in jenkins with cocoapods
ld: warning: directory not found for option '-L/Users/Shared/Jenkins/build/Release-iphoneos/Masonry'
ld: library not found for -lMasonry
clang: error: linker command failed with exit code 1 (use -v to see invocation)
需要在 Product -> Scheme -> Manage Schemes 中勾选上所依赖的Pods
library not found for xxx
构建后步骤
在项目构建完成后可以选择发送邮件或其他方式进行提醒
开始构建项目
选中JenkinsDemo,点击立即构建,下放BuildHistory中会显示构建历史记录,点击当前构建,进入构建详情页:
立即构建 构建详情可以通过Console Output 查看该次构建的详细日志,如果构建失败可以根据这里输出的日志查找错误原因:
我一般是直接拉到日志底部查看日志结果,失败信息直接在底部可以看到。
这里是我遇到的几个失败日志:
- 提示没有匹配的证书,我的解决办法是:启用Xcode8的Automatically manage signing,然后把当前用户的证书( 在 /Users/xxx/Library/MobileDevice/Provisioning Profiles 目录下)
拖到Jenkins根目录(/Users/Shared/Jenkins/Library)下的MobileDevice/Provisioning Profile目录中
=== BUILD TARGET JenkinsDemo OF PROJECT JenkinsDemo WITH CONFIGURATION Release ===
Check dependencies
No profile matching 'xxxx' found: Xcode couldn't find a profile matching 'xxxxx'. Install the profile (by dragging and dropping it onto Xcode's dock item) or select a different one in the General tab of the target editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.1'
** BUILD FAILED **
2.日志一直停留在 “There are no schemes ” 不走
[JenkinsDemo] $ /usr/bin/xcodebuild -list -workspace JenkinsDemo.xcworkspace
There are no schemes in workspace "JenkinsDemo".
解决办法是上面提到的,在ManageScheme 中勾选所用到的Schemes
Manage scheme3.提示没有证书
=== BUILD TARGET JenkinsDemo OF PROJECT JenkinsDemo WITH CONFIGURATION Release ===
Check dependencies
Provisioning profile "iOS Team Provisioning Profile: TY.JenkinsDemo" doesn't include signing certificate "iPhone Developer: 451174332@qq.com (Y5P57G478W)".
Code signing is required for product type 'Application' in SDK 'iOS 10.1'
** BUILD FAILED **
The following build commands failed:
Check dependencies
(1 failure)
Cleaning up previously generated .ipa files
Cleaning up previously generated .dSYM.zip files
Packaging IPA
Finished: SUCCESS
需要把 “/Users/dengliwen/Library/Keychains” 文件拷贝到 “/Users/Shared/Jenkins/Library/Keychains” 中
4.其他错误,忘了是处理什么的了
钥匙串->选择证书->显示简介->允许所有运用程序访问此项目
待续。。。
参考链接:
使用 Jenkins 实现持续集成 (iOS)
http://www.cnblogs.com/qingjoin/p/3929493.html
http://www.cocoachina.com/ios/20160804/17281.html
http://www.360doc.com/content/14/0508/19/10058718_375884734.shtml
http://www.cnblogs.com/qingjoin/p/3929493.html
网友评论
localhost 未发送任何数据。你知道这个的原因吗?
Cleaning up previously generated .ipa files
Cleaning up previously generated .dSYM.zip files
Packaging IPA
[iOS自动打包] $ /usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleVersion" /Users/Shared/Jenkins/build/TestProject.xcarchive/Info.plist
[iOS自动打包] $ /usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleShortVersionString" /Users/Shared/Jenkins/build/TestProject.xcarchive/Info.plist
You have to provide a value for either the marketing or technical version. Found neither.
Build step 'Xcode' marked build as failure
Finished: FAILURE
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.0'",
咋办啊?配置文件已经拷贝过了
Code signing is required for product type 'Application' in SDK 'iOS 10.3' 这个怎么解决 配置文件都复制了
重点是第一句~
security: SecKeychainSetDomainDefault user: write permissions error
[helloworld] $ /usr/bin/security unlock-keychain -p ******** /Users/Shared/Jenkins/Library/Keychains/login.keychain
[helloworld] $ /usr/bin/security show-keychain-info /Users/Shared/Jenkins/Library/Keychains/login.keychain
Keychain "/Users/Shared/Jenkins/Library/Keychains/login.keychain" no-timeout
===========================================================
== Available provisioning profiles
[helloworld] $ /usr/bin/security find-identity -p codesigning -v
1) 19081EE90BA2D0D2AB96368EE1600CD2969F1CE8 "iPhone Distribution: Beijing Remote Xinhua Network Technology Co.,LTD (22B4UKXY6S)"
2) 1BD351DA9290FBED15841F0F4FAE7857CAB5E23B "iPhone Developer: 635888649@qq.com (7FXX6UFLE7)"
3) 1ABFC02DE1DD6A3224AA90A57A8D5010995CE851 "iPhone Developer: ycxinhuaios@163.com (QVV5ZKS395)"
4) 883F18F9758465253F843F0AAC8DF34BE93BA9A8 "iPhone Developer: tan mingquan (K7CLQ5YSKJ)"
5) 19081EE90BA2D0D2AB96368EE1600CD2969F1CE8 "iPhone Distribution: Beijing Remote Xinhua Network Technology Co.,LTD (22B4UKXY6S)"
5 valid identities found
FATAL: No global development team or local team ID was configured.
Build step 'Xcode' marked build as failure
Finished: FAILURE