美文网首页
Jenkins九:Jenkins打包时同时生成企业ipa服务器下

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

作者: 独孤流 | 来源:发表于2019-03-06 15:00 被阅读0次

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

    前言

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

    参考资料:

    1、部署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/AppIcon60x60@3x.png" "/xxx/${SCHEMECA}_AppIcon60x60@3x.png"
    
    
    #将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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>items</key>
    <array>
    <dict>
    <key>assets</key>
    <array>
    <dict>
    <key>kind</key>
    <string>software-package</string>
    <key>url</key>
    <string>需要具体改这里写出需要下载的ipa的地址,比如:https://127.0.0.1/ipas/12345.ipa</string>
    </dict>
    </array>
    <key>metadata</key>
    <dict>
    <key>bundle-identifier</key>
    <string>${bundleID}</string>
    <key>bundle-version</key>
    <string>${bundleShortVersion}</string>
    <key>kind</key>
    <string>software</string>
    <key>title</key>
    <string>${displayNmae}</string>
    </dict>
    </dict>
    </array>
    </dict>
    </plist>
    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
    <!doctype html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="description" content="">
        <meta name="keywords" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>${displayNmae}</title>
    </head>
    <body>
        <a href="itms-services://?action=download-manifest&url=https://xxxx.plist">下载${displayNmae}ios测试版</a>
    </body>
    </html>
    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服务器下

          本文链接:https://www.haomeiwen.com/subject/vhvtpqtx.html