一、安装Jekins
-
Download Jenkins
- 访问
http://localhost:8080/
,打开initialAdminPassword文件。获取权限,可以手动更改访问权限(文件-显示简介-访问控制)或者执行命令sudo cat 路径
,复制出密码。注册账号。 - 安装插件:系统管理->管理插件-可选插件:
Xcode integration
,Credentials Plugin
,Keychains and Provisioning Profiles Management
,Post-Build Script Plug-in
二、Jekins配置
1、文件拷贝
- 将/Users/管理员用户名/Library的MobileDevice文件夹拷贝到/Users/Shared/Jenkins/Library下,否则会出现找不到描述文件的错误。
- 打开钥匙串程序,找到相对应的证书,选择“允许所有的应用程序访问此项目”,并存储修改。
- 将/Users/管理员用户名/Library/Keychains/下的login.keychain及login.keychain-db这两个文件拷贝到/Users/Shared/Jenkins/Library/Keychains文件夹下面
注意:Mac OS 10.12以下的没有login.keychain-db这个文件,只需要拷login.keychain文件。
2、Keychains and Provisioning Profiles 配置
]
1、Keychain和ProvisioningProfiles文件是隐藏文件,所以需要拷出来。
Keychain文件路径:/Users/管理员用户名/Library/Keychains/login.keychain
,
ProvisioningProfiles文件路径:/Users/管理员用户名/Library/MobileDevice/Provisioning Profiles
2、Keychain和ProvisioningProfiles文件选好后,都需要upload下。
三、创建项目
1、Jenkins+ Xcode + 蒲公英
ps1.更新pod的命令
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd /Users/Shared/Jenkins/Home/workspace/Test
pod install --verbose --no-repo-update
ps2.最后上传蒲公英的命令
#蒲公英上的User Key
uKey="User Key"
#蒲公英上的API Key
apiKey="API Key"
#要上传的ipa文件路径
now=$(date +"%Y.%m.%d")
IPA_PATH="$WORKSPACE/IPA/Test_${now}.ipa"
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload
ps:有时候会出现Jenkins下的文件夹无法操作的情况,导致打包失败,遇到这种情况可以更改下Jenkins下的操作权限
1. sudo chmod -R 777 /Users/Shared/Jenkins ...
2. 输入密码。
2、Jenkins + xcodebuild命令 + 蒲公英
如果不设置证书,默认是选择项目设置的证书打包
ps1.上传命令
#"++++++++++++++更新Pod+++++++++++++"
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd /Users/Shared/Jenkins/Home/workspace/TestPack
pod install --verbose --no-repo-update
#"++++++++++++++打包iPA+++++++++++++"
# 工程名
APP_NAME="Test"
# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.plist"
#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
#日期
DATE="$(date +%Y%m%d)"
#ipa名称
IPA_NAME="${APP_NAME}_Debug_V${bundleShortVersion}_${DATE}"
#导出ipa路径
Export_PATH="${WORKSPACE}/Debug-iphoneos"
#Xcode8.3之后脚本打包需要添加配置的plist文件
ExporEt_Options_Plist="${WORKSPACE}/AdHocExportOptions.plist"
echo ${IPA_PATH}
echo "${IPA_PATH}">> ipaPath.txt
#打包生成iPa
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration 'Release' clean
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -archivePath "build/${IPA_NAME}.xcarchive" archive
#不设置证书和描述文件,默认使用项目中选择好的
#xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -archivePath "build/${IPA_NAME}.xcarchive" -configuration "$configuration" CODE_SIGN_IDENTITY="$codeSignIdentity" PROVISIONING_PROFILE="$provisioningProfile" >> $log_path
xcodebuild -exportArchive -archivePath "build/${IPA_NAME}.xcarchive" -exportPath "${Export_PATH}/${IPA_NAME}" -exportOptionsPlist "${ExporEt_Options_Plist}"
#"++++++++++++++上传蒲公英的命令+++++++++++++"
#蒲公英上的User Key
uKey="74f2001d31a2b3538e437f44705f5d7d"
#蒲公英上的API Key
apiKey="082d13c3cad994244c2ff9d468972dd8"
#要上传的ipa文件路径
Upload_PATH="${Export_PATH}/${IPA_NAME}/${APP_NAME}.ipa"
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${Upload_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" http://www.pgyer.com/apiv1/app/upload
PS:xcodebuild: error: invalid option '-exportFormat'
xcode8.3之后添加 exportOptionsPlistcurl
,以前xcrun -sdk iphoneos PackageApplication -v "/XXX/XXX.app" -o "/XXX/XXX"
命令过时。
四、上传APPStore和Automator
1、上传APPStore
将上传蒲公英的命令换成上传APPStore的命令
//验证ipa
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool --validate-app -f ${IPA_PATH} -u fangzhoujiaoyukeji@163.com -p 'FangZhou#123' -t ios --output-format xml
//上传itunsConnect
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool --upload-app -f ${IPA_PATH} -u 开发者账号@163.com -p '密码' -t ios --output-format xml
2、使用Automator创建插件
五、常见错误
iOS 通过Jenkins 自动构建ipa
Xcode8.2 Jenkins 集成遇到的问题
1、文件拷贝失败
Failed to copy /Users/Shared/Jenkins/Home/kpp_upload/xxx.mobileprovision to /Users/caizhuoyue/Library/MobileDevice/Provisioning Profiles/xxx.mobileprovision
解决方法:开放Library(/Users/管理员用户名/Library)文件夹写入权限
2、找不到描述文件
No profile matching '证书' found: Xcode couldn't find a profile matching '证书'. 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.0'
解决方法:将/Users/管理员用户名/Library下的MobileDevice文件夹拷贝到/Users/Shared/Jenkins/Library下面
3、schemes为空
Jenkins xcodebuild There are no schemes in workspace
Manage Schemes,设置schemes共享
4、使用pod命令时,出现pod command not found错误。
解决方法,终端输入echo $PATH
,在Jenkins菜单中点击"系统管理"->"系统设置"->"全局属性",填入相应键(PATH)值(终端输出的内容)。
5、**/Frameworks/AFNetworking.framework: unknown error -1=ffffffffffffffff
出现类似这样未知错误,具体原因不知道,我重新设置下 系统管理的PATH
就好了