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="TestDemo"
#指定打包环境
BUILD_CONFIGURATION="Release"
# 证书,如果自动选择证书,设为“iPhone Developer”即可
CODE_SIGN_DEVELOPER="iPhone Developer"
# 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)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上传的ipa文件路径
IPA_PATH="$HOME/${IPANAME}"
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 "$WORKSPACE/build/" -exportOptionsPlist "$WORKSPACE/${APP_NAME}/ExportOptions.plist" -allowProvisioningUpdates
#上传到蒲公英
#蒲公英上的user Key
uKey="398c759b200226d98d469fdebb4dae21"
#蒲公英上的API Key
apiKey="69d030a0c3dd2c3eeb695b7f70dde514"
#蒲公英版本更新描述,这里取git最后一条提交记录作为描述
MSG=`git log -1 --pretty=%B`
#要上传的ipa文件路径
echo $IPA_PATH
#我的IPA_PATH路径有问题,这个根据你们自己项目来
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "buildUpdateDescription=${MSG}" http://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 导出一直失败,
报错的原因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,这个项目中是要配置的,并且路径和shell指令执行的路径要对上,具体参数配置,可以网上查,资源还是很多的。
然后,重新build now,很惊喜的看到jenkins/workspace/build里面可以看到已经成功的ipa,至此,自动打包jenkins终于配置成功,安卓和web相对来说比较简单,因为没有证书之类的配置,execute shell语句也很少,iOS 相对而言还是坑点挺多的,少走弯路还是很需要的。
坑点3
git feach remote fail.这个需要清理下工作空间的
下面介绍下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的设置