美文网首页自动化,CICDiOS app打包上线测试流程app打包测试上线
Jenkins打包后续:Shell脚本自动修改build号,并提

Jenkins打包后续:Shell脚本自动修改build号,并提

作者: 地上的 | 来源:发表于2019-03-07 16:12 被阅读121次

    继之前完善了Jenkins打包,可以交给那些点点点们一键化打出各种环境的包后,在最终上线前,需要打Release发到TestFlight上去。
    前面Jenkins的配置和基础打包操作铺垫在之前的文章中都OK了(详见:自动化打包实战 — Jenkins),那我们接下来实现打Release包上传TestFlight,并且在这之前需要先自己push一个修改Build号的提交(因为TestFlight上需要不一样的Build号),这里使用Shell脚本处理的,行了,开工。

    在拉取最新分支的代码后整个过程总共分为3步:

    1、自动修改Build号,并生成提交,push到远程分支上;
    2、开始打Release包,并导出IPA文件;
    3、利用Application Loader插件实现自动上传。

    前提:Jenkins相关配置已经完成,发布证书、本地Git用户、push到Git上的权限账户等都已配置完成,如果配置未完成,部分错误在后面会出现,再补上也OK。

    一、自动修改Build号,并生成提交,push到远程分支上

    1、自动修改Build号 (Shell脚本)

    (1)先取到当前Build号,Shell中读取plist文件的方法比较简单,利用的是Mac中操作plist文件的PlistBuddy,路径在/usr/libexec/PlistBuddy下,这点在之前的文章中写过:Jenkins 自动打包后打一个tag并同步到origin

     // Jenkins项目拉取下来后,本地的project中,info.plist的路径
    PRODUCT_SETTINGS_PATH=/Users/xxxxx/.jenkins/workspace/xxxxx/xxxxx/Info.plist 
    // 取到Build号(示例:1.0.8.3)
    BundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
    

    (2)将版本号(示例:1.0.8.3)先分割字符串,取到最后一个元素(可能会是2位数字或者3位数字),然后把最后一个元素转数字,再 +1 ,再转回字符串。

    // 定义一个数组,将前面取到的Build号字符串根据“.”进行分割,得到@[1, 0, 8, 3]
    array=(${BundleVersion//./ })
    // 拿到数组中最后一个字符串 "3",(其中  ${#array[*]}  是获取数组的length)
    lastNumber=${array[${#array[*]}-1]}
    // 将这个字符串转数字并且 +1 ,得到 4
    newLastNumber=`expr $lastNumber + 1`
    // 再转回字符串 得到“4”
    newLastNumberString=${newLastNumber}
    

    (3)进行字符串拼接,最终效果:1.0.8.4

    // 定义一个新字符串,为数组第一个元素“1”
    NewBundleVersion=${array[0]}
    // 定义分隔符字符串 “.”
    point=.
    // 用for循环,从第2个元素开始一直到倒数第2个元素都取出(不取最后一个,因为要用新的)
    for ((i = 1; i < ${#array[@]}-1 ; i++ ))
    do
    // 自己 = 自己 + . + 元素
        NewBundleVersion=${NewBundleVersion}${point}${array[$i]}
    done
    
    // 最后把前面 加了1的新元素 添加到最后,于是得到1.0.8.4
    NewBundleVersion=${NewBundleVersion}${point}${newLastNumberString}
    

    (4)将新的Build号写入info.plist文件

    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $NewBundleVersion" "$PRODUCT_SETTINGS_PATH"
    
    2、生成commit,然后push上去 (Git命令)

    (1)生成提交描述:

    // 取到最新的Build号
    PRODUCT_SETTINGS_PATH=/Users/xxxxx/.jenkins/workspace/xxxxx/xxxxx/Info.plist 
    BundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
    // 拼接一个提交描述的字符串
    CommitMessage="自动提测testflight,build:"${BundleVersion}
    

    (2)到对应的Git目录下进行Git操作

    // 进入项目路径
    cd /Users/xxxx/.jenkins/workspace/xxxxxxxx
    
    // git add -u 加上路径,只添加指定路径的文件到暂存区,这里是把修改过的info.plist文件加入
    git add -u /Users/xxxx/.jenkins/workspace/xxxxxxxxxx/xxxxxxxx/Info.plist
    // 利用前面生成的提交提交描述生成commit
    git commit -m ${CommitMessage}
    // push到指定的远程分支上,我这里是develop
    git push origin HEAD:develop
    

    附上完整版给伸手党朋友:

    写成两个Shell步骤即可:

    PRODUCT_SETTINGS_PATH=/Users/xxxx/.jenkins/workspace/xxxxxxx/xxxxx/Info.plist
    BundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
    array=(${BundleVersion//./ })
    lastNumber=${array[${#array[*]}-1]}
    newLastNumber=`expr $lastNumber + 1`
    newLastNumberString=${newLastNumber}
    
    NewBundleVersion=${array[0]}
    point=.
    for ((i = 1; i < ${#array[@]}-1 ; i++ ))
    do
        NewBundleVersion=${NewBundleVersion}${point}${array[$i]}
    done
    
    NewBundleVersion=${NewBundleVersion}${point}${newLastNumberString}
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $NewBundleVersion" "$PRODUCT_SETTINGS_PATH"
    
    PRODUCT_SETTINGS_PATH=/Users/xxxxx/.jenkins/workspace/xxxxx/xxxxx/Info.plist 
    BundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
    CommitMessage="自动提测testflight,build:"${BundleVersion}
    
    cd /Users/xxxx/.jenkins/workspace/xxxxxxxx
    git add -u /Users/xxxx/.jenkins/workspace/xxxxxxxxxx/xxxxxxxx/Info.plist
    git commit -m ${CommitMessage}
    git push origin HEAD:develop
    

    二、开始打Release包,并导出IPA文件

    这点在之前的Jenkins文章中写过了,主要是利用xcbuild命令去做的,这里要注意的就是打包的类型要又debug改为release即可。

    xcodebuild -archivePath "/Users/xxxx/.jenkins/workspace/xxxxxxxxx/build/Release-iphoneos/xxxxxx.xcarchive" -workspace 项目.xcworkspace -sdk iphoneos -scheme "你想打包的scheme" -configuration "Release" archive
    
    xcodebuild -exportArchive -archivePath "/Users/xxxx/.jenkins/workspace/xxxxxxxxxxx/build/Release-iphoneos/xxxxxxx.xcarchive" -exportPath "/Users/xxxx/.jenkins/workspace/xxxxxxxxx/build/输出地址" -exportOptionsPlist '/Users/xxxx/.jenkins/workspace/xxxxxxxxxx/build/ExportOptions.plist' -allowProvisioningUpdates
    

    三、利用Application Loader插件实现自动上传

    // 取到Application Loader中上传插件altool的地址
    ALTOOLPATH=/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool
    // 你的Apple ID和密码,这里密码不是登录密码,自己去生成一个使用密码
    APPID="xxxxxxx@xxxx.com"
    APPPASSWORD="xxxx-xxxx-xxxx-xxxx"
    // IPA文件的路径,就是前面导出IPA包时候填的地址
    IPA_PATH="/Users/xxxx/.jenkins/workspace/xxxxxxxx/build/xxxxxxxxxx/xxxxxx.ipa"
    
    #验证信息
    "${ALTOOLPATH}" --validate-app -f "${IPA_PATH}" -u "${APPID}" -p "${APPPASSWORD}" --output-format xml
    
    #上传iTunesConnect
    "${ALTOOLPATH}" --upload-app -f "${IPA_PATH}" -u "${APPID}" -p "${APPPASSWORD}" --output-format xml
    

    至此,三大步骤走完了,开始让热心的测试们自己点点点去吧,不要再跟他们纠结于打包事情上面了,算是节约了自己的时间吧。

    相关文章

      网友评论

        本文标题:Jenkins打包后续:Shell脚本自动修改build号,并提

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