Jenkins九:Jenkins打包时同时生成企业ipa服务器下载plist

前一篇:Jenkins八:Jenkins添加新的target自动打包
后一篇:Jenkins十:Mac通过 Tomcat里安装Jenkins配置Master-Slave打包iOS并上传到svn服务器

前言

之前已经在jenkins自动打包时部署了一个nginx作为企业版ipa服务器,当时使用的人不多,就删掉了,现在项目经理让重新做一次,记录下流程

参考资料:

  • jenkins+xcode+svn+nginx+https自签名

1、部署nginx服务器

  • mac下安装nginx
  • nginx 的启动、停止与重启

2、部署nginx服务器ssh,支持https访问
3、部署ipa下载说明的plist的服务器,这个可以和2是同一个服务器,单要保证支持https的证书是正式机构签名的ssl证书,不能是自签名的证书,如果没有机构前面的证书,可以把使用GitHub等公共仓库代替,把plist存到GitHub上

4 生成ipa包、ipa下载plist、dYSM

打ipa包

# schema名称,需要替换成自己要打包的scheme
SCHEMECA="xxxxx"
#下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "./xxx/xxxx.xcworkspace" -scheme ${SCHEMECA}  -configuration "Release" clean


#生成xxx.app的包
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "./xxx/xxx.xcworkspace" -scheme ${SCHEMECA} -sdk iphoneos -configuration "Release" CODE_SIGN_IDENTITY="xxxx" SYMROOT='$(PWD)' -allowProvisioningUpdates

#读取打包的配置信息
#读取bundleId
bundleId=$(/usr/libexec/PlistBuddy -c "print CFBundleIdentifier" "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/Info.plist")
#读取build版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/Info.plist")
#读取展示版本号
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/Info.plist")
#读取APP的名称
displayNmae=$(/usr/libexec/PlistBuddy -c "print CFBundleName" "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/Info.plist")
#拷贝APPIcon到指定的地方
cp "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/[email protected]" "/xxx/${SCHEMECA}[email protected]"


#将xxx.app的包转换成xxx.ipa的包
xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${SCHEMECA}.app" -o "xxx.ipa"
#将xxx.ipa上传到其他服务器或文件夹
#删除xxx.ipa

#生成用于不同shell脚本间公用的参数
#先删除之前用过的参数文件
if [ -f "${WORKSPACE}/userParams.txt" ];then
rm "${WORKSPACE}/userParams.txt"
else
echo "文件不存在"
fi
#将参数写入到参数文件里
echo bundleID="${bundleId}" >> "${WORKSPACE}/userParams.txt"
echo bundleShortVersion="${bundleShortVersion}" >> "${WORKSPACE}/userParams.txt"
echo bundleVersion="${bundleVersion}" >> "${WORKSPACE}/userParams.txt"
echo displayNmae="${displayNmae}" >> "${WORKSPACE}/userParams.txt"
echo SCHEMECA="${SCHEMECA}" >> "${WORKSPACE}/userParams.txt"

生成plist

#读取shell之间的共享参数
source "${WORKSPACE}/userParams.txt"
cat << EOF > xxx.plist




items


assets


kind
software-package
url
需要具体改这里写出需要下载的ipa的地址,比如:https://127.0.0.1/ipas/12345.ipa


metadata

bundle-identifier
${bundleID}
bundle-version
${bundleShortVersion}
kind
software
title
${displayNmae}





EOF

#压缩文件
zip -q -r -m -o "xxx.plist.zip" "xxxx.plist"
#将plist文件上传到指定服务器
curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?
\ app_key=xxxxxx&app_id=xxxxxx" 
\ --form "api_version=1" 
\ --form "app_id=xxxxxx" 
\ --form "app_key=xxxxxx" 
\ --form "symbolType=2"  
\ --form "bundleId=${bundleId}" 
\ --form "productVersion=${bundleShortVersion}" 
\ --form "channel=xxx" 
\ --form "fileName=${UNIQUE_NAME}.app.dSYM.zip" 
\ --form "file=@${UNIQUE_NAME}.app.dSYM.zip" 
\ --verbose

#删除生成的文件
rm "xxxx.plist"
rm "xxx.plist.zip"

生成手机可访问点击自动安装的html

source "${WORKSPACE}/userParams.txt"
if [ -f "/xxx/xxx/index.html" ];then
rm "/xxx/xxx/index.html"
else
echo "文件不存在"
fi
cat << EOF > /xxx/xxx/index.html



    
    
    
    
    
    ${displayNmae}


    下载${displayNmae}ios测试版


EOF

生成dSYM文件

#读取shell之间的共享参数
source "${WORKSPACE}/userParams.txt"
#生成dsYM文件
dsymutil "${WORKSPACE}/Release-iphoneos/${SCHEMECA}.app/${SCHEMECA}" -o "xxxx.app.dSYM"
if [ ! -d "xxx.app.dSYM"  ];then
  echo "没有可以压缩的dsYM文件"
else
  zip -q -r -m -o "xxxx.app.dSYM.zip" "xxx.app.dSYM"
  #上传dsYM文件到解析平台或保存到指定文件夹
fi

使用git或svn提交创建的包

#git提交
#cd "/xxx/xxxx"
#git pull
#git add xxx
#git commit -m "自动提交plist"
#git push

#svn提交
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#cd /xxx/xxxx
#svn up
#svn add . --no-ignore --force
#svn ci -m "jenkins ios auto commit"

你可能感兴趣的:(Jenkins九:Jenkins打包时同时生成企业ipa服务器下载plist)