美文网首页
iOS使用Jenkins自动打包ipa且生成二维码

iOS使用Jenkins自动打包ipa且生成二维码

作者: coder_xiang | 来源:发表于2020-05-12 16:29 被阅读0次

    这篇文章提供的方法比较多坑, 请参考另外一篇最新的:https://www.jianshu.com/p/c9075e7005e2 , 最新的方法已经实践目前已经使用.

    本文概述

    本文将会带领大家一步步实现iOS自动打包, 自动生成ipa安装包和二维码供给测试工程师进行扫描安装.
    网络上关于这类博客众多且繁杂, 本人亲测很多已经过时, 大家不要再重复踩坑了. 以下方法流程是我今天亲自用新电脑走的流程, 现详细分解给大家.

    一. 安装Java JDK

    Jenkins依赖了Java环境,所以在安装Jenkins前,要确保mac系统要安装了Java

    1. 终端命令查看mac电脑是否安装了java sdk, 输入查看java 版本的命令行:
      **注意**: 必须安装jdk 8---jdk 11 之间的版本, 版本太高的话就启动不来jenkins
    java --version
    

    新电脑肯定会报 "No Java runtime present, requesting install"

    1. 安装Java JDK网址: Java SDK, 安装包下载完直接安装即可.
    • (如果你下载有pkg安装包, 可以通过命令行: open /Library/Java/JavaVirtualMachines 打开需要安装到java jdk的目录 把jdk解压包放里面去)

    二. 安装home brew (跳过吧, 先看第三步, 第二步现在太多坑了 (还是tomcatyun'xjenkins安装包的方式比较好) )

    jenkins的命令行下载安装需要借助homebrew, 所以要先下载安装homebrew

    1. 终端命令查看mac电脑是否安装了brew, 输入查看brew 版本的命令行:
    brew --version
    

    新电脑肯定会报 "command not found brew"

    1. 安装brew网址: https://brew.sh/
      image.png
    • brew网址说得很清晰, 在命令行输入以下这行命令就能安装
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    踩坑啦掉坑啦:
    终端报错:
    xcode-select: error: invalid developer directory '/Library/Developer/CommandLineTools'
    Failed during: /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools

    • 提示为无效的CommandLineTools, 新版本的xcode默认没有安装这个东西了.
      -解决办法1: 手动下载安装, 下载网址: https://developer.apple.com/download/more/
      image.png
      -解决办法2: 命令行安装: 新打开一个终端输入:
      xcode-select --install
    

    一步步确认安装就好了.

    • 然后重新在命令行输入以下这行命令
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    又掉坑啦😿
    以上这个官方最新的命令行并不能成功安装brew
    经过一翻操作, 找到能解决的办法

    `Homebrew`以前的默认安装命令行:
    
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
    `安装以上这行代码成功了!`
    
    *******************************************************************************************************
    如果你安装失败, 请使用下面的命令:
    /usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"
    //上面脚本中使用了中科大镜像来加速访问。
    安装使用到的脚本源码在此 [homebrew-install](https://link.zhihu.com/?target=https%3A//github.com/ineo6/homebrew-install) ,仅修改了仓库地址部分,不会产生安全隐患,
    

    三. 安装Jenkins

    安装Jenkins有两种方法

    • 使用命令行安装 (太多坑了 brew总是更新安装失败)
    • 使用jenkins.pkg安装 (推荐使用) jenkins下载地址: https://www.jenkins.io/download/
    1
    2

    安装jenkins完成后, 输入命令行, 打开运行jenkins,

     java -jar  /Applications/Jenkins/jenkins.war 
    

    然后打开浏览器输入网址: http://localhost:8080/ 进入以下页面

    image.png
    这里需要我们输入Jenkins的密码, 这个安装密码保存在我们安装jenkins的目录下,
    输入下面这句命令行: 进入jenkins的安装目录, 由于secrets文件夹是保密了的不可以读写, 需要你查看此文件夹的简介, 然后修改为可以读. 密码就在secrets文件夹里面的initialAdminPassword文件里面, initialAdminPassword文件也是受保护的需要你修改可读写属性.
    open /Users/Shared/Jenkins/Home/
    

    打开initialAdminPassword文件复制里面的密码, 粘贴到浏览器上面的输入框, 出现下面插件图示,

    image.png
    直接下一步
    560
    如果没出现上面图示, 刷新一下页面就会出现. 这里需要等待20分钟左右...看你们公司网速吧...
    这里尽量多安装你所需要的插件, 如果这里不安装, 后面需要你手动查询安装

    安装成功后, 输入个人账户,


    image.png

    jenkins算是启动成功了!


    image.png

    重启jenkins: 在浏览器输入地址: localhost:8080/restart

    四. 配置Jenkins

    创建新项目

    image.png

    Jenkins创建新项目配置环境


    image.png
    • 配置 general


      image.png
      image.png
      image.png

      配置好的generea最终在打包界面长成这样:


      image.png
    • 配置 Source Code Management
      image.png
      配置ssh, 至于怎样生成SSH请查看我的文章: https://www.jianshu.com/p/7bce93f452b5
      image.png
      image.png
      id_rsa 文件里面的内容记得要copy 全部 !!!
      -还需要把git路径确认一下
      image.png
      image.png
    • 配置打包的环境名称:


      image.png
    • 打包执行脚本的配置:


      image.png

      相关脚本如下

    #修改版本号,build号
    # 2020.3.27号修改为: 去掉设置版本号选项,直接使用工程中的版本号
    
    file_path=${PWD}/Configs/Environment/$server.xcconfig
     
    
    echo "使用Jenkins自增编号 ${BUILD_NUMBER}"
    
    sed -i "" 's/APP_BUILD_NUMBER = .*/APP_BUILD_NUMBER = '"${BUILD_NUMBER}"'/g' ${file_path}
    
    
    echo "开始自动化构建"
    
    echo "${PWD}"   
    
    archive_path=${PWD}/archive/${BUILD_NUMBER}
    
    archive_file_name=${archive_path}/Jimu.xcarchive
    
    workspace_path=${PWD}/Jimu/Jimu.xcworkspace
    
    
    #install cocoapods
    
    cd Jimu
    
    
    #更新Blockly仓库,确保能够找到最新的版本
    pod repo update JimuSpecs
    
    pod install
    
    #加密编译参数V2.3.0版本(更新于2019.7.4 Glen)
    SWIFTFLAG="-Xllvm -ipo -Xllvm -ipo-percentage=80 -Xllvm -ipo-loop=1 \
    -Xllvm -transform-operator-identically -Xllvm -split-basic-block"
    
    if [ "$configuration" = 'Inhouse' ]; then
    
    export_options_path=${WORKSPACE}/export/ExportOptionsInHouse.plist
    
    echo "开始打InHouse版本的包"
    
    elif [ "$configuration" = 'Debug' ]; then
    
    export_options_path=${WORKSPACE}/export/ExportOptionsInHouse.plist
    
    echo "开始打Debug版本的包"
    
    elif [ "$configuration" = 'Release' ]; then
    
    echo "关闭FileShare"
    /usr/libexec/PlistBuddy -c 'Set:UIFileSharingEnabled bool false' ${PWD}/Jimu/Info.plist
    
    export_options_path=${WORKSPACE}/export/ExportOptionsAppStore.plist
    
    echo "开始打Release版本的包"
    
    fi
    
    configuration=$configuration$server
    
    if $encryption;  then
    
    #加密归档
    xcodebuild -toolchain "cn.ijiami.obf" -workspace ${workspace_path} -scheme Jimu \
    -configuration ${configuration} OTHER_SWIFT_FLAGS="${SWIFTFLAG}" \
    archive -archivePath ${archive_file_name}
    
    else 
    
    #不加密归档
    xcodebuild -workspace ${workspace_path} -scheme Jimu -configuration ${configuration} \
    archive -archivePath ${archive_file_name}
    
    fi
    
    #导出ipa包
    xcodebuild -exportArchive -archivePath ${archive_file_name} -exportPath ${archive_path} \
    -exportOptionsPlist ${export_options_path}
    
    echo "构建完成,创建对应的配置文件以及二维码"
    
    
    # 到这里,在archive/自增编号/目录下存在两个文件:Jimu.ipa和Jimu.xcarchive
    
    #重命名 【分支名_证书配置_服务器配置_构建自增编号】
    
    name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
    
    
    # 2020.3.27更新,使用本地服务器存储plist文件
    
    # 重命名
    mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.ipa ${PWD}/archive/${BUILD_NUMBER}/$name.ipa
    
    # 移动到apache目录下
    cp ${PWD}/archive/${BUILD_NUMBER}/$name.ipa /Users/max/Sites/Jimu/ipa/$name.ipa
    
    
    echo "创建对应的配置文件以及二维码"
    cd /Users/max/Sites/Jimu/ipa
    #复制配置文件,生成当前版本的配置文件
    cp Jimu.plist $name.plist
    
    full_path=https:\/\/10.10.1.74\/Jimu\/ipa\/${name}.ipa
    
    #修改ipa包下载路径
    /usr/libexec/PlistBuddy -c 'Set items:0:assets:0:url '"${full_path}"'' $name.plist
    
    #给读写权限
    chmod -R 777 /Users/max/Sites/
    
    
    #以下是旧版的脚本内容
    #echo "====== Rename ipa file to: "$name" ======"
    #mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.ipa ${PWD}/archive/${BUILD_NUMBER}/$name.ipa 
    #mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive ${PWD}/archive/${BUILD_NUMBER}/$name.xcarchive 
    
    #echo "====== Create plist file for this version ipa ======"
    
    #cd ../plist/Jimu3.0
    
    #cp Jimu3.0.plist $name.plist #复制配置文件,生成当前版本的配置文件
    
    #full_path=http:\/\/10.10.1.74:8080\/job\/Jimu3.0\/${BUILD_NUMBER}\/artifact\/archive\/${BUILD_NUMBER}\/${name}.ipa
    
    #修改ipa包下载路径
    #/usr/libexec/PlistBuddy -c 'Set items:0:assets:0:url '"${full_path}"'' $name.plist
    
    #git status
    #git checkout
    #git pull
    #git add -A
    #git commit -m 'add new version plist file'
    #git push origin master
    #git status
    
    #2020.3.27更新,使用本地的服务器存储plist文件
    echo "创建二维码"
    
    name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
    
    url="https://10.10.1.74/Jimu/download.html?version=$name"
    
    myqr $url -n $name.jpg -d ./archive/${BUILD_NUMBER}/
    
    
    #以下是旧版的脚本内容
    
    #echo "====== Create QRCode for this version ======"
    
    #name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
    
    #url="http://10.10.1.74:8080/Jimu3.0/download.html?version=$name"
    
    #myqr $url -n $name.jpg -d ./archive/${BUILD_NUMBER}/
    
    #echo "====== Create QRCode Success ======"
    
    
    if $uploadDYSMFile; then 
    
    echo "上传dSYM文件到bugly进行分析"
    
    #dSYM文件路径
    name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
    path=${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive/dSYMs
    dsymFilePath=${path}/Jimu.app.dSYM
    
    #将dSYM文件压缩成zip文件
    zip -q -r -o ${path}/Jimu.app.dSYM.zip ${dsymFilePath}
    
    zipFilePath=${path}/Jimu.app.dSYM.zip
    
    
    #根据bundle id 确定bugly平台的appKey和appId
    
    if [ "$configuration" = 'Inhouse' ]; then
    
    appid="5e31ae0d11"
    appkey="91927657-0c29-4c2e-8d7a-4248891a53ae"
    bundleId="com.ubtechinc.jimu2s"
    
    else 
    
    appid="47342e2edb"
    appkey="a1166164-edb1-4f46-956e-0e871fbd0c1d"
    bundleId="com.ubtechinc.jimu"
    
    fi
    
    #读取版本号
    plistFilePath=${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive/Info.plist
    version=$(/usr/libexec/PlistBuddy -c "Print ApplicationProperties:CFBundleShortVersionString" ${plistFilePath})
    buildNumber=$(/usr/libexec/PlistBuddy -c "Print ApplicationProperties:CFBundleVersion" ${plistFilePath})
    productVersion="${version}(${buildNumber})"
    
    echo "读取版本号结果: ${productVersion}"
    
    echo "开始上传dSYM文件"
    
    curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=${appkey}&app_id=${appid}" \
    --form "api_version=1" --form "app_id=${appid}" \
    --form "app_key=${appkey}" --form "symbolType=2" \
    --form "bundleId=${bundleId}" \
    --form "productVersion=${productVersion}" \
    --form "fileName=Jimu.app.dSYM.zip" \
    --form "file=@${zipFilePath}" --verbose ||true
    
    echo "上传dSYM文件结束"
    
    fi
    
    

    编译完成后的动作


    image.png
    archive/${BUILD_NUMBER}/*.ipa, archive/${BUILD_NUMBER}/*.jpg, archive/${BUILD_NUMBER}/**/Jimu.app.dSYM
    

    五. 最终打出来的ipa包 和 二维码

    image.png

    注意注意!

    近期反馈homebrew安装更新很多问题, 安装jenkins还有一个解决方案, 用Tomcat配合jenkins.war运行Jenkins项目

      1. 需要去Tomcat官网下载一个包安装在电脑上http://tomcat.apache.org/
        image.png
    • 2、安装在资料库的目录下:例如:/Users/XXX(个人电脑名称)/Library

    • 3、然后进入Tomcat 的bin目录下


      image
    • 4/出现红色标识时,需要增加权限,输入: chmod +x *.sh,配置所有权限

     chmod +x *.sh
    
    • 5、启动Tomcat
     ./startup.sh
    
    • 6、在浏览器打开:localhost:8080 ,打开界面如下:


      image

      (可能出现的问题:端口号被占,需要更换端口号,更换端口号步骤,(Mac版与Windows更改文件一致));

    • 7、去Jenkins官网下载一个war包

    • 8、把解压的war放入Tomcat的webapps的目录下:


      image
    • 9、在浏览器输入网址 localhost:8080/jenkins/
      此时页面可能在刷新,我们只需要等待几分钟即可,然后就会跳转到如下页面:
      这里的密码输入参考本文章上面, 有提到.


      image

    注意 **jenkins会自动安装在root目录下, 请把它重置放在你的用户目录下, 这样才能有权限执行 **

    相关文章

      网友评论

          本文标题:iOS使用Jenkins自动打包ipa且生成二维码

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