Jenkins自动化打包

一、安装Jekins

  1. Download Jenkins
  2. 访问http://localhost:8080/,打开initialAdminPassword文件。获取权限,可以手动更改访问权限(文件-显示简介-访问控制)或者执行命令sudo cat 路径,复制出密码。注册账号。
  3. 安装插件:系统管理->管理插件-可选插件:Xcode integration,Credentials Plugin,
    Keychains and Provisioning Profiles Management,
    Post-Build Script Plug-in

二、Jekins配置

1、文件拷贝

  1. 将/Users/管理员用户名/Library的MobileDevice文件夹拷贝到/Users/Shared/Jenkins/Library下,否则会出现找不到描述文件的错误。
  2. 打开钥匙串程序,找到相对应的证书,选择“允许所有的应用程序访问此项目”,并存储修改。
  3. 将/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 配置

Jenkins自动化打包_第1张图片
证书配置

]

1、Keychain和ProvisioningProfiles文件是隐藏文件,所以需要拷出来。
Keychain文件路径:/Users/管理员用户名/Library/Keychains/login.keychain
ProvisioningProfiles文件路径:/Users/管理员用户名/Library/MobileDevice/Provisioning Profiles

2、Keychain和ProvisioningProfiles文件选好后,都需要upload下。

三、创建项目

1、Jenkins+ Xcode + 蒲公英

Jenkins自动化打包_第2张图片
项目配置
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命令 + 蒲公英

详解Shell脚本实现iOS自动化编译打包提交

如果不设置证书,默认是选择项目设置的证书打包

Jenkins自动化打包_第3张图片
项目配置
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'

更新到Xcode 8.3的坑

xcode8.3之后添加 exportOptionsPlistcurl,以前xcrun -sdk iphoneos PackageApplication -v "/XXX/XXX.app" -o "/XXX/XXX"命令过时。

四、上传APPStore和Automator

1、上传APPStore

用altool上传至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 [email protected] -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创建插件

Xcode一键发布到AppStore

五、常见错误

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就好了

你可能感兴趣的:(Jenkins自动化打包)