ios jenkins 自动化工具打包

Jenkins是挺火的,其实,去年就接触过Jenkins,但是只是了解了下,真正配置的是其中的一个同事,但新公司要求,然后就需要自己动手配置Jenkins了。

 Jenkins是个很强大的工具,在配置过成功每个人可能遇到的问题不太一样,因此我就把我自己遇到的问题总结一下,安装教程的话网上资源还是很多的。

1.安装Jenkins  (必须是Java8环境,因为需要注册oracle,然后我就百度了一个MAC 百度云盘的资源)

https://www.pgyer.com/doc/view/jenkins_ios

推荐使用蒲公英文档安装

2.输入 http://localhost:8080

会进入jenkins主页面

会要求使用密码登录,参考博客:https://xiaozhuanlan.com/topic/0639428175

3.安装之后会推荐安装插件,安装之后会提示创建管理员。

4.Jenkins 服务启动的指令

cd jenkins.war

java -jar jenkins.war --httpPort=8080

5.Jenkins重新启动

http://localhost:8080/restart

6.然后就开始安装插件,这个网上资源很多就不多说了,安装之后按照相对应的配置上传login.keychain和PP文件(注意此处的pp文件必须是包含了你的对应的cer证书)

7.仓库地址之前使用了gitlab/github都可以也支持svn,然后在credentials里面填写ssh key也可以填写你的账号密码,目的是有访问权限,这个jenkins会将仓库项目copy到本地目录下,这个在jenkins build的时候可以看具体执行流程,指定分支可以具体来填。

8.构建环境要选择你上传的keychain/pp文件

9.然后执行shell语句,此处有坑,网上的很多schell都是根据自己业务来的,可能很多都不一致的,然后我各方查证和自己修改之后,最后我的正确的语句是


# 工程名
APP_NAME=""
Export_App_Name=""
#指定打包环境
BUILD_CONFIGURATION=${buildType}

# 证书,如果自动选择证书,设为“iPhone Developer”即可
CODE_SIGN_DEVELOPER="iPhone Developer"
# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.plist"

#buildNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${project_infoplist_path}")
shortVersion=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${project_infoplist_path}")
buildNumber=`date +"%m%d%H%M"`
buildNumber="$shortVersion.$buildNumber"

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${project_infoplist_path}"
#!/bin/bash
NOW=$(date +"%m-%d-%Y")
FILE="backup.$NOW.tar.gz"
echo "Backing up data to /nas42/backup.$NOW.tar.gz file, please wait..."


#取版本号
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包的话可以使用,此处暂不使用
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上传的ipa文件路径,暂时用不到,目前生产和发布是两个不同的配置需要到对应的jenkins下去取
IPA_PATH="$WORKSPACE/build"
echo ${IPA_PATH}
#echo "${IPA_PATH}">> text.txt
#集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}"  -configuration "${BUILD_CONFIGURATION}" clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration "${BUILD_CONFIGURATION}" CODE_SIGN_IDENTITY="${CODE_SIGN_DEVELOPER}" SYMROOT='$(PWD)'
xcodebuild archive -archivePath "$WORKSPACE/build/$APP_NAME.xcarchive" -workspace $WORKSPACE/$APP_NAME.xcworkspace -sdk iphoneos -scheme "$APP_NAME" -configuration "${BUILD_CONFIGURATION}" -CODE_SIGN_IDENTITY="$CODE_SIGN_DISTRIBUTION"
xcodebuild -exportArchive -archivePath "$WORKSPACE/build/$APP_NAME.xcarchive" -exportPath "$IPA_PATH" -exportOptionsPlist "$WORKSPACE/${APP_NAME}/ExportOptions1.plist" -allowProvisioningUpdates
#上传到蒲公英
#蒲公英上的user Key
uKey="398c759b200226d98d469fdebb4dae21"
#蒲公英上的API Key
apiKey="69d030a0c3dd2c3eeb695b7f70dde514"
#蒲公英版本更新描述,这里取git最后一条提交记录作为描述
MSG=`git log -1 --pretty=%B`
#要上传的ipa文件路径
echo $IPA_PATH
 
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
#curl -F "file=@${IPA_PATH}/$APP_NAME.ipa" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "buildUpdateDescription=${MSG}"  https://www.pgyer.com/apiv2/app/upload
#curl -F "file=@${IPA_PATH}/$APP_NAME.ipa" -F "uKey=${uKey}" -F "_api_key=${apiKey}" https://upload.pgyer.com/apiv1/app/upload
#curl -F "file=@${IPA_PATH}/$Export_App_Name.ipa"  -F "_api_key=${apiKey}" https://www.pgyer.com/apiv2/app/upload

 

注意:

坑点1:

//archive

xcodebuild archive -archivePath "$WORKSPACE/build/$APP_NAME.xcarchive" -workspace $WORKSPACE/$APP_NAME.xcworkspace -sdk iphoneos -scheme "$APP_NAME" -configuration "$BUILD_CONFIGURATION" -CODE_SIGN_IDENTITY="$CODE_SIGN_DISTRIBUTION"

//导出ipa

xcodebuild -exportArchive -archivePath "$WORKSPACE/build/$APP_NAME.xcarchive" -exportPath "$WORKSPACE/build/" -exportOptionsPlist "$WORKSPACE/${APP_NAME}/ExportOptions.plist" -allowProvisioningUpdates

导出ipa,此处我看到很多博客都是这样子的,

xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"

PackageApplication这个是很老的xcode版本有的,但是我按照别人的博客一番操作之后,一直不成功(坑了好久),然后就使用了xcodebuild Xcode指令打包语句,此处有坑,archive成功之后,exportArchive 导出一直失败,

Provisioning profile "XX" doesn't include signing certificate "xx developer"

报错的原因https://blog.csdn.net/qq_31672459/article/details/80059237看了这个博客,但是对我这个还不太行,最后我发现是因为我新生成的developer证书,pp文件并没有包含进去导致的,因此重新生成pp文件,将deveoper证书包含进去ok.

xcodebuild -exportArchive -archivePath "$WORKSPACE/build/$APP_NAME.xcarchive" -exportPath "$WORKSPACE/build/" -exportOptionsPlist "$WORKSPACE/${APP_NAME}/ExportOptions.plist" -allowProvisioningUpdates

 

坑点2:

ExportOptions.plist 手动导出ipa文件会有路径的

ExportOptions.plist,这个项目中是要配置的,并且路径和shell指令执行的路径要对上,具体参数配置,可以网上查,资源还是很多的。

然后,重新build now,很惊喜的看到jenkins/workspace/build里面可以看到已经成功的ipa,至此,自动打包jenkins终于配置成功,安卓和web相对来说比较简单,因为没有证书之类的配置,execute shell语句也很少,iOS 相对而言还是坑点挺多的,少走弯路还是很需要的。

 

坑点3

git feach remote fail.这个需要清理下工作空间的

 坑点4:

当导出ipa包文件失败的时候一定要手动管理证书,确定手动管理证书正常对待情况下在打包,有可能是pp文件未导入

 下面介绍下ExportOptions的相关配置:

首先说明下ExportOptions.plist配置一般用在自动化打包,特别注意的是Xcode9默认不允许访问钥匙串内容,必须设置allowProvisioningUpdates,所以在Xcode9下Jenkins无法完成,如下都是由于相关路径或者plist文件配置不正确导致打包失败。

ExportOptions.plist文件中有以下字段,配置如下:

method:字符串,为打包的类型,分为app-store,ad-hoc,enterprise和development,根据自己实际打包情况填写。

provisioningProfiles:字典,Xcode9需要,键值对为{bundleid:描述文件名},描述文件名最好使用其对应的UUID。

signingCertificate:证书类型,开发环境为iPhone Developer,生产环境为iPhone Distribution。

signingStyle:自动还是手动(manual与automatic),填写manual即可。

stripSwiftSymbols:填写为YES。

teamID:为开团队ID,在钥匙串中点击证书详情可以查看到。

uploadBitcode:为YES即可。

uploadSymbols:为YES即可。

自动打包到App Store的设置

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值