之前在公司配置Jenkins,尝试了脚本方式和Xcode方式,遇到各种坑,记录一下,让有需要的人少走弯路。
- 安装JAVA SDK
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
卸载JDK9方法: sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-9.jdk sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane sudo rm -fr ~/Library/Application\ Support/Java
- 安装Jenkins
2.1下载地址:https://jenkins.io/
2.2卸载命令: /Library/Application\ Support/Jenkins/Uninstall.command
2.3 unlock Jenkins: 查看默认密码:sudo cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword - 安装插件
安装可选插件: “GitLab Plugin”和“Gitlab Hook Plugin” “Xcode integration” “Credentials Plugin”和“Keychains and Provisioning Profiles Management” “Publish over FTP” “Post-Build Script Plug-in
注:若无法获取插件列表,可在系统管理-管理插件-高级 中替换地址(https://updates.jenkins.io/update-center.json) 或 使用vpn - 配置证书
4.1复制/Users/{用户名}/Library/Keychains 中的login.keychain到/Users/Shared/Jenkins/Library/Keychains
4.2 上传keychain和mobileporvision到jenkins
在系统管理->管理插件中找到Keychains and Provisioning Profiles Management,上传文件。
复制代码
注:查看描述文件信息命令:
security cms -D -i XXX.mobileprovision
4.3 拷贝描述文件到/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles 。若目录不存在,则创建目录,若无访问权限则修改权限。
4.4 打开钥匙串,拷贝“登录”中的证书到“系统”中
复制代码
- 配置项目
5.1 配置项目地址
Repository URL 可以使用 HTTP 或 SSH 两种形式的,这里需要注意,如果是采用 HTTP 形式的话,后面配置 Credentials 需要选择 Username with password 项,输入登录用户名和密码。如果是采用 SSH 形式的话,后面配置 Credentials 需要选择 SSH Username with private key 项,输入用户名(随便输入)和与Git上公钥对应的私钥(私钥地址 /Users/{username}/.ssh/id_rsa)
5.2 构建环境
5.3 构建
5.3.1 Xcode方式构建(推荐):
复制代码
5.3.2 命令方式打包
执行打包命令,注意需在执行脚本之前解锁keychain。如:
/usr/bin/security unlock -p 111 /Users/Shared/jenkins/Library/Keychains/login.keychain
echo '\nprepare to build ...\n'
build_cmd='sh '${WORKSPACE}'/xxx/Docs/ipa-build.sh '${WORKSPACE}'/xxx -s xxxx -t xxxx -e '${WORKSPACE}'/xxx/Docs/build_option.plist -n -p ""'
echo '\n----------------'
echo ${build_cmd}
echo '----------------\n'
eval ${build_cmd}
注:ipa-build.sh是打包脚本,网上案例很多,就不单独赘述了。使用脚本时可能会遇到各种权限问题,Xcode方式相对较简单。
5.3.3 导出ipa(xcode9之后不能直接导出):
复制代码
5.3.4 上传到发布平台,如蒲公英:
echo 'uploading to pgyer ...'
upload='curl -F "file=@./build/${BUILD_NUMBER}/xxx.ipa" -F "uKey=4a2e1eefc1630ee552cb4a69a985fa76xxx" -F "_api_key=db1746d5002bd004d2ba4a0a2cc8b7exxx" https://www.pgyer.com/apiv2/app/upload'
echo "-----------------------------------"
echo '当前路径:'$(pwd)
echo "upload:"
echo $upload
echo "-----------------------------------"
curl -F "file=@./build/${BUILD_NUMBER}/xxx.ipa" -F "uKey=4a2e1eefc1630ee552cb4a69a985fa76" -F "_api_key=db1746d5002bd004d2ba4a0a2cc8b72e" https://www.pgyer.com/apiv2/app/uploa
5.4 cocoapods .workspace工程打包
5.4.1 系统账户中安装cocoapods
主账户啊和jenkins下的cocoapods版本号需要一致
5.4.2 构建之前直线pod install安装依赖库
复制代码
build号自增
5.4.3 修改构建配置
复制代码
- 常见问题
6.1 找不到login.keychain
解决方案: 找不到login.keychain则使用login.keychain-db代替,并把名字改成login.keychain
6.2 报错Code Signing Error: No certificate for team 'xxx' matching 'iPhone Distribution: xxxxx.' found
Available provisioning profiles
[xxx] $ /usr/bin/security find-identity -p codesigning -v
0 valid identities found
解决方案:把证书从登录拷贝到系统里
6.3 Could not find 'cocoapods'
解决方案:在Jenkins目录下安装cocoapods,要注意版本号和主用户要一样
6.4 若证书都正确,可到Jenkins账户下编译试一下,若出现访问控制权限问题,可在keychain中统一设置。
复制代码